From 169d011cccb4c0ba016da2c043f157b1f83fb7e7 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Fri, 13 Oct 2023 14:18:04 +0200 Subject: [PATCH 01/81] feat(reporter): <- adds skeleton for this --- packages/reporter/.env.example | 0 packages/reporter/.eslintignore | 2 + packages/reporter/.eslintrc.yml | 21 + packages/reporter/.nvmrc | 1 + packages/reporter/.prettierignore | 2 + packages/reporter/.prettierrc.yml | 7 + packages/reporter/README.md | 1 + packages/reporter/nodemon.json | 6 + packages/reporter/package.json | 29 + packages/reporter/src/index.ts | 0 packages/reporter/tsconfig.json | 28 + packages/reporter/yarn.lock | 2477 +++++++++++++++++++++++++++++ 12 files changed, 2574 insertions(+) create mode 100644 packages/reporter/.env.example create mode 100644 packages/reporter/.eslintignore create mode 100644 packages/reporter/.eslintrc.yml create mode 100644 packages/reporter/.nvmrc create mode 100644 packages/reporter/.prettierignore create mode 100644 packages/reporter/.prettierrc.yml create mode 100644 packages/reporter/README.md create mode 100644 packages/reporter/nodemon.json create mode 100644 packages/reporter/package.json create mode 100644 packages/reporter/src/index.ts create mode 100644 packages/reporter/tsconfig.json create mode 100644 packages/reporter/yarn.lock diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example new file mode 100644 index 00000000..e69de29b diff --git a/packages/reporter/.eslintignore b/packages/reporter/.eslintignore new file mode 100644 index 00000000..b68087da --- /dev/null +++ b/packages/reporter/.eslintignore @@ -0,0 +1,2 @@ +**/dist +**/node_modules \ No newline at end of file diff --git a/packages/reporter/.eslintrc.yml b/packages/reporter/.eslintrc.yml new file mode 100644 index 00000000..27672a35 --- /dev/null +++ b/packages/reporter/.eslintrc.yml @@ -0,0 +1,21 @@ +extends: + - "eslint:recommended" + - "plugin:@typescript-eslint/eslint-recommended" + - "plugin:@typescript-eslint/recommended" + - "prettier" +parser: "@typescript-eslint/parser" +parserOptions: + project: "tsconfig.json" +plugins: + - "@typescript-eslint" +root: true +rules: + "@typescript-eslint/no-floating-promises": + - error + - ignoreIIFE: true + ignoreVoid: true + "@typescript-eslint/no-inferrable-types": "off" + "@typescript-eslint/no-unused-vars": + - error + - argsIgnorePattern: "_" + varsIgnorePattern: "_" diff --git a/packages/reporter/.nvmrc b/packages/reporter/.nvmrc new file mode 100644 index 00000000..0828ab79 --- /dev/null +++ b/packages/reporter/.nvmrc @@ -0,0 +1 @@ +v18 \ No newline at end of file diff --git a/packages/reporter/.prettierignore b/packages/reporter/.prettierignore new file mode 100644 index 00000000..b68087da --- /dev/null +++ b/packages/reporter/.prettierignore @@ -0,0 +1,2 @@ +**/dist +**/node_modules \ No newline at end of file diff --git a/packages/reporter/.prettierrc.yml b/packages/reporter/.prettierrc.yml new file mode 100644 index 00000000..e9bada2e --- /dev/null +++ b/packages/reporter/.prettierrc.yml @@ -0,0 +1,7 @@ +bracketSpacing: true +printWidth: 120 +proseWrap: "always" +singleQuote: false +tabWidth: 2 +trailingComma: "all" +semi: false diff --git a/packages/reporter/README.md b/packages/reporter/README.md new file mode 100644 index 00000000..7d726673 --- /dev/null +++ b/packages/reporter/README.md @@ -0,0 +1 @@ +# reporter diff --git a/packages/reporter/nodemon.json b/packages/reporter/nodemon.json new file mode 100644 index 00000000..84ddf673 --- /dev/null +++ b/packages/reporter/nodemon.json @@ -0,0 +1,6 @@ +{ + "watch": ["src"], + "ext": "ts,json", + "ignore": ["src/**/*.spec.ts"], + "exec": "ts-node ./src/index.ts" + } \ No newline at end of file diff --git a/packages/reporter/package.json b/packages/reporter/package.json new file mode 100644 index 00000000..19121e24 --- /dev/null +++ b/packages/reporter/package.json @@ -0,0 +1,29 @@ +{ + "name": "reporter", + "author": { + "name": "gnosis", + "url": "https://github.com/gnosis" + }, + "scripts": { + "compile": "tsc", + "lint": "eslint --ignore-path ./.eslintignore --ext .js,.ts .", + "prettier:check": "prettier --check \"**/*.{js,json,md,sol,ts,yml}\"", + "prettier:write": "prettier --write \"**/*.{js,json,md,sol,ts,yml}\"", + "start:dev": "nodemon" + }, + "packageManager": "yarn@3.2.1", + "dependencies": { + "dotenv": "^16.3.1", + "viem": "^1.16.5" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^6.7.5", + "@typescript-eslint/parser": "^6.7.5", + "eslint": "^8.51.0", + "eslint-config-prettier": "^9.0.0", + "nodemon": "^3.0.1", + "prettier": "^3.0.3", + "ts-node": "^10.9.1", + "typescript": "^5.2.2" + } +} diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/reporter/tsconfig.json b/packages/reporter/tsconfig.json new file mode 100644 index 00000000..eec3d55e --- /dev/null +++ b/packages/reporter/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDecoratorMetadata": true, + "esModuleInterop": true, + "experimentalDecorators": true, + "forceConsistentCasingInFileNames": true, + "lib": [ + "es6" + ], + "module": "commonjs", + "moduleResolution": "node", + "noImplicitAny": true, + "outDir": "./dist", + "removeComments": true, + "resolveJsonModule": true, + "sourceMap": true, + "strict": true, + "target": "es6" + }, + "exclude": [ + "node_modules" + ], + "include": [ + "./src/**/*" + ] +} \ No newline at end of file diff --git a/packages/reporter/yarn.lock b/packages/reporter/yarn.lock new file mode 100644 index 00000000..32b985af --- /dev/null +++ b/packages/reporter/yarn.lock @@ -0,0 +1,2477 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd + languageName: node + linkType: hard + +"@adraffy/ens-normalize@npm:1.9.4": + version: 1.9.4 + resolution: "@adraffy/ens-normalize@npm:1.9.4" + checksum: 7d7fff58ebe2c4961f7e5e61dad123aa6a63fec0df5c84af1fa41079dc05d398599690be4427b3a94d2baa94084544bcfdf2d51cbed7504b9b0583b0960ad550 + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": 0.3.9 + checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": + version: 4.9.1 + resolution: "@eslint-community/regexpp@npm:4.9.1" + checksum: 06fb839e9c756f6375cc545c2f2e05a0a64576bd6370e8e3c07983fd29a3d6e164ef4aa48a361f7d27e6713ab79c83053ff6a2ccb78748bc955e344279c4a3b6 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.2": + version: 2.1.2 + resolution: "@eslint/eslintrc@npm:2.1.2" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.6.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: bc742a1e3b361f06fedb4afb6bf32cbd27171292ef7924f61c62f2aed73048367bcc7ac68f98c06d4245cd3fabc43270f844e3c1699936d4734b3ac5398814a7 + languageName: node + linkType: hard + +"@eslint/js@npm:8.51.0": + version: 8.51.0 + resolution: "@eslint/js@npm:8.51.0" + checksum: 0228bf1e1e0414843e56d9ff362a2a72d579c078f93174666f29315690e9e30a8633ad72c923297f7fd7182381b5a476805ff04dac8debe638953eb1ded3ac73 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.11.11": + version: 0.11.11 + resolution: "@humanwhocodes/config-array@npm:0.11.11" + dependencies: + "@humanwhocodes/object-schema": ^1.2.1 + debug: ^4.1.1 + minimatch: ^3.0.5 + checksum: db84507375ab77b8ffdd24f498a5b49ad6b64391d30dd2ac56885501d03964d29637e05b1ed5aefa09d57ac667e28028bc22d2da872bfcd619652fbdb5f4ca19 + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^1.2.1": + version: 1.2.1 + resolution: "@humanwhocodes/object-schema@npm:1.2.1" + checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.0.3": + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef + languageName: node + linkType: hard + +"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" + dependencies: + "@noble/hashes": 1.3.2 + checksum: bb798d7a66d8e43789e93bc3c2ddff91a1e19fdb79a99b86cd98f1e5eff0ee2024a2672902c2576ef3577b6f282f3b5c778bebd55761ddbb30e36bf275e83dd0 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.2, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.2": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2": + version: 1.1.3 + resolution: "@scure/base@npm:1.1.3" + checksum: 1606ab8a4db898cb3a1ada16c15437c3bce4e25854fadc8eb03ae93cbbbac1ed90655af4b0be3da37e12056fef11c0374499f69b9e658c9e5b7b3e06353c630c + languageName: node + linkType: hard + +"@scure/bip32@npm:1.3.2": + version: 1.3.2 + resolution: "@scure/bip32@npm:1.3.2" + dependencies: + "@noble/curves": ~1.2.0 + "@noble/hashes": ~1.3.2 + "@scure/base": ~1.1.2 + checksum: c5ae84fae43490853693b481531132b89e056d45c945fc8b92b9d032577f753dfd79c5a7bbcbf0a7f035951006ff0311b6cf7a389e26c9ec6335e42b20c53157 + languageName: node + linkType: hard + +"@scure/bip39@npm:1.2.1": + version: 1.2.1 + resolution: "@scure/bip39@npm:1.2.1" + dependencies: + "@noble/hashes": ~1.3.0 + "@scure/base": ~1.1.0 + checksum: c5bd6f1328fdbeae2dcdd891825b1610225310e5e62a4942714db51066866e4f7bef242c7b06a1b9dcc8043a4a13412cf5c5df76d3b10aa9e36b82e9b6e3eeaa + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.9 + resolution: "@tsconfig/node10@npm:1.0.9" + checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.12": + version: 7.0.13 + resolution: "@types/json-schema@npm:7.0.13" + checksum: 345df21a678fa72fb389f35f33de77833d09d4a142bb2bcb27c18690efa4cf70fc2876e43843cefb3fbdb9fcb12cd3e970a90936df30f53bbee899865ff605ab + languageName: node + linkType: hard + +"@types/semver@npm:^7.5.0": + version: 7.5.3 + resolution: "@types/semver@npm:7.5.3" + checksum: 349fdd1ab6c213bac5c991bac766bd07b8b12e63762462bb058740dcd2eb09c8193d068bb226f134661275f2022976214c0e727a4e5eb83ec1b131127c980d3e + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^6.7.5": + version: 6.7.5 + resolution: "@typescript-eslint/eslint-plugin@npm:6.7.5" + dependencies: + "@eslint-community/regexpp": ^4.5.1 + "@typescript-eslint/scope-manager": 6.7.5 + "@typescript-eslint/type-utils": 6.7.5 + "@typescript-eslint/utils": 6.7.5 + "@typescript-eslint/visitor-keys": 6.7.5 + debug: ^4.3.4 + graphemer: ^1.4.0 + ignore: ^5.2.4 + natural-compare: ^1.4.0 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependencies: + "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: c37edf5a703db4ff9227d67c2d2cf817e65c9afc94cc0e650fa3d2b05ac55201ef887ce9dadb9ca13779f4025bf4367e132b013e3559e777006a2332079bb180 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^6.7.5": + version: 6.7.5 + resolution: "@typescript-eslint/parser@npm:6.7.5" + dependencies: + "@typescript-eslint/scope-manager": 6.7.5 + "@typescript-eslint/types": 6.7.5 + "@typescript-eslint/typescript-estree": 6.7.5 + "@typescript-eslint/visitor-keys": 6.7.5 + debug: ^4.3.4 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 63f988c1c87697bd20487933be952b97f7a5f2a9977f505af671c7d49367fc01ca508817576646caa937c15cc0a0ef1e86adff9111eb19df8b489e7436d10620 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:6.7.5": + version: 6.7.5 + resolution: "@typescript-eslint/scope-manager@npm:6.7.5" + dependencies: + "@typescript-eslint/types": 6.7.5 + "@typescript-eslint/visitor-keys": 6.7.5 + checksum: f21858ed78f81ab2d9879139f69657fda2a7b901078f79df64d1262d80f84ef66c56525ed0bb5e393fa5ca5474ad97f2225b7f713977c2d0f79cda31b2744af9 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:6.7.5": + version: 6.7.5 + resolution: "@typescript-eslint/type-utils@npm:6.7.5" + dependencies: + "@typescript-eslint/typescript-estree": 6.7.5 + "@typescript-eslint/utils": 6.7.5 + debug: ^4.3.4 + ts-api-utils: ^1.0.1 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 8023d8ddcfbf4a0411b192016711068e9e6787c5811aee3a25ac40025ade0d063a1a3d7b38469e1a534bb31fa9dbeec08ab53b7a6d7b3128358294ac5b219d9a + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:6.7.5": + version: 6.7.5 + resolution: "@typescript-eslint/types@npm:6.7.5" + checksum: f21e5726b60f13feb3a920c92515fbc1205ba0e9bba9959b2e42c02c282a0ab4fb0e5ae84f3807b9b1cf95036027e9033d92a911fa88e6c243a87621d8dd7a01 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:6.7.5": + version: 6.7.5 + resolution: "@typescript-eslint/typescript-estree@npm:6.7.5" + dependencies: + "@typescript-eslint/types": 6.7.5 + "@typescript-eslint/visitor-keys": 6.7.5 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependenciesMeta: + typescript: + optional: true + checksum: 17685e8321edce1d1ec4278d84e63c0f41ccb19e9308f21c37450943ad0c33328755ac52b966e7855af17e01d22bc83d1fcda79c279fabe7d3460c8f315a7265 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:6.7.5": + version: 6.7.5 + resolution: "@typescript-eslint/utils@npm:6.7.5" + dependencies: + "@eslint-community/eslint-utils": ^4.4.0 + "@types/json-schema": ^7.0.12 + "@types/semver": ^7.5.0 + "@typescript-eslint/scope-manager": 6.7.5 + "@typescript-eslint/types": 6.7.5 + "@typescript-eslint/typescript-estree": 6.7.5 + semver: ^7.5.4 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: f365c654241f927e7784640079627d60a296aa3d575552b07594a69cfc419832eb5fa4adc87acb1988bea9741ae9cc4a5277dab168990310caef5de125255752 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:6.7.5": + version: 6.7.5 + resolution: "@typescript-eslint/visitor-keys@npm:6.7.5" + dependencies: + "@typescript-eslint/types": 6.7.5 + eslint-visitor-keys: ^3.4.1 + checksum: 2df996742f63d89fa339b0e8ff3a3a289d36b3f584f7538a7626bed3869e9ae27f8f56ab31748519d25a63de2ae22a43dd8413610b00436ff342b0a17eb85289 + languageName: node + linkType: hard + +"abbrev@npm:1, abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 + languageName: node + linkType: hard + +"abitype@npm:0.9.8": + version: 0.9.8 + resolution: "abitype@npm:0.9.8" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: d7d887f29d6821e3f7a400de9620511b80ead3f85c5c87308aaec97965d3493e6687ed816e88722b4f512249bd66dee9e69231b49af0e1db8f69400a62c87cf6 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.1.1": + version: 8.2.0 + resolution: "acorn-walk@npm:8.2.0" + checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 + languageName: node + linkType: hard + +"acorn@npm:^8.4.1, acorn@npm:^8.9.0": + version: 8.10.0 + resolution: "acorn@npm:8.10.0" + bin: + acorn: bin/acorn + checksum: 538ba38af0cc9e5ef983aee196c4b8b4d87c0c94532334fa7e065b2c8a1f85863467bb774231aae91613fcda5e68740c15d97b1967ae3394d20faddddd8af61d + languageName: node + linkType: hard + +"agent-base@npm:6, agent-base@npm:^6.0.2": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1": + version: 4.5.0 + resolution: "agentkeepalive@npm:4.5.0" + dependencies: + humanize-ms: ^1.2.1 + checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^3.0.0": + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" + dependencies: + delegates: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 + languageName: node + linkType: hard + +"reporter@workspace:.": + version: 0.0.0-use.local + resolution: "reporter@workspace:." + dependencies: + "@typescript-eslint/eslint-plugin": ^6.7.5 + "@typescript-eslint/parser": ^6.7.5 + dotenv: ^16.3.1 + eslint: ^8.51.0 + eslint-config-prettier: ^9.0.0 + nodemon: ^3.0.1 + prettier: ^3.0.3 + ts-node: ^10.9.1 + typescript: ^5.2.2 + viem: ^1.16.5 + languageName: unknown + linkType: soft + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.2, braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + languageName: node + linkType: hard + +"cacache@npm:^17.0.0": + version: 17.1.4 + resolution: "cacache@npm:17.1.4" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^7.7.1 + minipass: ^7.0.3 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: b7751df756656954a51201335addced8f63fc53266fa56392c9f5ae83c8d27debffb4458ac2d168a744a4517ec3f2163af05c20097f93d17bdc2dc8a385e14a6 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"chokidar@npm:^3.5.2": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.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 + dependenciesMeta: + fsevents: + optional: true + checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: ^2.1.1 + checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd + languageName: node + linkType: hard + +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: ^4.0.0 + checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: ^2.0.2 + checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce + languageName: node + linkType: hard + +"dotenv@npm:^16.3.1": + version: 16.3.1 + resolution: "dotenv@npm:16.3.1" + checksum: 15d75e7279018f4bafd0ee9706593dd14455ddb71b3bcba9c52574460b7ccaf67d5cf8b2c08a5af1a9da6db36c956a04a1192b101ee102a3e0cf8817bbcf3dfd + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^9.0.0": + version: 9.0.0 + resolution: "eslint-config-prettier@npm:9.0.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 362e991b6cb343f79362bada2d97c202e5303e6865888918a7445c555fb75e4c078b01278e90be98aa98ae22f8597d8e93d48314bec6824f540f7efcab3ce451 + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 + languageName: node + linkType: hard + +"eslint@npm:^8.51.0": + version: 8.51.0 + resolution: "eslint@npm:8.51.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.2 + "@eslint/js": 8.51.0 + "@humanwhocodes/config-array": ^0.11.11 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + ajv: ^6.12.4 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 + esquery: ^1.4.2 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + graphemer: ^1.4.0 + ignore: ^5.2.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + is-path-inside: ^3.0.3 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.3 + strip-ansi: ^6.0.1 + text-table: ^0.2.0 + bin: + eslint: bin/eslint.js + checksum: 214fa5d1fcb67af1b8992ce9584ccd85e1aa7a482f8b8ea5b96edc28fa838a18a3b69456db45fc1ed3ef95f1e9efa9714f737292dc681e572d471d02fda9649c + languageName: node + linkType: hard + +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 + languageName: node + linkType: hard + +"esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" + dependencies: + estraverse: ^5.1.0 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: ^5.2.0 + checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9": + version: 3.3.1 + resolution: "fast-glob@npm:3.3.1" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.4 + checksum: b6f3add6403e02cf3a798bfbb1183d0f6da2afd368f27456010c0bc1f9640aea308243d4cb2c0ab142f618276e65ecb8be1661d7c62a7b4e5ba774b9ce5432e5 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.15.0 + resolution: "fastq@npm:1.15.0" + dependencies: + reusify: ^1.0.4 + checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: ^3.0.4 + checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.1.1 + resolution: "flat-cache@npm:3.1.1" + dependencies: + flatted: ^3.2.9 + keyv: ^4.5.3 + rimraf: ^3.0.2 + checksum: 4958cfe0f46acf84953d4e16676ef5f0d38eab3a92d532a1e8d5f88f11eea8b36d5d598070ff2aeae15f1fde18f8d7d089eefaf9db10b5a587cc1c9072325c7a + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.2.9 + resolution: "flatted@npm:3.2.9" + checksum: f14167fbe26a9d20f6fca8d998e8f1f41df72c8e81f9f2c9d61ed2bea058248f5e1cbd05e7f88c0e5087a6a0b822a1e5e2b446e879f3cfbe0b07ba2d7f80b026 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@~2.3.2#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + dependencies: + aproba: ^1.0.3 || ^2.0.0 + color-support: ^1.1.3 + console-control-strings: ^1.1.0 + has-unicode: ^2.0.1 + signal-exit: ^3.0.7 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + wide-align: ^1.1.5 + checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + +"glob@npm:^10.2.2": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.5 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + path-scurry: ^1.10.1 + bin: + glob: dist/esm/bin.mjs + checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.4": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + 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 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"globals@npm:^13.19.0": + version: 13.23.0 + resolution: "globals@npm:13.23.0" + dependencies: + type-fest: ^0.20.2 + checksum: 194c97cf8d1ef6ba59417234c2386549c4103b6e5f24b1ff1952de61a4753e5d2069435ba629de711a6480b1b1d114a98e2ab27f85e966d5a10c319c3bbd3dc3 + languageName: node + linkType: hard + +"globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: ^2.1.0 + dir-glob: ^3.0.1 + fast-glob: ^3.2.9 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^3.0.0 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: ^2.0.0 + checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"ignore-by-default@npm:^1.0.1": + version: 1.0.1 + resolution: "ignore-by-default@npm:1.0.1" + checksum: 441509147b3615e0365e407a3c18e189f78c07af08564176c680be1fabc94b6c789cad1342ad887175d4ecd5225de86f73d376cec8e06b42fd9b429505ffcf8a + languageName: node + linkType: hard + +"ignore@npm:^5.2.0, ignore@npm:^5.2.4": + version: 5.2.4 + resolution: "ignore@npm:5.2.4" + checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:^2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: ^2.0.0 + checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isows@npm:1.0.3": + version: 1.0.3 + resolution: "isows@npm:1.0.3" + peerDependencies: + ws: "*" + checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: 3.0.1 + checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.7.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 + languageName: node + linkType: hard + +"lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.0.1 + resolution: "lru-cache@npm:10.0.1" + checksum: 06f8d0e1ceabd76bb6f644a26dbb0b4c471b79c7b514c13c6856113879b3bf369eb7b497dad4ff2b7e2636db202412394865b33c332100876d838ad1372f0181 + languageName: node + linkType: hard + +"make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^11.0.3": + version: 11.1.1 + resolution: "make-fetch-happen@npm:11.1.1" + dependencies: + agentkeepalive: ^4.2.1 + cacache: ^17.0.0 + http-cache-semantics: ^4.1.1 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^7.7.1 + minipass: ^5.0.0 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + socks-proxy-agent: ^7.0.0 + ssri: ^10.0.0 + checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: ^3.0.2 + picomatch: ^2.3.1 + checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc + languageName: node + linkType: hard + +"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: ^3.0.0 + checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"ms@npm:^2.0.0, ms@npm:^2.1.1": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 9.4.0 + resolution: "node-gyp@npm:9.4.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^11.0.3 + nopt: ^6.0.0 + npmlog: ^6.0.0 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^2.0.2 + bin: + node-gyp: bin/node-gyp.js + checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 + languageName: node + linkType: hard + +"nodemon@npm:^3.0.1": + version: 3.0.1 + resolution: "nodemon@npm:3.0.1" + dependencies: + chokidar: ^3.5.2 + debug: ^3.2.7 + ignore-by-default: ^1.0.1 + minimatch: ^3.1.2 + pstree.remy: ^1.1.8 + semver: ^7.5.3 + simple-update-notifier: ^2.0.0 + supports-color: ^5.5.0 + touch: ^3.1.0 + undefsafe: ^2.0.5 + bin: + nodemon: bin/nodemon.js + checksum: 6a5d81855760d6617049eccce10ccf02bddb482dab13ceea5280ae595ec7004eee13e7b934368e3f46c37fe4d970342a8c38c99cae7e93e4d7a3ed1c1ecb6acf + languageName: node + linkType: hard + +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: ^1.0.0 + bin: + nopt: bin/nopt.js + checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac + languageName: node + linkType: hard + +"nopt@npm:~1.0.10": + version: 1.0.10 + resolution: "nopt@npm:1.0.10" + dependencies: + abbrev: 1 + bin: + nopt: ./bin/nopt.js + checksum: f62575aceaa3be43f365bf37a596b89bbac2e796b001b6d2e2a85c2140a4e378ff919e2753ccba959c4fd344776fc88c29b393bc167fa939fb1513f126f4cd45 + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"npmlog@npm:^6.0.0": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: ^3.0.0 + console-control-strings: ^1.1.0 + gauge: ^4.0.3 + set-blocking: ^2.0.0 + checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.3 + resolution: "optionator@npm:0.9.3" + dependencies: + "@aashutoshrathi/word-wrap": ^1.2.3 + deep-is: ^0.1.3 + fast-levenshtein: ^2.0.6 + levn: ^0.4.1 + prelude-ls: ^1.2.1 + type-check: ^0.4.0 + checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: ^3.0.0 + checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: ^9.1.1 || ^10.0.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a + languageName: node + linkType: hard + +"prettier@npm:^3.0.3": + version: 3.0.3 + resolution: "prettier@npm:3.0.3" + bin: + prettier: bin/prettier.cjs + checksum: e10b9af02b281f6c617362ebd2571b1d7fc9fb8a3bd17e371754428cda992e5e8d8b7a046e8f7d3e2da1dcd21aa001e2e3c797402ebb6111b5cd19609dd228e0 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"pstree.remy@npm:^1.1.8": + version: 1.1.8 + resolution: "pstree.remy@npm:1.1.8" + checksum: 5cb53698d6bb34dfb278c8a26957964aecfff3e161af5fbf7cee00bbe9d8547c7aced4bd9cb193bce15fb56e9e4220fc02a5bf9c14345ffb13a36b858701ec2d + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.0 + resolution: "punycode@npm:2.3.0" + checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: ^2.2.1 + checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + +"simple-update-notifier@npm:^2.0.0": + version: 2.0.0 + resolution: "simple-update-notifier@npm:2.0.0" + dependencies: + semver: ^7.5.3 + checksum: 9ba00d38ce6a29682f64a46213834e4eb01634c2f52c813a9a7b8873ca49cdbb703696f3290f3b27dc067de6d9418b0b84bef22c3eb074acf352529b2d6c27fd + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "socks-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^6.0.2 + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 + languageName: node + linkType: hard + +"socks@npm:^2.6.2": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" + dependencies: + minipass: ^7.0.3 + checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: ~5.2.0 + checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + +"supports-color@npm:^5.5.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.0 + resolution: "tar@npm:6.2.0" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"touch@npm:^3.1.0": + version: 3.1.0 + resolution: "touch@npm:3.1.0" + dependencies: + nopt: ~1.0.10 + bin: + nodetouch: ./bin/nodetouch.js + checksum: e0be589cb5b0e6dbfce6e7e077d4a0d5f0aba558ef769c6d9c33f635e00d73d5be49da6f8631db302ee073919d82b5b7f56da2987feb28765c95a7673af68647 + languageName: node + linkType: hard + +"ts-api-utils@npm:^1.0.1": + version: 1.0.3 + resolution: "ts-api-utils@npm:1.0.3" + peerDependencies: + typescript: ">=4.2.0" + checksum: 441cc4489d65fd515ae6b0f4eb8690057add6f3b6a63a36073753547fb6ce0c9ea0e0530220a0b282b0eec535f52c4dfc315d35f8a4c9a91c0def0707a714ca6 + languageName: node + linkType: hard + +"ts-node@npm:^10.9.1": + version: 10.9.1 + resolution: "ts-node@npm:10.9.1" + dependencies: + "@cspotcode/source-map-support": ^0.8.0 + "@tsconfig/node10": ^1.0.7 + "@tsconfig/node12": ^1.0.7 + "@tsconfig/node14": ^1.0.0 + "@tsconfig/node16": ^1.0.2 + acorn: ^8.4.1 + acorn-walk: ^8.1.1 + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + v8-compile-cache-lib: ^3.0.1 + yn: 3.1.1 + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: ^1.2.1 + checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 + languageName: node + linkType: hard + +"typescript@npm:^5.2.2": + version: 5.2.2 + resolution: "typescript@npm:5.2.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 7912821dac4d962d315c36800fe387cdc0a6298dba7ec171b350b4a6e988b51d7b8f051317786db1094bd7431d526b648aba7da8236607febb26cf5b871d2d3c + languageName: node + linkType: hard + +"typescript@patch:typescript@^5.2.2#~builtin": + version: 5.2.2 + resolution: "typescript@patch:typescript@npm%3A5.2.2#~builtin::version=5.2.2&hash=7ad353" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 07106822b4305de3f22835cbba949a2b35451cad50888759b6818421290ff95d522b38ef7919e70fb381c5fe9c1c643d7dea22c8b31652a717ddbd57b7f4d554 + languageName: node + linkType: hard + +"undefsafe@npm:^2.0.5": + version: 2.0.5 + resolution: "undefsafe@npm:2.0.5" + checksum: f42ab3b5770fedd4ada175fc1b2eb775b78f609156f7c389106aafd231bfc210813ee49f54483d7191d7b76e483bc7f537b5d92d19ded27156baf57592eb02cc + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 + languageName: node + linkType: hard + +"viem@npm:^1.16.5": + version: 1.16.5 + resolution: "viem@npm:1.16.5" + dependencies: + "@adraffy/ens-normalize": 1.9.4 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@scure/bip32": 1.3.2 + "@scure/bip39": 1.2.1 + abitype: 0.9.8 + isows: 1.0.3 + ws: 8.13.0 + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: cc07bbc8ebf616c2cc6e14f08eea59d1b34df294d1dcba72090bf10e224e87c17014db593bcff223fe6c7c30999448d786d67d9e18691906f51900db940af821 + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: ^1.0.2 || 2 || 3 || 4 + checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"ws@npm:8.13.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard From e7b600a04bd6c2a4675a591bd47a8188743319eb Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Sun, 15 Oct 2023 12:10:10 +0800 Subject: [PATCH 02/81] create ABI and AMBHeaderReporterCall script --- packages/reporter/.env.example | 13 + .../ABIs/SygmaReporterContractABI.json | 217 ++++++++ .../reporter/ABIs/ambReporterContractABI.json | 98 ++++ .../reporter/ABIs/telepathyAdapterABI.json | 229 ++++++++ .../reporter/ABIs/telepathyContractABI.json | 497 ++++++++++++++++++ .../ABIs/wormholeReporterContractABI.json | 76 +++ packages/reporter/package.json | 1 + .../reporter/src/AMBHeaderReporterCaller.js | 57 ++ packages/reporter/yarn.lock | 53 +- 9 files changed, 1224 insertions(+), 17 deletions(-) create mode 100644 packages/reporter/ABIs/SygmaReporterContractABI.json create mode 100644 packages/reporter/ABIs/ambReporterContractABI.json create mode 100644 packages/reporter/ABIs/telepathyAdapterABI.json create mode 100644 packages/reporter/ABIs/telepathyContractABI.json create mode 100644 packages/reporter/ABIs/wormholeReporterContractABI.json create mode 100644 packages/reporter/src/AMBHeaderReporterCaller.js diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index e69de29b..79724ee9 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -0,0 +1,13 @@ +PRIVATE_KEY=xxxxxxxxxxx01 +SOURCE_RPC_URL=https://goerli.infura.io/v3/xxxxxxxxxx1 +DEST_RPC_URL=https://rpc.gnosischain.com +AMB_REPORTER_CONTRACT_ADDRESS=0xedc0b1d3de4496e0d917af42f29cb71eb2982319 +SYGMA_REPORTER_CONTRACT_ADDRESS=0x2f96d347c932ac73b56e9352ecc0707e25173d88 +SYGMA_ADAPTER_ADDRESS=0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15 +SYGMA_DEST_DOMAIN_ID=100 +SYGMA_FEE_DATA=0x +TELEPATHY_CONTRACT_ADDRESS=0x34b5378DE786389a477b40dD710812c250185f83 +TELEPATHY_ADAPTER_ADDRESS=0x2f1E51a2763FB67fe09971Fd8d849716137A3357 +TELEPATHY_PROOF_API_URL=https://api.telepathy.xyz/api/hashi/ +AMB_ADAPTER=0x01268DB05965CeAc2a89566c42CD550ED7eE5ECD +GAS=300000 \ No newline at end of file diff --git a/packages/reporter/ABIs/SygmaReporterContractABI.json b/packages/reporter/ABIs/SygmaReporterContractABI.json new file mode 100644 index 00000000..790e9b7f --- /dev/null +++ b/packages/reporter/ABIs/SygmaReporterContractABI.json @@ -0,0 +1,217 @@ +[ + { + "inputs": [ + { + "internalType": "contract IBridge", + "name": "bridge", + "type": "address" + }, + { + "internalType": "contract HeaderStorage", + "name": "headerStorage", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "resourceID", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "defaultDestinationDomainID", + "type": "uint8" + }, + { + "internalType": "address", + "name": "defaultSygmaAdapter", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "emitter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "blockHeader", + "type": "bytes32" + } + ], + "name": "HeaderReported", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "feeData", + "type": "bytes" + } + ], + "name": "reportHeaders", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "sygmaAdapter", + "type": "address" + }, + { + "internalType": "uint8", + "name": "destinationDomainID", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "feeData", + "type": "bytes" + } + ], + "name": "reportHeadersToDomain", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "_bridge", + "outputs": [ + { + "internalType": "contract IBridge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_defaultDestinationDomainID", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_defaultSygmaAdapter", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_headerStorage", + "outputs": [ + { + "internalType": "contract HeaderStorage", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_resourceID", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "blockHeaders", + "type": "bytes32[]" + } + ], + "name": "prepareDepositData", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "input", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "position", + "type": "uint256" + } + ], + "name": "slice", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + } +] \ No newline at end of file diff --git a/packages/reporter/ABIs/ambReporterContractABI.json b/packages/reporter/ABIs/ambReporterContractABI.json new file mode 100644 index 00000000..75aa8d11 --- /dev/null +++ b/packages/reporter/ABIs/ambReporterContractABI.json @@ -0,0 +1,98 @@ +[ + { + "inputs": [ + { + "internalType": "contract IAMB", + "name": "_amb", + "type": "address" + }, + { + "internalType": "contract HeaderStorage", + "name": "_headerStorage", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "emitter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "blockHeader", + "type": "bytes32" + } + ], + "name": "HeaderReported", + "type": "event" + }, + { + "inputs": [], + "name": "amb", + "outputs": [ + { + "internalType": "contract IAMB", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "headerStorage", + "outputs": [ + { + "internalType": "contract HeaderStorage", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "ambAdapter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "gas", + "type": "uint256" + } + ], + "name": "reportHeaders", + "outputs": [ + { + "internalType": "bytes32", + "name": "receipt", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ] \ No newline at end of file diff --git a/packages/reporter/ABIs/telepathyAdapterABI.json b/packages/reporter/ABIs/telepathyAdapterABI.json new file mode 100644 index 00000000..3fdada32 --- /dev/null +++ b/packages/reporter/ABIs/telepathyAdapterABI.json @@ -0,0 +1,229 @@ +[ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "type": "address", + "name": "_telepathyRouter", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "BlockHeaderNotAvailable", + "inputs": [ + { + "type": "uint256", + "name": "slot", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ConflictingBlockHeader", + "inputs": [ + { + "type": "uint256", + "name": "blockNumber", + "internalType": "uint256" + }, + { + "type": "bytes32", + "name": "reportedBlockHash", + "internalType": "bytes32" + }, + { + "type": "bytes32", + "name": "storedBlockHash", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "InconsistentLightClient", + "inputs": [ + { + "type": "address", + "name": "lightClient", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "InvalidBlockHashProof", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidBlockHeaderLength", + "inputs": [ + { + "type": "uint256", + "name": "length", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "InvalidBlockHeaderRLP", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidBlockNumberProof", + "inputs": [] + }, + { + "type": "error", + "name": "NoLightClientOnChain", + "inputs": [ + { + "type": "uint32", + "name": "chainId", + "internalType": "uint32" + } + ] + }, + { + "type": "event", + "name": "HashStored", + "inputs": [ + { + "type": "uint256", + "name": "id", + "internalType": "uint256", + "indexed": true + }, + { + "type": "bytes32", + "name": "hashes", + "internalType": "bytes32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "bytes32", + "name": "hash", + "internalType": "bytes32" + } + ], + "name": "getHashFromOracle", + "inputs": [ + { + "type": "uint256", + "name": "domain", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "id", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "bytes32", + "name": "", + "internalType": "bytes32" + } + ], + "name": "hashes", + "inputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "proveAncestralBlockHashes", + "inputs": [ + { + "type": "uint256", + "name": "chainId", + "internalType": "uint256" + }, + { + "type": "bytes[]", + "name": "blockHeaders", + "internalType": "bytes[]" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "storeBlockHeader", + "inputs": [ + { + "type": "uint32", + "name": "_chainId", + "internalType": "uint32" + }, + { + "type": "uint64", + "name": "_slot", + "internalType": "uint64" + }, + { + "type": "uint256", + "name": "_blockNumber", + "internalType": "uint256" + }, + { + "type": "bytes32[]", + "name": "_blockNumberProof", + "internalType": "bytes32[]" + }, + { + "type": "bytes32", + "name": "_blockHash", + "internalType": "bytes32" + }, + { + "type": "bytes32[]", + "name": "_blockHashProof", + "internalType": "bytes32[]" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], + "name": "telepathyRouter", + "inputs": [] + } + ] \ No newline at end of file diff --git a/packages/reporter/ABIs/telepathyContractABI.json b/packages/reporter/ABIs/telepathyContractABI.json new file mode 100644 index 00000000..51b62d40 --- /dev/null +++ b/packages/reporter/ABIs/telepathyContractABI.json @@ -0,0 +1,497 @@ +[ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "genesisValidatorsRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "genesisTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "secondsPerSlot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slotsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "syncCommitteePeriod", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "syncCommitteePoseidon", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "sourceChainId", + "type": "uint32" + }, + { + "internalType": "uint16", + "name": "finalityThreshold", + "type": "uint16" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "slot", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "HeadUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "period", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "SyncCommitteeUpdate", + "type": "event" + }, + { + "inputs": [], + "name": "FINALITY_THRESHOLD", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "GENESIS_TIME", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "GENESIS_VALIDATORS_ROOT", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SECONDS_PER_SLOT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SLOTS_PER_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SOURCE_CHAIN_ID", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "consistent", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "executionStateRoots", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "head", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "headers", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "attestedSlot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "finalizedSlot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "participation", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "finalizedHeaderRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "executionStateRoot", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "a", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "b", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "c", + "type": "uint256[2]" + } + ], + "internalType": "struct Groth16Proof", + "name": "proof", + "type": "tuple" + } + ], + "internalType": "struct LightClientStep", + "name": "step", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "syncCommitteeSSZ", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "syncCommitteePoseidon", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "a", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "b", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "c", + "type": "uint256[2]" + } + ], + "internalType": "struct Groth16Proof", + "name": "proof", + "type": "tuple" + } + ], + "internalType": "struct LightClientRotate", + "name": "update", + "type": "tuple" + } + ], + "name": "rotate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "attestedSlot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "finalizedSlot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "participation", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "finalizedHeaderRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "executionStateRoot", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "a", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "b", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "c", + "type": "uint256[2]" + } + ], + "internalType": "struct Groth16Proof", + "name": "proof", + "type": "tuple" + } + ], + "internalType": "struct LightClientStep", + "name": "update", + "type": "tuple" + } + ], + "name": "step", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "syncCommitteePoseidons", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "timestamps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[2]", + "name": "a", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "b", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "c", + "type": "uint256[2]" + }, + { + "internalType": "uint256[65]", + "name": "input", + "type": "uint256[65]" + } + ], + "name": "verifyProofRotate", + "outputs": [ + { + "internalType": "bool", + "name": "r", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[2]", + "name": "a", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "b", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "c", + "type": "uint256[2]" + }, + { + "internalType": "uint256[1]", + "name": "input", + "type": "uint256[1]" + } + ], + "name": "verifyProofStep", + "outputs": [ + { + "internalType": "bool", + "name": "r", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ] \ No newline at end of file diff --git a/packages/reporter/ABIs/wormholeReporterContractABI.json b/packages/reporter/ABIs/wormholeReporterContractABI.json new file mode 100644 index 00000000..f7e7d5dc --- /dev/null +++ b/packages/reporter/ABIs/wormholeReporterContractABI.json @@ -0,0 +1,76 @@ +[ + { + "inputs": [ + { + "internalType": "contract IWormhole", + "name": "_wormhole", + "type": "address" + }, + { + "internalType": "contract HeaderStorage", + "name": "_headerStorage", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "headerStorage", + "outputs": [ + { + "internalType": "contract HeaderStorage", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "oracleAdapter", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "reportHeader", + "outputs": [ + { + "internalType": "uint64", + "name": "sequence", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "wormhole", + "outputs": [ + { + "internalType": "contract IWormhole", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ] \ No newline at end of file diff --git a/packages/reporter/package.json b/packages/reporter/package.json index 19121e24..dac8fc67 100644 --- a/packages/reporter/package.json +++ b/packages/reporter/package.json @@ -14,6 +14,7 @@ "packageManager": "yarn@3.2.1", "dependencies": { "dotenv": "^16.3.1", + "node-cron": "^3.0.2", "viem": "^1.16.5" }, "devDependencies": { diff --git a/packages/reporter/src/AMBHeaderReporterCaller.js b/packages/reporter/src/AMBHeaderReporterCaller.js new file mode 100644 index 00000000..e349b9b1 --- /dev/null +++ b/packages/reporter/src/AMBHeaderReporterCaller.js @@ -0,0 +1,57 @@ +//Calls the AMBHeaderReporter reportHeaders() method every x hours + +// require('dotenv').config(); +// const { ethers } = require('ethers'); +// const cron = require('node-cron'); + +import { createPublicClient, http, createWalletClient } from 'viem' +import { mainnet, goerli, gnosis } from 'viem/chains' +import { privateKeyToAccount } from 'viem/accounts' +import 'dotenv/config' +import 'node-cron' + +const walletClient = createWalletClient({ + chain: goerli, + transport: http() +}) +const publicClient = createPublicClient({ + chain: goerli, + transport: http() +}) + + +const account = privateKeyToAccount(process.env.PRIVATE_KEY) +// Create an instance of the contract +const contractAddress = process.env.AMB_REPORTER_CONTRACT_ADDRESS; + +const contractABI = require('../ABIs/ambReporterContractABI.json'); + + + +// Set up the cron job to call the Solidity method every 1 hour. 24h -> '0 0 * * *' +cron.schedule('0 * * * *', async () => { + try { + // Get the latest block number + const blockNumber = await publicClient.getBlockNumber(); + console.log('Latest block number:', blockNumber); + + amb_adapter = process.env.AMB_ADAPTER; + gas = process.env.GAS; + + // Call the reportHeaders method using the contract instance + const {request} = await publicClient.simulateContract({ + account, // calling from account + address: contractAddress, + abi: contractABI, + functionName: 'reportHeaders', + args: [[blockNumber], amb_adapter, gas], + }) + ; + const txHash = await walletClient.writeContract(request); + console.log('Solidity method called successfully:', txHash); + } catch (error) { + console.error('Error calling Solidity method:', error); + } +}); + +console.log('Cron job scheduled to call the Solidity method every 1 hour.'); \ No newline at end of file diff --git a/packages/reporter/yarn.lock b/packages/reporter/yarn.lock index 32b985af..e2881934 100644 --- a/packages/reporter/yarn.lock +++ b/packages/reporter/yarn.lock @@ -570,23 +570,6 @@ __metadata: languageName: node linkType: hard -"reporter@workspace:.": - version: 0.0.0-use.local - resolution: "reporter@workspace:." - dependencies: - "@typescript-eslint/eslint-plugin": ^6.7.5 - "@typescript-eslint/parser": ^6.7.5 - dotenv: ^16.3.1 - eslint: ^8.51.0 - eslint-config-prettier: ^9.0.0 - nodemon: ^3.0.1 - prettier: ^3.0.3 - ts-node: ^10.9.1 - typescript: ^5.2.2 - viem: ^1.16.5 - languageName: unknown - linkType: soft - "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -1715,6 +1698,15 @@ __metadata: languageName: node linkType: hard +"node-cron@npm:^3.0.2": + version: 3.0.2 + resolution: "node-cron@npm:3.0.2" + dependencies: + uuid: 8.3.2 + checksum: dd21585c0d4069a0752022dad9b8380a4393c4783ec78355ffa99ff32b018c3743a35d4ebf9d7c7863949e94e302b440f58c884eb4960e71c7260d817e2d3f25 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 9.4.0 resolution: "node-gyp@npm:9.4.0" @@ -1968,6 +1960,24 @@ __metadata: languageName: node linkType: hard +"reporter@workspace:.": + version: 0.0.0-use.local + resolution: "reporter@workspace:." + dependencies: + "@typescript-eslint/eslint-plugin": ^6.7.5 + "@typescript-eslint/parser": ^6.7.5 + dotenv: ^16.3.1 + eslint: ^8.51.0 + eslint-config-prettier: ^9.0.0 + node-cron: ^3.0.2 + nodemon: ^3.0.1 + prettier: ^3.0.3 + ts-node: ^10.9.1 + typescript: ^5.2.2 + viem: ^1.16.5 + languageName: unknown + linkType: soft + "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -2363,6 +2373,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + "v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 resolution: "v8-compile-cache-lib@npm:3.0.1" From aa96a8b047f154e788198f1309b9a7b6981bb54c Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Wed, 18 Oct 2023 17:36:35 +0800 Subject: [PATCH 03/81] WIP: first draft of reporter scripts --- packages/reporter/.env.example | 37 +- packages/reporter/README.md | 19 + packages/reporter/package-lock.json | 3224 ++++++++++++++++ packages/reporter/package.json | 3 + packages/reporter/src/ABIs/PingPongABI.json | 41 + .../ABIs/SygmaReporterContractABI.json | 0 .../ABIs/ambReporterContractABI.json | 0 .../{ => src}/ABIs/telepathyAdapterABI.json | 0 .../{ => src}/ABIs/telepathyContractABI.json | 0 .../ABIs/wormholeReporterContractABI.json | 0 packages/reporter/src/index.ts | 33 + packages/reporter/src/reporter/AMBReporter.ts | 65 + .../reporter/src/reporter/SygmaReporter.ts | 74 + .../src/reporter/TelepathyReporter.ts | 75 + packages/reporter/src/reporter/type.ts | 7 + packages/reporter/src/utils/address.json | 30 + packages/reporter/tsconfig.json | 4 +- packages/reporter/yarn.lock | 3401 +++++------------ 18 files changed, 4506 insertions(+), 2507 deletions(-) create mode 100644 packages/reporter/package-lock.json create mode 100644 packages/reporter/src/ABIs/PingPongABI.json rename packages/reporter/{ => src}/ABIs/SygmaReporterContractABI.json (100%) rename packages/reporter/{ => src}/ABIs/ambReporterContractABI.json (100%) rename packages/reporter/{ => src}/ABIs/telepathyAdapterABI.json (100%) rename packages/reporter/{ => src}/ABIs/telepathyContractABI.json (100%) rename packages/reporter/{ => src}/ABIs/wormholeReporterContractABI.json (100%) create mode 100644 packages/reporter/src/reporter/AMBReporter.ts create mode 100644 packages/reporter/src/reporter/SygmaReporter.ts create mode 100644 packages/reporter/src/reporter/TelepathyReporter.ts create mode 100644 packages/reporter/src/reporter/type.ts create mode 100644 packages/reporter/src/utils/address.json diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index 79724ee9..8f7a1a15 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -1,13 +1,32 @@ -PRIVATE_KEY=xxxxxxxxxxx01 -SOURCE_RPC_URL=https://goerli.infura.io/v3/xxxxxxxxxx1 +PRIVATE_KEY=0x0abc +SOURCE_RPC_URL= DEST_RPC_URL=https://rpc.gnosischain.com -AMB_REPORTER_CONTRACT_ADDRESS=0xedc0b1d3de4496e0d917af42f29cb71eb2982319 -SYGMA_REPORTER_CONTRACT_ADDRESS=0x2f96d347c932ac73b56e9352ecc0707e25173d88 -SYGMA_ADAPTER_ADDRESS=0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15 -SYGMA_DEST_DOMAIN_ID=100 + SYGMA_FEE_DATA=0x -TELEPATHY_CONTRACT_ADDRESS=0x34b5378DE786389a477b40dD710812c250185f83 -TELEPATHY_ADAPTER_ADDRESS=0x2f1E51a2763FB67fe09971Fd8d849716137A3357 + TELEPATHY_PROOF_API_URL=https://api.telepathy.xyz/api/hashi/ AMB_ADAPTER=0x01268DB05965CeAc2a89566c42CD550ED7eE5ECD -GAS=300000 \ No newline at end of file +GAS=30000 + + +# If not run all, config each reporter separately +AMB_REPORTER=true +AMB_FREQUENCY=1,10,20,30,40,50 * * * * * +AMB_SOURCE_CHAIN=goerli +AMB_DEST_CHAIN=gnosis +AMB_GAS=50000 + +SYGMA_REPORTER=true +SYGMA_FREQUENCY= 1,10,20,30,40,50 * * * * * +SYGMA_SOURCE_CHAIN=goerli +SYGMA_DEST_CHAIN=gnosis +SYGMA_FEE_DATA=0x + +TELEPATHY_REPORTER=true +TELEPATHY_FREQUENCY=50000 #run every 50000ms +TELEPATHY_SOURCE_CHAIN=goerli +TELEPATHY_DEST_CHAIN=gnosis +TELEPATHY_PROOF_API_URL=https://api.telepathy.xyz/api/hashi/ + + + diff --git a/packages/reporter/README.md b/packages/reporter/README.md index 7d726673..4a378556 100644 --- a/packages/reporter/README.md +++ b/packages/reporter/README.md @@ -1 +1,20 @@ # reporter + +Script to call Header Reporter contracts of different oracle from source chain to destination chain. + +## Run the script + +1. Configure the correct node version by running `nvm use` +2. Installing packages by running `npm install` +3. Create `.env` file and define the configuration to run. +4. run `ts-node src/index.ts` + +## Configuration + +Configure the mode you want to run by editing the variable in `.env` + +1. `REPORTER` (true/false): to enable the reporter +2. `FREQUENCY` (cron job expression by default, seconds for telepathy reporterr): Define the frequency to run the + reporter script +3. `SOURCE_CHAIN` (string value of chain): Define the source chain to collect the block header from. `DEST_CHAIN` + (string value of chain): Define the destination chain to report the source chain's block header to. diff --git a/packages/reporter/package-lock.json b/packages/reporter/package-lock.json new file mode 100644 index 00000000..cd53e159 --- /dev/null +++ b/packages/reporter/package-lock.json @@ -0,0 +1,3224 @@ +{ + "name": "reporter", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "reporter", + "dependencies": { + "axios": "^1.5.1", + "dotenv": "^16.3.1", + "node-cron": "^3.0.2", + "viem": "^1.16.5" + }, + "devDependencies": { + "@types/node": "^20.8.6", + "@types/node-cron": "^3.0.9", + "@typescript-eslint/eslint-plugin": "^6.7.5", + "@typescript-eslint/parser": "^6.7.5", + "eslint": "^8.51.0", + "eslint-config-prettier": "^9.0.0", + "nodemon": "^3.0.1", + "prettier": "^3.0.3", + "ts-node": "^10.9.1", + "typescript": "^5.2.2" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.9.4", + "license": "MIT" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.9.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.51.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.11", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@scure/base": { + "version": "1.1.3", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.2.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.13", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.8.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.6.tgz", + "integrity": "sha512-eWO4K2Ji70QzKUqRy6oyJWUeB7+g2cRagT3T/nxYibYcT4y2BDL8lqolRXjTHmkZCdJfIPaY73KbJAZmcryxTQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.25.1" + } + }, + "node_modules/@types/node-cron": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.9.tgz", + "integrity": "sha512-P10Vf+oagnMbefD31nqjS/dpBM34qzfdpvIgVZwtwsNb0Hg2lDaPFeGcyGUJIqh3zHlDMwYXGeunGgMnswgnPg==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.7.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/type-utils": "6.7.5", + "@typescript-eslint/utils": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.7.5", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/typescript-estree": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.7.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.7.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.7.5", + "@typescript-eslint/utils": "6.7.5", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.7.5", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.7.5", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.7.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/typescript-estree": "6.7.5", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.7.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.7.5", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/abitype": { + "version": "0.9.8", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "license": "MIT", + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.19.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.5.1", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/create-require": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.3.1", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.51.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.51.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.15.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.23.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "license": "ISC" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/isows": { + "version": "1.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/node-cron": { + "version": "3.0.2", + "license": "ISC", + "dependencies": { + "uuid": "8.3.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nodemon": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "dev": true, + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "5.25.3", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", + "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", + "dev": true + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/viem": { + "version": "1.16.5", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.9.4", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@scure/bip32": "1.3.2", + "@scure/bip39": "1.2.1", + "abitype": "0.9.8", + "isows": "1.0.3", + "ws": "8.13.0" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.13.0", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/yn": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "dev": true + }, + "@adraffy/ens-normalize": { + "version": "1.9.4" + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.9.1", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.2", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@eslint/js": { + "version": "8.51.0", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.11.11", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@noble/curves": { + "version": "1.2.0", + "requires": { + "@noble/hashes": "1.3.2" + } + }, + "@noble/hashes": { + "version": "1.3.2" + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@scure/base": { + "version": "1.1.3" + }, + "@scure/bip32": { + "version": "1.3.2", + "requires": { + "@noble/curves": "~1.2.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.2" + } + }, + "@scure/bip39": { + "version": "1.2.1", + "requires": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.4", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.13", + "dev": true + }, + "@types/node": { + "version": "20.8.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.6.tgz", + "integrity": "sha512-eWO4K2Ji70QzKUqRy6oyJWUeB7+g2cRagT3T/nxYibYcT4y2BDL8lqolRXjTHmkZCdJfIPaY73KbJAZmcryxTQ==", + "dev": true, + "requires": { + "undici-types": "~5.25.1" + } + }, + "@types/node-cron": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.9.tgz", + "integrity": "sha512-P10Vf+oagnMbefD31nqjS/dpBM34qzfdpvIgVZwtwsNb0Hg2lDaPFeGcyGUJIqh3zHlDMwYXGeunGgMnswgnPg==", + "dev": true + }, + "@types/semver": { + "version": "7.5.3", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "6.7.5", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/type-utils": "6.7.5", + "@typescript-eslint/utils": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/parser": { + "version": "6.7.5", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/typescript-estree": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "6.7.5", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5" + } + }, + "@typescript-eslint/type-utils": { + "version": "6.7.5", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "6.7.5", + "@typescript-eslint/utils": "6.7.5", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/types": { + "version": "6.7.5", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "6.7.5", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/utils": { + "version": "6.7.5", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/typescript-estree": "6.7.5", + "semver": "^7.5.4" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "6.7.5", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.7.5", + "eslint-visitor-keys": "^3.4.1" + } + }, + "abbrev": { + "version": "1.1.1", + "dev": true + }, + "abitype": { + "version": "0.9.8", + "requires": {} + }, + "acorn": { + "version": "8.10.0", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.2.0", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "dev": true + }, + "asynckit": { + "version": "0.4.0" + }, + "axios": { + "version": "1.5.1", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "callsites": { + "version": "3.1.0", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.3", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.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" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "dev": true + }, + "create-require": { + "version": "1.1.1", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0" + }, + "diff": { + "version": "4.0.2", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dotenv": { + "version": "16.3.1" + }, + "escape-string-regexp": { + "version": "4.0.0", + "dev": true + }, + "eslint": { + "version": "8.51.0", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.51.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "glob-parent": { + "version": "6.0.2", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + } + } + }, + "eslint-config-prettier": { + "version": "9.0.0", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "7.2.2", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "dev": true + }, + "espree": { + "version": "9.6.1", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esquery": { + "version": "1.5.0", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-glob": { + "version": "3.3.1", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.1.1", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.9", + "dev": true + }, + "follow-redirects": { + "version": "1.15.3" + }, + "form-data": { + "version": "4.0.0", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fs.realpath": { + "version": "1.0.0", + "dev": true + }, + "glob": { + "version": "7.2.3", + "dev": true, + "requires": { + "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-parent": { + "version": "5.1.2", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.23.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graphemer": { + "version": "1.4.0", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "ignore": { + "version": "5.2.4", + "dev": true + }, + "ignore-by-default": { + "version": "1.0.1", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "dev": true + }, + "isows": { + "version": "1.0.3", + "requires": {} + }, + "js-yaml": { + "version": "4.1.0", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-buffer": { + "version": "3.0.1", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true + }, + "keyv": { + "version": "4.5.4", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "levn": { + "version": "0.4.1", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0" + }, + "mime-types": { + "version": "2.1.35", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "dev": true + }, + "node-cron": { + "version": "3.0.2", + "requires": { + "uuid": "8.3.2" + } + }, + "nodemon": { + "version": "3.0.1", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "dev": true + } + } + }, + "nopt": { + "version": "1.0.10", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "once": { + "version": "1.4.0", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.3", + "dev": true, + "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + } + }, + "p-limit": { + "version": "3.1.0", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "dev": true + }, + "prettier": { + "version": "3.0.3", + "dev": true + }, + "proxy-from-env": { + "version": "1.1.0" + }, + "pstree.remy": { + "version": "1.1.8", + "dev": true + }, + "punycode": { + "version": "2.3.0", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve-from": { + "version": "4.0.0", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "semver": { + "version": "7.5.4", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "simple-update-notifier": { + "version": "2.0.0", + "dev": true, + "requires": { + "semver": "^7.5.3" + } + }, + "slash": { + "version": "3.0.0", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "touch": { + "version": "3.1.0", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "ts-api-utils": { + "version": "1.0.3", + "dev": true, + "requires": {} + }, + "ts-node": { + "version": "10.9.1", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, + "type-check": { + "version": "0.4.0", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "dev": true + }, + "typescript": { + "version": "5.2.2", + "devOptional": true + }, + "undefsafe": { + "version": "2.0.5", + "dev": true + }, + "undici-types": { + "version": "5.25.3", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", + "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "uuid": { + "version": "8.3.2" + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true + }, + "viem": { + "version": "1.16.5", + "requires": { + "@adraffy/ens-normalize": "1.9.4", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@scure/bip32": "1.3.2", + "@scure/bip39": "1.2.1", + "abitype": "0.9.8", + "isows": "1.0.3", + "ws": "8.13.0" + } + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "dev": true + }, + "ws": { + "version": "8.13.0", + "requires": {} + }, + "yallist": { + "version": "4.0.0", + "dev": true + }, + "yn": { + "version": "3.1.1", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "dev": true + } + } +} diff --git a/packages/reporter/package.json b/packages/reporter/package.json index dac8fc67..8d07caf7 100644 --- a/packages/reporter/package.json +++ b/packages/reporter/package.json @@ -13,11 +13,14 @@ }, "packageManager": "yarn@3.2.1", "dependencies": { + "axios": "^1.5.1", "dotenv": "^16.3.1", "node-cron": "^3.0.2", "viem": "^1.16.5" }, "devDependencies": { + "@types/node": "^20.8.6", + "@types/node-cron": "^3.0.9", "@typescript-eslint/eslint-plugin": "^6.7.5", "@typescript-eslint/parser": "^6.7.5", "eslint": "^8.51.0", diff --git a/packages/reporter/src/ABIs/PingPongABI.json b/packages/reporter/src/ABIs/PingPongABI.json new file mode 100644 index 00000000..ca7dfcd8 --- /dev/null +++ b/packages/reporter/src/ABIs/PingPongABI.json @@ -0,0 +1,41 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "pong", + "type": "string" + } + ], + "name": "Pong", + "type": "event" + }, + { + "inputs": [], + "name": "count", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ping", + "outputs": [ + { + "internalType": "string", + "name": "pong", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/packages/reporter/ABIs/SygmaReporterContractABI.json b/packages/reporter/src/ABIs/SygmaReporterContractABI.json similarity index 100% rename from packages/reporter/ABIs/SygmaReporterContractABI.json rename to packages/reporter/src/ABIs/SygmaReporterContractABI.json diff --git a/packages/reporter/ABIs/ambReporterContractABI.json b/packages/reporter/src/ABIs/ambReporterContractABI.json similarity index 100% rename from packages/reporter/ABIs/ambReporterContractABI.json rename to packages/reporter/src/ABIs/ambReporterContractABI.json diff --git a/packages/reporter/ABIs/telepathyAdapterABI.json b/packages/reporter/src/ABIs/telepathyAdapterABI.json similarity index 100% rename from packages/reporter/ABIs/telepathyAdapterABI.json rename to packages/reporter/src/ABIs/telepathyAdapterABI.json diff --git a/packages/reporter/ABIs/telepathyContractABI.json b/packages/reporter/src/ABIs/telepathyContractABI.json similarity index 100% rename from packages/reporter/ABIs/telepathyContractABI.json rename to packages/reporter/src/ABIs/telepathyContractABI.json diff --git a/packages/reporter/ABIs/wormholeReporterContractABI.json b/packages/reporter/src/ABIs/wormholeReporterContractABI.json similarity index 100% rename from packages/reporter/ABIs/wormholeReporterContractABI.json rename to packages/reporter/src/ABIs/wormholeReporterContractABI.json diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index e69de29b..52115a5b 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -0,0 +1,33 @@ +import "dotenv/config" +import AMB from "./reporter/AMBReporter" +import Sygma from "./reporter/SygmaReporter" +import Telepathy from "./reporter/TelepathyReporter" + +function main() { + if (process.env.AMB_REPORTER === "true") { + const amb = new AMB() + amb.callReportHeader({ + frequency_config: process.env.AMB_FREQUENCY!, + source_chain: process.env.AMB_SOURCE_CHAIN!, + destination_chain: process.env.AMB_DEST_CHAIN!, + }) + } + if (process.env.SYGMA_REPORTER === "true") { + const sygma = new Sygma() + sygma.callReportHeader({ + frequency_config: process.env.SYGMA_FREQUENCY!, + source_chain: process.env.SYGMA_SOURCE_CHAIN!, + destination_chain: process.env.SYGMA_DEST_CHAIN!, + }) + } + if (process.env.TELEPATHY_REPORTER === "true") { + const telepathy = new Telepathy() + telepathy.callReportHeader({ + frequency_config: process.env.TELEPATHY_FREQUENCY!, + source_chain: process.env.TELEPATHY_SOURCE_CHAIN!, + destination_chain: process.env.TELEPATHY_DEST_CHAIN!, + }) + } +} + +main() diff --git a/packages/reporter/src/reporter/AMBReporter.ts b/packages/reporter/src/reporter/AMBReporter.ts new file mode 100644 index 00000000..c5fdd4f1 --- /dev/null +++ b/packages/reporter/src/reporter/AMBReporter.ts @@ -0,0 +1,65 @@ +var cron = require("node-cron") +import { createPublicClient, http, createWalletClient } from "viem" +import { mainnet, goerli, gnosis } from "viem/chains" +import { privateKeyToAccount } from "viem/accounts" +import "dotenv/config" +import reporter_config from "./type" +import contract_address from "../utils/address.json" +import contractABI from "../ABIs/ambReporterContractABI.json" + +class AMBReporter { + constructor() {} + async callReportHeader(props: reporter_config) { + console.log("Starting AMB Reporter") + const walletClient = createWalletClient({ + chain: process.env.AMB_SOURCE_CHAIN === "goerli" ? goerli : mainnet, + transport: http(process.env.SOURCE_RPC_URL), + }) + const publicClient = createPublicClient({ + chain: goerli, + transport: http(process.env.SOURCE_RPC_URL), + }) + const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) + + function getSourceReporterAddr() { + switch (props.source_chain) { + case "goerli": + return contract_address.amb.goerli_reporter + case "ethereum": + return contract_address.amb.ethereum_reporter + default: + return contract_address.amb.goerli_reporter + } + } + + function getDestAdapter() { + switch (props.destination_chain) { + case "gnosis": + return contract_address.amb.gnosis_adapter + default: + return contract_address.amb.gnosis_adapter + } + } + const reporterAddr = getSourceReporterAddr() + const adapterAddr = getDestAdapter() + + cron.schedule(`${props.frequency_config}`, async () => { + const blockNumber = await publicClient.getBlockNumber() + // Putting a buffer here for block number in case the provider's node is not up to date. + console.log(`Reporting BlockNumber: ${blockNumber - 10n}`) + + const { result, request } = await publicClient.simulateContract({ + account, // calling from account + address: reporterAddr as `0x${string}`, + abi: contractABI, + functionName: "reportHeaders", + args: [[blockNumber - 10n], adapterAddr, process.env.GAS], + }) + + const txhash = await walletClient.writeContract(request) + console.log("TxHash ", txhash) + }) + } +} + +export default AMBReporter diff --git a/packages/reporter/src/reporter/SygmaReporter.ts b/packages/reporter/src/reporter/SygmaReporter.ts new file mode 100644 index 00000000..cf84a58e --- /dev/null +++ b/packages/reporter/src/reporter/SygmaReporter.ts @@ -0,0 +1,74 @@ +var cron = require("node-cron") +import { createPublicClient, http, createWalletClient, parseEther } from "viem" +import { mainnet, goerli, gnosis } from "viem/chains" +import { privateKeyToAccount } from "viem/accounts" +import "dotenv/config" +import reporter_config from "./type" +import contract_address from "../utils/address.json" +import contractABI from "../ABIs/SygmaReporterContractABI.json" + +class SygmaReporter { + constructor() {} + async callReportHeader(props: reporter_config) { + console.log("Starting Sygma Reporter") + const walletClient = createWalletClient({ + chain: process.env.AMB_SOURCE_CHAIN === "goerli" ? goerli : mainnet, + transport: http(process.env.SOURCE_RPC_URL), + }) + const publicClient = createPublicClient({ + chain: goerli, + transport: http(process.env.SOURCE_RPC_URL), + }) + const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) + + function getSourceReporterAddr() { + switch (props.source_chain) { + case "goerli": + return contract_address.sygma.goerli_reporter + case "ethereum": + return contract_address.sygma.ethereum_reporter + default: + return contract_address.sygma.goerli_reporter + } + } + + function getDestAdapter() { + switch (props.destination_chain) { + case "gnosis": + return contract_address.sygma.gnosis_adapter + default: + return contract_address.sygma.gnosis_adapter + } + } + + function getDomainID() { + switch (props.destination_chain) { + case "gnosis": + return 101 + default: + return 101 + } + } + const reporterAddr = getSourceReporterAddr() + const adapterAddr = getDestAdapter() + const destDomainId = getDomainID() + + cron.schedule(`${props.frequency_config}`, async () => { + const blockNumber = await publicClient.getBlockNumber() + // Putting a buffer here for block number in case the provider's node is not up to date. + console.log(`Reporting BlockNumber ${blockNumber - 10n}`) + const { result, request } = await publicClient.simulateContract({ + account, // calling from account + address: reporterAddr as `0x${string}`, + abi: contractABI, + functionName: "reportHeadersToDomain", + args: [[blockNumber - 10n], adapterAddr, destDomainId, "0x"], + value: parseEther("0.0001"), + }) + const txhash = await walletClient.writeContract(request) + console.log("TxHash ", txhash) + }) + } +} + +export default SygmaReporter diff --git a/packages/reporter/src/reporter/TelepathyReporter.ts b/packages/reporter/src/reporter/TelepathyReporter.ts new file mode 100644 index 00000000..9641dd3c --- /dev/null +++ b/packages/reporter/src/reporter/TelepathyReporter.ts @@ -0,0 +1,75 @@ +import axios from "axios" +import { createPublicClient, http, createWalletClient, parseAbiItem, hexToBigInt } from "viem" +import { mainnet, goerli, gnosis } from "viem/chains" +import { privateKeyToAccount } from "viem/accounts" +import "dotenv/config" +import reporter_config from "./type" +import contract_address from "../utils/address.json" +import lightClientContractABI from "../ABIs/telepathyContractABI.json" +import adapterContractABI from "../ABIs/telepathyAdapterABI.json" + +class TelepathyReporter { + constructor() {} + async callReportHeader(props: reporter_config) { + console.log("Starting Telepathy Reporter") + + var runJob = setInterval(async () => { + try { + await this.fetchProofAndStoreBlockHeader(props) + } catch (error) { + console.log("Error when calling Telepathy's storeBlockHeader : ", error) + } + }, Number(props.frequency_config)) + } + + async fetchProofAndStoreBlockHeader(props: reporter_config) { + const walletClient = createWalletClient({ + chain: gnosis, + transport: http(process.env.DEST_RPC_URL), + }) + const publicClient = createPublicClient({ + chain: gnosis, + transport: http(process.env.DEST_RPC_URL), + }) + const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) + + const adapterAddr = contract_address.telepathy.gnosis_adapter + const lightClientAddr = contract_address.telepathy.gnosis_light_client + + // Getting the latest block number from provider + const currentBlockNumber = await publicClient.getBlockNumber() + + // get contract events from latest block -500 : latest block + console.log(`Getting Contract Event from block ${currentBlockNumber - 500n} to block ${currentBlockNumber}`) + const logs = await publicClient.getContractEvents({ + address: contract_address.telepathy.gnosis_light_client as `0x${string}`, + abi: lightClientContractABI, + eventName: "HeadUpdate", + fromBlock: currentBlockNumber - 500n, + toBlock: currentBlockNumber, + }) + + console.log("logs ", logs) + logs.forEach(async (event) => { + // get slot value from first indexed + const slotValue = event.topics[1] + const postUrl = process.env.TELEPATHY_PROOF_API_URL + "5" + "/" + slotValue + const response = await axios.post(postUrl) + console.log("Response from telepathy proof provider: ", response.data) + const { chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof } = response.data.result + console.log(`Calling storeBlockHeader for block number ${blockNumber}`) + const { request, result } = await publicClient.simulateContract({ + account, + address: adapterAddr as `0x${string}`, + abi: adapterContractABI, + functionName: "storeBlockHeader", + args: [5, slot, blockNumber, blockNumberProof, blockHash, blockHashProof], + }) + + const txHash = await walletClient.writeContract(request) + console.log("TxHash ", txHash) + }) + } +} + +export default TelepathyReporter diff --git a/packages/reporter/src/reporter/type.ts b/packages/reporter/src/reporter/type.ts new file mode 100644 index 00000000..2455f619 --- /dev/null +++ b/packages/reporter/src/reporter/type.ts @@ -0,0 +1,7 @@ +type reporter_config = { + frequency_config: string + source_chain: string + destination_chain: string +} + +export default reporter_config diff --git a/packages/reporter/src/utils/address.json b/packages/reporter/src/utils/address.json new file mode 100644 index 00000000..1d1a9351 --- /dev/null +++ b/packages/reporter/src/utils/address.json @@ -0,0 +1,30 @@ +{ + "ethereum": { + "ambReporter": "", + "sygmaReporter": "" + }, + "goerli": { + "ambReporter": "0xedc0b1d3de4496e0d917af42f29cb71eb2982319", + "sygmaReporter": "0x2f96d347c932ac73b56e9352ecc0707e25173d88" + }, + "gnosis": { + "ambAdapter": "0x01268DB05965CeAc2a89566c42CD550ED7eE5ECD", + "sygmaAdapter": "0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15", + "telepathyAdapter": "0x2f1E51a2763FB67fe09971Fd8d849716137A3357", + "telepathyLightClient": "0x34b5378DE786389a477b40dD710812c250185f83" + }, + "amb": { + "goerli_reporter": "0xedc0b1d3de4496e0d917af42f29cb71eb2982319", + "ethereum_reporter": "", + "gnosis_adapter": "0x01268DB05965CeAc2a89566c42CD550ED7eE5ECD" + }, + "sygma": { + "goerli_reporter": "0x2f96d347c932ac73b56e9352ecc0707e25173d88", + "ethereum_reporter": "", + "gnosis_adapter": "0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15" + }, + "telepathy": { + "gnosis_adapter": "0x2f1E51a2763FB67fe09971Fd8d849716137A3357", + "gnosis_light_client": "0x34b5378DE786389a477b40dD710812c250185f83" + } +} diff --git a/packages/reporter/tsconfig.json b/packages/reporter/tsconfig.json index eec3d55e..3550a7f9 100644 --- a/packages/reporter/tsconfig.json +++ b/packages/reporter/tsconfig.json @@ -7,7 +7,7 @@ "experimentalDecorators": true, "forceConsistentCasingInFileNames": true, "lib": [ - "es6" + "es6","ESNext" ], "module": "commonjs", "moduleResolution": "node", @@ -17,7 +17,7 @@ "resolveJsonModule": true, "sourceMap": true, "strict": true, - "target": "es6" + "target": "ESNext" }, "exclude": [ "node_modules" diff --git a/packages/reporter/yarn.lock b/packages/reporter/yarn.lock index e2881934..21eb86f3 100644 --- a/packages/reporter/yarn.lock +++ b/packages/reporter/yarn.lock @@ -1,2496 +1,905 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 6 - cacheKey: 8 - -"@aashutoshrathi/word-wrap@npm:^1.2.3": - version: 1.2.6 - resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" - checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd - languageName: node - linkType: hard - -"@adraffy/ens-normalize@npm:1.9.4": - version: 1.9.4 - resolution: "@adraffy/ens-normalize@npm:1.9.4" - checksum: 7d7fff58ebe2c4961f7e5e61dad123aa6a63fec0df5c84af1fa41079dc05d398599690be4427b3a94d2baa94084544bcfdf2d51cbed7504b9b0583b0960ad550 - languageName: node - linkType: hard - -"@cspotcode/source-map-support@npm:^0.8.0": - version: 0.8.1 - resolution: "@cspotcode/source-map-support@npm:0.8.1" - dependencies: - "@jridgewell/trace-mapping": 0.3.9 - checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa - languageName: node - linkType: hard - -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": - version: 4.4.0 - resolution: "@eslint-community/eslint-utils@npm:4.4.0" - dependencies: - eslint-visitor-keys: ^3.3.0 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 - languageName: node - linkType: hard - -"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": - version: 4.9.1 - resolution: "@eslint-community/regexpp@npm:4.9.1" - checksum: 06fb839e9c756f6375cc545c2f2e05a0a64576bd6370e8e3c07983fd29a3d6e164ef4aa48a361f7d27e6713ab79c83053ff6a2ccb78748bc955e344279c4a3b6 - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^2.1.2": - version: 2.1.2 - resolution: "@eslint/eslintrc@npm:2.1.2" - dependencies: - ajv: ^6.12.4 - debug: ^4.3.2 - espree: ^9.6.0 - globals: ^13.19.0 - ignore: ^5.2.0 - import-fresh: ^3.2.1 - js-yaml: ^4.1.0 - minimatch: ^3.1.2 - strip-json-comments: ^3.1.1 - checksum: bc742a1e3b361f06fedb4afb6bf32cbd27171292ef7924f61c62f2aed73048367bcc7ac68f98c06d4245cd3fabc43270f844e3c1699936d4734b3ac5398814a7 - languageName: node - linkType: hard - -"@eslint/js@npm:8.51.0": - version: 8.51.0 - resolution: "@eslint/js@npm:8.51.0" - checksum: 0228bf1e1e0414843e56d9ff362a2a72d579c078f93174666f29315690e9e30a8633ad72c923297f7fd7182381b5a476805ff04dac8debe638953eb1ded3ac73 - languageName: node - linkType: hard - -"@humanwhocodes/config-array@npm:^0.11.11": - version: 0.11.11 - resolution: "@humanwhocodes/config-array@npm:0.11.11" - dependencies: - "@humanwhocodes/object-schema": ^1.2.1 - debug: ^4.1.1 - minimatch: ^3.0.5 - checksum: db84507375ab77b8ffdd24f498a5b49ad6b64391d30dd2ac56885501d03964d29637e05b1ed5aefa09d57ac667e28028bc22d2da872bfcd619652fbdb5f4ca19 - languageName: node - linkType: hard - -"@humanwhocodes/module-importer@npm:^1.0.1": - version: 1.0.1 - resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 - languageName: node - linkType: hard - -"@humanwhocodes/object-schema@npm:^1.2.1": - version: 1.2.1 - resolution: "@humanwhocodes/object-schema@npm:1.2.1" - checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: ^5.1.2 - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: ^7.0.1 - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: ^8.1.0 - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.0.3": - version: 3.1.1 - resolution: "@jridgewell/resolve-uri@npm:3.1.1" - checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:0.3.9": - version: 0.3.9 - resolution: "@jridgewell/trace-mapping@npm:0.3.9" - dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef - languageName: node - linkType: hard - -"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": - version: 1.2.0 - resolution: "@noble/curves@npm:1.2.0" - dependencies: - "@noble/hashes": 1.3.2 - checksum: bb798d7a66d8e43789e93bc3c2ddff91a1e19fdb79a99b86cd98f1e5eff0ee2024a2672902c2576ef3577b6f282f3b5c778bebd55761ddbb30e36bf275e83dd0 - languageName: node - linkType: hard - -"@noble/hashes@npm:1.3.2, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.2": - version: 1.3.2 - resolution: "@noble/hashes@npm:1.3.2" - checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": 2.0.5 - run-parallel: ^1.1.9 - checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": 2.1.5 - fastq: ^1.6.0 - checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/fs@npm:3.1.0" - dependencies: - semver: ^7.3.5 - checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f - languageName: node - linkType: hard - -"@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2": - version: 1.1.3 - resolution: "@scure/base@npm:1.1.3" - checksum: 1606ab8a4db898cb3a1ada16c15437c3bce4e25854fadc8eb03ae93cbbbac1ed90655af4b0be3da37e12056fef11c0374499f69b9e658c9e5b7b3e06353c630c - languageName: node - linkType: hard - -"@scure/bip32@npm:1.3.2": - version: 1.3.2 - resolution: "@scure/bip32@npm:1.3.2" - dependencies: - "@noble/curves": ~1.2.0 - "@noble/hashes": ~1.3.2 - "@scure/base": ~1.1.2 - checksum: c5ae84fae43490853693b481531132b89e056d45c945fc8b92b9d032577f753dfd79c5a7bbcbf0a7f035951006ff0311b6cf7a389e26c9ec6335e42b20c53157 - languageName: node - linkType: hard - -"@scure/bip39@npm:1.2.1": - version: 1.2.1 - resolution: "@scure/bip39@npm:1.2.1" - dependencies: - "@noble/hashes": ~1.3.0 - "@scure/base": ~1.1.0 - checksum: c5bd6f1328fdbeae2dcdd891825b1610225310e5e62a4942714db51066866e4f7bef242c7b06a1b9dcc8043a4a13412cf5c5df76d3b10aa9e36b82e9b6e3eeaa - languageName: node - linkType: hard - -"@tootallnate/once@npm:2": - version: 2.0.0 - resolution: "@tootallnate/once@npm:2.0.0" - checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 - languageName: node - linkType: hard - -"@tsconfig/node10@npm:^1.0.7": - version: 1.0.9 - resolution: "@tsconfig/node10@npm:1.0.9" - checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df - languageName: node - linkType: hard - -"@tsconfig/node12@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node12@npm:1.0.11" - checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a - languageName: node - linkType: hard - -"@tsconfig/node14@npm:^1.0.0": - version: 1.0.3 - resolution: "@tsconfig/node14@npm:1.0.3" - checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d - languageName: node - linkType: hard - -"@tsconfig/node16@npm:^1.0.2": - version: 1.0.4 - resolution: "@tsconfig/node16@npm:1.0.4" - checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff - languageName: node - linkType: hard - -"@types/json-schema@npm:^7.0.12": - version: 7.0.13 - resolution: "@types/json-schema@npm:7.0.13" - checksum: 345df21a678fa72fb389f35f33de77833d09d4a142bb2bcb27c18690efa4cf70fc2876e43843cefb3fbdb9fcb12cd3e970a90936df30f53bbee899865ff605ab - languageName: node - linkType: hard - -"@types/semver@npm:^7.5.0": - version: 7.5.3 - resolution: "@types/semver@npm:7.5.3" - checksum: 349fdd1ab6c213bac5c991bac766bd07b8b12e63762462bb058740dcd2eb09c8193d068bb226f134661275f2022976214c0e727a4e5eb83ec1b131127c980d3e - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:^6.7.5": - version: 6.7.5 - resolution: "@typescript-eslint/eslint-plugin@npm:6.7.5" - dependencies: - "@eslint-community/regexpp": ^4.5.1 - "@typescript-eslint/scope-manager": 6.7.5 - "@typescript-eslint/type-utils": 6.7.5 - "@typescript-eslint/utils": 6.7.5 - "@typescript-eslint/visitor-keys": 6.7.5 - debug: ^4.3.4 - graphemer: ^1.4.0 - ignore: ^5.2.4 - natural-compare: ^1.4.0 - semver: ^7.5.4 - ts-api-utils: ^1.0.1 - peerDependencies: - "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: c37edf5a703db4ff9227d67c2d2cf817e65c9afc94cc0e650fa3d2b05ac55201ef887ce9dadb9ca13779f4025bf4367e132b013e3559e777006a2332079bb180 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:^6.7.5": - version: 6.7.5 - resolution: "@typescript-eslint/parser@npm:6.7.5" - dependencies: - "@typescript-eslint/scope-manager": 6.7.5 - "@typescript-eslint/types": 6.7.5 - "@typescript-eslint/typescript-estree": 6.7.5 - "@typescript-eslint/visitor-keys": 6.7.5 - debug: ^4.3.4 - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 63f988c1c87697bd20487933be952b97f7a5f2a9977f505af671c7d49367fc01ca508817576646caa937c15cc0a0ef1e86adff9111eb19df8b489e7436d10620 - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:6.7.5": - version: 6.7.5 - resolution: "@typescript-eslint/scope-manager@npm:6.7.5" - dependencies: - "@typescript-eslint/types": 6.7.5 - "@typescript-eslint/visitor-keys": 6.7.5 - checksum: f21858ed78f81ab2d9879139f69657fda2a7b901078f79df64d1262d80f84ef66c56525ed0bb5e393fa5ca5474ad97f2225b7f713977c2d0f79cda31b2744af9 - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:6.7.5": - version: 6.7.5 - resolution: "@typescript-eslint/type-utils@npm:6.7.5" - dependencies: - "@typescript-eslint/typescript-estree": 6.7.5 - "@typescript-eslint/utils": 6.7.5 - debug: ^4.3.4 - ts-api-utils: ^1.0.1 - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 8023d8ddcfbf4a0411b192016711068e9e6787c5811aee3a25ac40025ade0d063a1a3d7b38469e1a534bb31fa9dbeec08ab53b7a6d7b3128358294ac5b219d9a - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:6.7.5": - version: 6.7.5 - resolution: "@typescript-eslint/types@npm:6.7.5" - checksum: f21e5726b60f13feb3a920c92515fbc1205ba0e9bba9959b2e42c02c282a0ab4fb0e5ae84f3807b9b1cf95036027e9033d92a911fa88e6c243a87621d8dd7a01 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:6.7.5": - version: 6.7.5 - resolution: "@typescript-eslint/typescript-estree@npm:6.7.5" - dependencies: - "@typescript-eslint/types": 6.7.5 - "@typescript-eslint/visitor-keys": 6.7.5 - debug: ^4.3.4 - globby: ^11.1.0 - is-glob: ^4.0.3 - semver: ^7.5.4 - ts-api-utils: ^1.0.1 - peerDependenciesMeta: - typescript: - optional: true - checksum: 17685e8321edce1d1ec4278d84e63c0f41ccb19e9308f21c37450943ad0c33328755ac52b966e7855af17e01d22bc83d1fcda79c279fabe7d3460c8f315a7265 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:6.7.5": - version: 6.7.5 - resolution: "@typescript-eslint/utils@npm:6.7.5" - dependencies: - "@eslint-community/eslint-utils": ^4.4.0 - "@types/json-schema": ^7.0.12 - "@types/semver": ^7.5.0 - "@typescript-eslint/scope-manager": 6.7.5 - "@typescript-eslint/types": 6.7.5 - "@typescript-eslint/typescript-estree": 6.7.5 - semver: ^7.5.4 - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - checksum: f365c654241f927e7784640079627d60a296aa3d575552b07594a69cfc419832eb5fa4adc87acb1988bea9741ae9cc4a5277dab168990310caef5de125255752 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:6.7.5": - version: 6.7.5 - resolution: "@typescript-eslint/visitor-keys@npm:6.7.5" - dependencies: - "@typescript-eslint/types": 6.7.5 - eslint-visitor-keys: ^3.4.1 - checksum: 2df996742f63d89fa339b0e8ff3a3a289d36b3f584f7538a7626bed3869e9ae27f8f56ab31748519d25a63de2ae22a43dd8413610b00436ff342b0a17eb85289 - languageName: node - linkType: hard - -"abbrev@npm:1, abbrev@npm:^1.0.0": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 - languageName: node - linkType: hard - -"abitype@npm:0.9.8": - version: 0.9.8 - resolution: "abitype@npm:0.9.8" - peerDependencies: - typescript: ">=5.0.4" - zod: ^3 >=3.19.1 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true - checksum: d7d887f29d6821e3f7a400de9620511b80ead3f85c5c87308aaec97965d3493e6687ed816e88722b4f512249bd66dee9e69231b49af0e1db8f69400a62c87cf6 - languageName: node - linkType: hard - -"acorn-jsx@npm:^5.3.2": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 - languageName: node - linkType: hard - -"acorn-walk@npm:^8.1.1": - version: 8.2.0 - resolution: "acorn-walk@npm:8.2.0" - checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 - languageName: node - linkType: hard - -"acorn@npm:^8.4.1, acorn@npm:^8.9.0": - version: 8.10.0 - resolution: "acorn@npm:8.10.0" - bin: - acorn: bin/acorn - checksum: 538ba38af0cc9e5ef983aee196c4b8b4d87c0c94532334fa7e065b2c8a1f85863467bb774231aae91613fcda5e68740c15d97b1967ae3394d20faddddd8af61d - languageName: node - linkType: hard - -"agent-base@npm:6, agent-base@npm:^6.0.2": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: 4 - checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d - languageName: node - linkType: hard - -"agentkeepalive@npm:^4.2.1": - version: 4.5.0 - resolution: "agentkeepalive@npm:4.5.0" - dependencies: - humanize-ms: ^1.2.1 - checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: ^2.0.0 - indent-string: ^4.0.0 - checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 - languageName: node - linkType: hard - -"ajv@npm:^6.12.4": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: ^3.1.1 - fast-json-stable-stringify: ^2.0.0 - json-schema-traverse: ^0.4.1 - uri-js: ^4.2.2 - checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: ^2.0.1 - checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 - languageName: node - linkType: hard - -"ansi-styles@npm:^6.1.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 - languageName: node - linkType: hard - -"anymatch@npm:~3.1.2": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: ^3.0.0 - picomatch: ^2.0.4 - checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 - languageName: node - linkType: hard - -"aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^3.0.0": - version: 3.0.1 - resolution: "are-we-there-yet@npm:3.0.1" - dependencies: - delegates: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 - languageName: node - linkType: hard - -"arg@npm:^4.1.0": - version: 4.1.3 - resolution: "arg@npm:4.1.3" - checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 - languageName: node - linkType: hard - -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 - languageName: node - linkType: hard - -"binary-extensions@npm:^2.0.0": - version: 2.2.0 - resolution: "binary-extensions@npm:2.2.0" - checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: ^1.0.0 - concat-map: 0.0.1 - checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: ^1.0.0 - checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 - languageName: node - linkType: hard - -"braces@npm:^3.0.2, braces@npm:~3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" - dependencies: - fill-range: ^7.0.1 - checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 - languageName: node - linkType: hard - -"cacache@npm:^17.0.0": - version: 17.1.4 - resolution: "cacache@npm:17.1.4" - dependencies: - "@npmcli/fs": ^3.1.0 - fs-minipass: ^3.0.0 - glob: ^10.2.2 - lru-cache: ^7.7.1 - minipass: ^7.0.3 - minipass-collect: ^1.0.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - p-map: ^4.0.0 - ssri: ^10.0.0 - tar: ^6.1.11 - unique-filename: ^3.0.0 - checksum: b7751df756656954a51201335addced8f63fc53266fa56392c9f5ae83c8d27debffb4458ac2d168a744a4517ec3f2163af05c20097f93d17bdc2dc8a385e14a6 - languageName: node - linkType: hard - -"callsites@npm:^3.0.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 - languageName: node - linkType: hard - -"chalk@npm:^4.0.0": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: ^4.1.0 - supports-color: ^7.1.0 - checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc - languageName: node - linkType: hard - -"chokidar@npm:^3.5.2": - version: 3.5.3 - resolution: "chokidar@npm:3.5.3" - dependencies: - anymatch: ~3.1.2 - braces: ~3.0.2 - fsevents: ~2.3.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 - dependenciesMeta: - fsevents: - optional: true - checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: ~1.1.4 - checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 - languageName: node - linkType: hard - -"color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 - languageName: node - linkType: hard - -"color-support@npm:^1.1.3": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af - languageName: node - linkType: hard - -"console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed - languageName: node - linkType: hard - -"create-require@npm:^1.1.0": - version: 1.1.1 - resolution: "create-require@npm:1.1.1" - checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" - dependencies: - path-key: ^3.1.0 - shebang-command: ^2.0.0 - which: ^2.0.1 - checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": - version: 4.3.4 - resolution: "debug@npm:4.3.4" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 - languageName: node - linkType: hard - -"debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: ^2.1.1 - checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c - languageName: node - linkType: hard - -"deep-is@npm:^0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 - languageName: node - linkType: hard - -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd - languageName: node - linkType: hard - -"diff@npm:^4.0.1": - version: 4.0.2 - resolution: "diff@npm:4.0.2" - checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: ^4.0.0 - checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 - languageName: node - linkType: hard - -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: ^2.0.2 - checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce - languageName: node - linkType: hard - -"dotenv@npm:^16.3.1": - version: 16.3.1 - resolution: "dotenv@npm:16.3.1" - checksum: 15d75e7279018f4bafd0ee9706593dd14455ddb71b3bcba9c52574460b7ccaf67d5cf8b2c08a5af1a9da6db36c956a04a1192b101ee102a3e0cf8817bbcf3dfd - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: ^0.6.2 - checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 - languageName: node - linkType: hard - -"eslint-config-prettier@npm:^9.0.0": - version: 9.0.0 - resolution: "eslint-config-prettier@npm:9.0.0" - peerDependencies: - eslint: ">=7.0.0" - bin: - eslint-config-prettier: bin/cli.js - checksum: 362e991b6cb343f79362bada2d97c202e5303e6865888918a7445c555fb75e4c078b01278e90be98aa98ae22f8597d8e93d48314bec6824f540f7efcab3ce451 - languageName: node - linkType: hard - -"eslint-scope@npm:^7.2.2": - version: 7.2.2 - resolution: "eslint-scope@npm:7.2.2" - dependencies: - esrecurse: ^4.3.0 - estraverse: ^5.2.0 - checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": - version: 3.4.3 - resolution: "eslint-visitor-keys@npm:3.4.3" - checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 - languageName: node - linkType: hard - -"eslint@npm:^8.51.0": - version: 8.51.0 - resolution: "eslint@npm:8.51.0" - dependencies: - "@eslint-community/eslint-utils": ^4.2.0 - "@eslint-community/regexpp": ^4.6.1 - "@eslint/eslintrc": ^2.1.2 - "@eslint/js": 8.51.0 - "@humanwhocodes/config-array": ^0.11.11 - "@humanwhocodes/module-importer": ^1.0.1 - "@nodelib/fs.walk": ^1.2.8 - ajv: ^6.12.4 - chalk: ^4.0.0 - cross-spawn: ^7.0.2 - debug: ^4.3.2 - doctrine: ^3.0.0 - escape-string-regexp: ^4.0.0 - eslint-scope: ^7.2.2 - eslint-visitor-keys: ^3.4.3 - espree: ^9.6.1 - esquery: ^1.4.2 - esutils: ^2.0.2 - fast-deep-equal: ^3.1.3 - file-entry-cache: ^6.0.1 - find-up: ^5.0.0 - glob-parent: ^6.0.2 - globals: ^13.19.0 - graphemer: ^1.4.0 - ignore: ^5.2.0 - imurmurhash: ^0.1.4 - is-glob: ^4.0.0 - is-path-inside: ^3.0.3 - js-yaml: ^4.1.0 - json-stable-stringify-without-jsonify: ^1.0.1 - levn: ^0.4.1 - lodash.merge: ^4.6.2 - minimatch: ^3.1.2 - natural-compare: ^1.4.0 - optionator: ^0.9.3 - strip-ansi: ^6.0.1 - text-table: ^0.2.0 - bin: - eslint: bin/eslint.js - checksum: 214fa5d1fcb67af1b8992ce9584ccd85e1aa7a482f8b8ea5b96edc28fa838a18a3b69456db45fc1ed3ef95f1e9efa9714f737292dc681e572d471d02fda9649c - languageName: node - linkType: hard - -"espree@npm:^9.6.0, espree@npm:^9.6.1": - version: 9.6.1 - resolution: "espree@npm:9.6.1" - dependencies: - acorn: ^8.9.0 - acorn-jsx: ^5.3.2 - eslint-visitor-keys: ^3.4.1 - checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 - languageName: node - linkType: hard - -"esquery@npm:^1.4.2": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" - dependencies: - estraverse: ^5.1.0 - checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: ^5.2.0 - checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 - languageName: node - linkType: hard - -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.9": - version: 3.3.1 - resolution: "fast-glob@npm:3.3.1" - dependencies: - "@nodelib/fs.stat": ^2.0.2 - "@nodelib/fs.walk": ^1.2.3 - glob-parent: ^5.1.2 - merge2: ^1.3.0 - micromatch: ^4.0.4 - checksum: b6f3add6403e02cf3a798bfbb1183d0f6da2afd368f27456010c0bc1f9640aea308243d4cb2c0ab142f618276e65ecb8be1661d7c62a7b4e5ba774b9ce5432e5 - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb - languageName: node - linkType: hard - -"fast-levenshtein@npm:^2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.15.0 - resolution: "fastq@npm:1.15.0" - dependencies: - reusify: ^1.0.4 - checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a - languageName: node - linkType: hard - -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" - dependencies: - flat-cache: ^3.0.4 - checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 - languageName: node - linkType: hard - -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" - dependencies: - to-regex-range: ^5.0.1 - checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 - languageName: node - linkType: hard - -"find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" - dependencies: - locate-path: ^6.0.0 - path-exists: ^4.0.0 - checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 - languageName: node - linkType: hard - -"flat-cache@npm:^3.0.4": - version: 3.1.1 - resolution: "flat-cache@npm:3.1.1" - dependencies: - flatted: ^3.2.9 - keyv: ^4.5.3 - rimraf: ^3.0.2 - checksum: 4958cfe0f46acf84953d4e16676ef5f0d38eab3a92d532a1e8d5f88f11eea8b36d5d598070ff2aeae15f1fde18f8d7d089eefaf9db10b5a587cc1c9072325c7a - languageName: node - linkType: hard - -"flatted@npm:^3.2.9": - version: 3.2.9 - resolution: "flatted@npm:3.2.9" - checksum: f14167fbe26a9d20f6fca8d998e8f1f41df72c8e81f9f2c9d61ed2bea058248f5e1cbd05e7f88c0e5087a6a0b822a1e5e2b446e879f3cfbe0b07ba2d7f80b026 - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.1.1 - resolution: "foreground-child@npm:3.1.1" - dependencies: - cross-spawn: ^7.0.0 - signal-exit: ^4.0.1 - checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 - languageName: node - linkType: hard - -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: ^3.0.0 - checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: ^7.0.3 - checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 - languageName: node - linkType: hard - -"fsevents@npm:~2.3.2": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: latest - checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@~2.3.2#~builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" - dependencies: - node-gyp: latest - conditions: os=darwin - languageName: node - linkType: hard - -"gauge@npm:^4.0.3": - version: 4.0.4 - resolution: "gauge@npm:4.0.4" - dependencies: - aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.3 - console-control-strings: ^1.1.0 - has-unicode: ^2.0.1 - signal-exit: ^3.0.7 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - wide-align: ^1.1.5 - checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: ^4.0.1 - checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e - languageName: node - linkType: hard - -"glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: ^4.0.3 - checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 - languageName: node - linkType: hard - -"glob@npm:^10.2.2": - version: 10.3.10 - resolution: "glob@npm:10.3.10" - dependencies: - foreground-child: ^3.1.0 - jackspeak: ^2.3.5 - minimatch: ^9.0.1 - minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 - path-scurry: ^1.10.1 - bin: - glob: dist/esm/bin.mjs - checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 - languageName: node - linkType: hard - -"glob@npm:^7.1.3, glob@npm:^7.1.4": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - 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 - checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 - languageName: node - linkType: hard - -"globals@npm:^13.19.0": - version: 13.23.0 - resolution: "globals@npm:13.23.0" - dependencies: - type-fest: ^0.20.2 - checksum: 194c97cf8d1ef6ba59417234c2386549c4103b6e5f24b1ff1952de61a4753e5d2069435ba629de711a6480b1b1d114a98e2ab27f85e966d5a10c319c3bbd3dc3 - languageName: node - linkType: hard - -"globby@npm:^11.1.0": - version: 11.1.0 - resolution: "globby@npm:11.1.0" - dependencies: - array-union: ^2.1.0 - dir-glob: ^3.0.1 - fast-glob: ^3.2.9 - ignore: ^5.2.0 - merge2: ^1.4.1 - slash: ^3.0.0 - checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.2.6": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 - languageName: node - linkType: hard - -"graphemer@npm:^1.4.0": - version: 1.4.0 - resolution: "graphemer@npm:1.4.0" - checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad - languageName: node - linkType: hard - -"has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "http-proxy-agent@npm:5.0.0" - dependencies: - "@tootallnate/once": 2 - agent-base: 6 - debug: 4 - checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: 6 - debug: 4 - checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 - languageName: node - linkType: hard - -"humanize-ms@npm:^1.2.1": - version: 1.2.1 - resolution: "humanize-ms@npm:1.2.1" - dependencies: - ms: ^2.0.0 - checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: ">= 2.1.2 < 3.0.0" - checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf - languageName: node - linkType: hard - -"ignore-by-default@npm:^1.0.1": - version: 1.0.1 - resolution: "ignore-by-default@npm:1.0.1" - checksum: 441509147b3615e0365e407a3c18e189f78c07af08564176c680be1fabc94b6c789cad1342ad887175d4ecd5225de86f73d376cec8e06b42fd9b429505ffcf8a - languageName: node - linkType: hard - -"ignore@npm:^5.2.0, ignore@npm:^5.2.4": - version: 5.2.4 - resolution: "ignore@npm:5.2.4" - checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef - languageName: node - linkType: hard - -"import-fresh@npm:^3.2.1": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" - dependencies: - parent-module: ^1.0.0 - resolve-from: ^4.0.0 - checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: ^1.3.0 - wrappy: 1 - checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:^2.0.3": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 - languageName: node - linkType: hard - -"ip@npm:^2.0.0": - version: 2.0.0 - resolution: "ip@npm:2.0.0" - checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 - languageName: node - linkType: hard - -"is-binary-path@npm:~2.1.0": - version: 2.1.0 - resolution: "is-binary-path@npm:2.1.0" - dependencies: - binary-extensions: ^2.0.0 - checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 - languageName: node - linkType: hard - -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: ^2.1.1 - checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a - languageName: node - linkType: hard - -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 - languageName: node - linkType: hard - -"isows@npm:1.0.3": - version: 1.0.3 - resolution: "isows@npm:1.0.3" - peerDependencies: - ws: "*" - checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 - languageName: node - linkType: hard - -"jackspeak@npm:^2.3.5": - version: 2.3.6 - resolution: "jackspeak@npm:2.3.6" - dependencies: - "@isaacs/cliui": ^8.0.2 - "@pkgjs/parseargs": ^0.11.0 - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 - languageName: node - linkType: hard - -"js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" - dependencies: - argparse: ^2.0.1 - bin: - js-yaml: bin/js-yaml.js - checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a - languageName: node - linkType: hard - -"json-buffer@npm:3.0.1": - version: 3.0.1 - resolution: "json-buffer@npm:3.0.1" - checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b - languageName: node - linkType: hard - -"json-stable-stringify-without-jsonify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 - languageName: node - linkType: hard - -"keyv@npm:^4.5.3": - version: 4.5.4 - resolution: "keyv@npm:4.5.4" - dependencies: - json-buffer: 3.0.1 - checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 - languageName: node - linkType: hard - -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" - dependencies: - prelude-ls: ^1.2.1 - type-check: ~0.4.0 - checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 - languageName: node - linkType: hard - -"locate-path@npm:^6.0.0": - version: 6.0.0 - resolution: "locate-path@npm:6.0.0" - dependencies: - p-locate: ^5.0.0 - checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a - languageName: node - linkType: hard - -"lodash.merge@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.merge@npm:4.6.2" - checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 - languageName: node - linkType: hard - -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: ^4.0.0 - checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 - languageName: node - linkType: hard - -"lru-cache@npm:^7.7.1": - version: 7.18.3 - resolution: "lru-cache@npm:7.18.3" - checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 - languageName: node - linkType: hard - -"lru-cache@npm:^9.1.1 || ^10.0.0": - version: 10.0.1 - resolution: "lru-cache@npm:10.0.1" - checksum: 06f8d0e1ceabd76bb6f644a26dbb0b4c471b79c7b514c13c6856113879b3bf369eb7b497dad4ff2b7e2636db202412394865b33c332100876d838ad1372f0181 - languageName: node - linkType: hard - -"make-error@npm:^1.1.1": - version: 1.3.6 - resolution: "make-error@npm:1.3.6" - checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^11.0.3": - version: 11.1.1 - resolution: "make-fetch-happen@npm:11.1.1" - dependencies: - agentkeepalive: ^4.2.1 - cacache: ^17.0.0 - http-cache-semantics: ^4.1.1 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^7.7.1 - minipass: ^5.0.0 - minipass-fetch: ^3.0.0 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - promise-retry: ^2.0.1 - socks-proxy-agent: ^7.0.0 - ssri: ^10.0.0 - checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 - languageName: node - linkType: hard - -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 - languageName: node - linkType: hard - -"micromatch@npm:^4.0.4": - version: 4.0.5 - resolution: "micromatch@npm:4.0.5" - dependencies: - braces: ^3.0.2 - picomatch: ^2.3.1 - checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc - languageName: node - linkType: hard - -"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: ^1.1.7 - checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a - languageName: node - linkType: hard - -"minimatch@npm:^9.0.1": - version: 9.0.3 - resolution: "minimatch@npm:9.0.3" - dependencies: - brace-expansion: ^2.0.1 - checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 - languageName: node - linkType: hard - -"minipass-collect@npm:^1.0.2": - version: 1.0.2 - resolution: "minipass-collect@npm:1.0.2" - dependencies: - minipass: ^3.0.0 - checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 - languageName: node - linkType: hard - -"minipass-fetch@npm:^3.0.0": - version: 3.0.4 - resolution: "minipass-fetch@npm:3.0.4" - dependencies: - encoding: ^0.1.13 - minipass: ^7.0.3 - minipass-sized: ^1.0.3 - minizlib: ^2.1.2 - dependenciesMeta: - encoding: - optional: true - checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: ^3.0.0 - checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: ^3.0.0 - checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: ^3.0.0 - checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: ^4.0.0 - checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 - languageName: node - linkType: hard - -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.3": - version: 7.0.4 - resolution: "minipass@npm:7.0.4" - checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 - languageName: node - linkType: hard - -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: ^3.0.0 - yallist: ^4.0.0 - checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 - languageName: node - linkType: hard - -"mkdirp@npm:^1.0.3": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f - languageName: node - linkType: hard - -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f - languageName: node - linkType: hard - -"ms@npm:^2.0.0, ms@npm:^2.1.1": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d - languageName: node - linkType: hard - -"natural-compare@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare@npm:1.4.0" - checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d - languageName: node - linkType: hard - -"negotiator@npm:^0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 - languageName: node - linkType: hard - -"node-cron@npm:^3.0.2": - version: 3.0.2 - resolution: "node-cron@npm:3.0.2" - dependencies: - uuid: 8.3.2 - checksum: dd21585c0d4069a0752022dad9b8380a4393c4783ec78355ffa99ff32b018c3743a35d4ebf9d7c7863949e94e302b440f58c884eb4960e71c7260d817e2d3f25 - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 9.4.0 - resolution: "node-gyp@npm:9.4.0" - dependencies: - env-paths: ^2.2.0 - exponential-backoff: ^3.1.1 - glob: ^7.1.4 - graceful-fs: ^4.2.6 - make-fetch-happen: ^11.0.3 - nopt: ^6.0.0 - npmlog: ^6.0.0 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^2.0.2 - bin: - node-gyp: bin/node-gyp.js - checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 - languageName: node - linkType: hard - -"nodemon@npm:^3.0.1": - version: 3.0.1 - resolution: "nodemon@npm:3.0.1" - dependencies: - chokidar: ^3.5.2 - debug: ^3.2.7 - ignore-by-default: ^1.0.1 - minimatch: ^3.1.2 - pstree.remy: ^1.1.8 - semver: ^7.5.3 - simple-update-notifier: ^2.0.0 - supports-color: ^5.5.0 - touch: ^3.1.0 - undefsafe: ^2.0.5 - bin: - nodemon: bin/nodemon.js - checksum: 6a5d81855760d6617049eccce10ccf02bddb482dab13ceea5280ae595ec7004eee13e7b934368e3f46c37fe4d970342a8c38c99cae7e93e4d7a3ed1c1ecb6acf - languageName: node - linkType: hard - -"nopt@npm:^6.0.0": - version: 6.0.0 - resolution: "nopt@npm:6.0.0" - dependencies: - abbrev: ^1.0.0 - bin: - nopt: bin/nopt.js - checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac - languageName: node - linkType: hard - -"nopt@npm:~1.0.10": - version: 1.0.10 - resolution: "nopt@npm:1.0.10" - dependencies: - abbrev: 1 - bin: - nopt: ./bin/nopt.js - checksum: f62575aceaa3be43f365bf37a596b89bbac2e796b001b6d2e2a85c2140a4e378ff919e2753ccba959c4fd344776fc88c29b393bc167fa939fb1513f126f4cd45 - languageName: node - linkType: hard - -"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 - languageName: node - linkType: hard - -"npmlog@npm:^6.0.0": - version: 6.0.2 - resolution: "npmlog@npm:6.0.2" - dependencies: - are-we-there-yet: ^3.0.0 - console-control-strings: ^1.1.0 - gauge: ^4.0.3 - set-blocking: ^2.0.0 - checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a - languageName: node - linkType: hard - -"once@npm:^1.3.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: 1 - checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 - languageName: node - linkType: hard - -"optionator@npm:^0.9.3": - version: 0.9.3 - resolution: "optionator@npm:0.9.3" - dependencies: - "@aashutoshrathi/word-wrap": ^1.2.3 - deep-is: ^0.1.3 - fast-levenshtein: ^2.0.6 - levn: ^0.4.1 - prelude-ls: ^1.2.1 - type-check: ^0.4.0 - checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a - languageName: node - linkType: hard - -"p-limit@npm:^3.0.2": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: ^0.1.0 - checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 - languageName: node - linkType: hard - -"p-locate@npm:^5.0.0": - version: 5.0.0 - resolution: "p-locate@npm:5.0.0" - dependencies: - p-limit: ^3.0.2 - checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 - languageName: node - linkType: hard - -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: ^3.0.0 - checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c - languageName: node - linkType: hard - -"parent-module@npm:^1.0.0": - version: 1.0.1 - resolution: "parent-module@npm:1.0.1" - dependencies: - callsites: ^3.0.0 - checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 - languageName: node - linkType: hard - -"path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 - languageName: node - linkType: hard - -"path-scurry@npm:^1.10.1": - version: 1.10.1 - resolution: "path-scurry@npm:1.10.1" - dependencies: - lru-cache: ^9.1.1 || ^10.0.0 - minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 - checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 - languageName: node - linkType: hard - -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf - languageName: node - linkType: hard - -"prelude-ls@npm:^1.2.1": - version: 1.2.1 - resolution: "prelude-ls@npm:1.2.1" - checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a - languageName: node - linkType: hard - -"prettier@npm:^3.0.3": - version: 3.0.3 - resolution: "prettier@npm:3.0.3" - bin: - prettier: bin/prettier.cjs - checksum: e10b9af02b281f6c617362ebd2571b1d7fc9fb8a3bd17e371754428cda992e5e8d8b7a046e8f7d3e2da1dcd21aa001e2e3c797402ebb6111b5cd19609dd228e0 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: ^2.0.2 - retry: ^0.12.0 - checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 - languageName: node - linkType: hard - -"pstree.remy@npm:^1.1.8": - version: 1.1.8 - resolution: "pstree.remy@npm:1.1.8" - checksum: 5cb53698d6bb34dfb278c8a26957964aecfff3e161af5fbf7cee00bbe9d8547c7aced4bd9cb193bce15fb56e9e4220fc02a5bf9c14345ffb13a36b858701ec2d - languageName: node - linkType: hard - -"punycode@npm:^2.1.0": - version: 2.3.0 - resolution: "punycode@npm:2.3.0" - checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 - languageName: node - linkType: hard - -"readable-stream@npm:^3.6.0": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" - dependencies: - inherits: ^2.0.3 - string_decoder: ^1.1.1 - util-deprecate: ^1.0.1 - checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d - languageName: node - linkType: hard - -"readdirp@npm:~3.6.0": - version: 3.6.0 - resolution: "readdirp@npm:3.6.0" - dependencies: - picomatch: ^2.2.1 - checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 - languageName: node - linkType: hard - -"reporter@workspace:.": - version: 0.0.0-use.local - resolution: "reporter@workspace:." - dependencies: - "@typescript-eslint/eslint-plugin": ^6.7.5 - "@typescript-eslint/parser": ^6.7.5 - dotenv: ^16.3.1 - eslint: ^8.51.0 - eslint-config-prettier: ^9.0.0 - node-cron: ^3.0.2 - nodemon: ^3.0.1 - prettier: ^3.0.3 - ts-node: ^10.9.1 - typescript: ^5.2.2 - viem: ^1.16.5 - languageName: unknown - linkType: soft - -"resolve-from@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc - languageName: node - linkType: hard - -"rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: ^7.1.3 - bin: - rimraf: bin.js - checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: ^1.2.2 - checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d - languageName: node - linkType: hard - -"safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 - languageName: node - linkType: hard - -"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4": - version: 7.5.4 - resolution: "semver@npm:7.5.4" - dependencies: - lru-cache: ^6.0.0 - bin: - semver: bin/semver.js - checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: ^3.0.0 - checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.7": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 - languageName: node - linkType: hard - -"signal-exit@npm:^4.0.1": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 - languageName: node - linkType: hard - -"simple-update-notifier@npm:^2.0.0": - version: 2.0.0 - resolution: "simple-update-notifier@npm:2.0.0" - dependencies: - semver: ^7.5.3 - checksum: 9ba00d38ce6a29682f64a46213834e4eb01634c2f52c813a9a7b8873ca49cdbb703696f3290f3b27dc067de6d9418b0b84bef22c3eb074acf352529b2d6c27fd - languageName: node - linkType: hard - -"slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^7.0.0": - version: 7.0.0 - resolution: "socks-proxy-agent@npm:7.0.0" - dependencies: - agent-base: ^6.0.2 - debug: ^4.3.3 - socks: ^2.6.2 - checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 - languageName: node - linkType: hard - -"socks@npm:^2.6.2": - version: 2.7.1 - resolution: "socks@npm:2.7.1" - dependencies: - ip: ^2.0.0 - smart-buffer: ^4.2.0 - checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 - languageName: node - linkType: hard - -"ssri@npm:^10.0.0": - version: 10.0.5 - resolution: "ssri@npm:10.0.5" - dependencies: - minipass: ^7.0.3 - checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.3": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: ^8.0.0 - is-fullwidth-code-point: ^3.0.0 - strip-ansi: ^6.0.1 - checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb - languageName: node - linkType: hard - -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: ^0.2.0 - emoji-regex: ^9.2.2 - strip-ansi: ^7.0.1 - checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 - languageName: node - linkType: hard - -"string_decoder@npm:^1.1.1": - version: 1.3.0 - resolution: "string_decoder@npm:1.3.0" - dependencies: - safe-buffer: ~5.2.0 - checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 - languageName: node - linkType: hard - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: ^5.0.1 - checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1": - version: 7.1.0 - resolution: "strip-ansi@npm:7.1.0" - dependencies: - ansi-regex: ^6.0.1 - checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d - languageName: node - linkType: hard - -"strip-json-comments@npm:^3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 - languageName: node - linkType: hard - -"supports-color@npm:^5.5.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: ^3.0.0 - checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac - languageName: node - linkType: hard - -"supports-color@npm:^7.1.0": - version: 7.2.0 - resolution: "supports-color@npm:7.2.0" - dependencies: - has-flag: ^4.0.0 - checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a - languageName: node - linkType: hard - -"tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.2.0 - resolution: "tar@npm:6.2.0" - dependencies: - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - minipass: ^5.0.0 - minizlib: ^2.1.1 - mkdirp: ^1.0.3 - yallist: ^4.0.0 - checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c - languageName: node - linkType: hard - -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: ^7.0.0 - checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed - languageName: node - linkType: hard - -"touch@npm:^3.1.0": - version: 3.1.0 - resolution: "touch@npm:3.1.0" - dependencies: - nopt: ~1.0.10 - bin: - nodetouch: ./bin/nodetouch.js - checksum: e0be589cb5b0e6dbfce6e7e077d4a0d5f0aba558ef769c6d9c33f635e00d73d5be49da6f8631db302ee073919d82b5b7f56da2987feb28765c95a7673af68647 - languageName: node - linkType: hard - -"ts-api-utils@npm:^1.0.1": - version: 1.0.3 - resolution: "ts-api-utils@npm:1.0.3" - peerDependencies: - typescript: ">=4.2.0" - checksum: 441cc4489d65fd515ae6b0f4eb8690057add6f3b6a63a36073753547fb6ce0c9ea0e0530220a0b282b0eec535f52c4dfc315d35f8a4c9a91c0def0707a714ca6 - languageName: node - linkType: hard - -"ts-node@npm:^10.9.1": - version: 10.9.1 - resolution: "ts-node@npm:10.9.1" - dependencies: - "@cspotcode/source-map-support": ^0.8.0 - "@tsconfig/node10": ^1.0.7 - "@tsconfig/node12": ^1.0.7 - "@tsconfig/node14": ^1.0.0 - "@tsconfig/node16": ^1.0.2 - acorn: ^8.4.1 - acorn-walk: ^8.1.1 - arg: ^4.1.0 - create-require: ^1.1.0 - diff: ^4.0.1 - make-error: ^1.1.1 - v8-compile-cache-lib: ^3.0.1 - yn: 3.1.1 - peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" - peerDependenciesMeta: - "@swc/core": - optional: true - "@swc/wasm": - optional: true - bin: - ts-node: dist/bin.js - ts-node-cwd: dist/bin-cwd.js - ts-node-esm: dist/bin-esm.js - ts-node-script: dist/bin-script.js - ts-node-transpile-only: dist/bin-transpile.js - ts-script: dist/bin-script-deprecated.js - checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 - languageName: node - linkType: hard - -"type-check@npm:^0.4.0, type-check@npm:~0.4.0": - version: 0.4.0 - resolution: "type-check@npm:0.4.0" - dependencies: - prelude-ls: ^1.2.1 - checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a - languageName: node - linkType: hard - -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 - languageName: node - linkType: hard - -"typescript@npm:^5.2.2": - version: 5.2.2 - resolution: "typescript@npm:5.2.2" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 7912821dac4d962d315c36800fe387cdc0a6298dba7ec171b350b4a6e988b51d7b8f051317786db1094bd7431d526b648aba7da8236607febb26cf5b871d2d3c - languageName: node - linkType: hard - -"typescript@patch:typescript@^5.2.2#~builtin": - version: 5.2.2 - resolution: "typescript@patch:typescript@npm%3A5.2.2#~builtin::version=5.2.2&hash=7ad353" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 07106822b4305de3f22835cbba949a2b35451cad50888759b6818421290ff95d522b38ef7919e70fb381c5fe9c1c643d7dea22c8b31652a717ddbd57b7f4d554 - languageName: node - linkType: hard - -"undefsafe@npm:^2.0.5": - version: 2.0.5 - resolution: "undefsafe@npm:2.0.5" - checksum: f42ab3b5770fedd4ada175fc1b2eb775b78f609156f7c389106aafd231bfc210813ee49f54483d7191d7b76e483bc7f537b5d92d19ded27156baf57592eb02cc - languageName: node - linkType: hard - -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" - dependencies: - unique-slug: ^4.0.0 - checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df - languageName: node - linkType: hard - -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" - dependencies: - imurmurhash: ^0.1.4 - checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: ^2.1.0 - checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.1": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 - languageName: node - linkType: hard - -"uuid@npm:8.3.2": - version: 8.3.2 - resolution: "uuid@npm:8.3.2" - bin: - uuid: dist/bin/uuid - checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df - languageName: node - linkType: hard - -"v8-compile-cache-lib@npm:^3.0.1": - version: 3.0.1 - resolution: "v8-compile-cache-lib@npm:3.0.1" - checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 - languageName: node - linkType: hard - -"viem@npm:^1.16.5": - version: 1.16.5 - resolution: "viem@npm:1.16.5" - dependencies: - "@adraffy/ens-normalize": 1.9.4 - "@noble/curves": 1.2.0 - "@noble/hashes": 1.3.2 - "@scure/bip32": 1.3.2 - "@scure/bip39": 1.2.1 - abitype: 0.9.8 - isows: 1.0.3 - ws: 8.13.0 - peerDependencies: - typescript: ">=5.0.4" - peerDependenciesMeta: - typescript: - optional: true - checksum: cc07bbc8ebf616c2cc6e14f08eea59d1b34df294d1dcba72090bf10e224e87c17014db593bcff223fe6c7c30999448d786d67d9e18691906f51900db940af821 - languageName: node - linkType: hard - -"which@npm:^2.0.1, which@npm:^2.0.2": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: ^2.0.0 - bin: - node-which: ./bin/node-which - checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 - languageName: node - linkType: hard - -"wide-align@npm:^1.1.5": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: ^1.0.2 || 2 || 3 || 4 - checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: ^6.1.0 - string-width: ^5.0.1 - strip-ansi: ^7.0.1 - checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 - languageName: node - linkType: hard - -"ws@npm:8.13.0": - version: 8.13.0 - resolution: "ws@npm:8.13.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 - languageName: node - linkType: hard - -"yn@npm:3.1.1": - version: 3.1.1 - resolution: "yn@npm:3.1.1" - checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 - languageName: node - linkType: hard +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + +"@adraffy/ens-normalize@1.9.4": + version "1.9.4" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.9.1" + +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.51.0": + version "8.51.0" + +"@humanwhocodes/config-array@^0.11.11": + version "0.11.11" + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@noble/curves@~1.2.0", "@noble/curves@1.2.0": + version "1.2.0" + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2", "@noble/hashes@1.3.2": + version "1.3.2" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + version "2.0.5" + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@scure/base@~1.1.0", "@scure/base@~1.1.2": + version "1.1.3" + +"@scure/bip32@1.3.2": + version "1.3.2" + dependencies: + "@noble/curves" "~1.2.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.2" + +"@scure/bip39@1.2.1": + version "1.2.1" + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + +"@types/json-schema@^7.0.12": + version "7.0.13" + +"@types/node-cron@^3.0.9": + version "3.0.9" + resolved "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.9.tgz" + integrity sha512-P10Vf+oagnMbefD31nqjS/dpBM34qzfdpvIgVZwtwsNb0Hg2lDaPFeGcyGUJIqh3zHlDMwYXGeunGgMnswgnPg== + +"@types/node@*", "@types/node@^20.8.6": + version "20.8.6" + resolved "https://registry.npmjs.org/@types/node/-/node-20.8.6.tgz" + integrity sha512-eWO4K2Ji70QzKUqRy6oyJWUeB7+g2cRagT3T/nxYibYcT4y2BDL8lqolRXjTHmkZCdJfIPaY73KbJAZmcryxTQ== + dependencies: + undici-types "~5.25.1" + +"@types/semver@^7.5.0": + version "7.5.3" + +"@typescript-eslint/eslint-plugin@^6.7.5": + version "6.7.5" + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.7.5" + "@typescript-eslint/type-utils" "6.7.5" + "@typescript-eslint/utils" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@^6.7.5": + version "6.7.5" + dependencies: + "@typescript-eslint/scope-manager" "6.7.5" + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/typescript-estree" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.7.5": + version "6.7.5" + dependencies: + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" + +"@typescript-eslint/type-utils@6.7.5": + version "6.7.5" + dependencies: + "@typescript-eslint/typescript-estree" "6.7.5" + "@typescript-eslint/utils" "6.7.5" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@6.7.5": + version "6.7.5" + +"@typescript-eslint/typescript-estree@6.7.5": + version "6.7.5" + dependencies: + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.7.5": + version "6.7.5" + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.7.5" + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/typescript-estree" "6.7.5" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.7.5": + version "6.7.5" + dependencies: + "@typescript-eslint/types" "6.7.5" + eslint-visitor-keys "^3.4.1" + +abbrev@1: + version "1.1.1" + +abitype@0.9.8: + version "0.9.8" + +acorn-jsx@^5.3.2: + version "5.3.2" + +acorn-walk@^8.1.1: + version "8.2.0" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.4.1, acorn@^8.9.0: + version "8.10.0" + +ajv@^6.12.4: + version "6.12.6" + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + +ansi-styles@^4.1.0: + version "4.3.0" + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.3" + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + +argparse@^2.0.1: + version "2.0.1" + +array-union@^2.1.0: + version "2.1.0" + +asynckit@^0.4.0: + version "0.4.0" + +axios@^1.5.1: + version "1.5.1" + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + +binary-extensions@^2.0.0: + version "2.2.0" + +brace-expansion@^1.1.7: + version "1.1.11" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + dependencies: + fill-range "^7.0.1" + +callsites@^3.0.0: + version "3.1.0" + +chalk@^4.0.0: + version "4.1.2" + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.5.2: + version "3.5.3" + 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" + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + +combined-stream@^1.0.8: + version "1.0.8" + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + +create-require@^1.1.0: + version "1.1.1" + +cross-spawn@^7.0.2: + version "7.0.3" + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^3.2.7: + version "3.2.7" + dependencies: + ms "^2.1.1" + +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + +delayed-stream@~1.0.0: + version "1.0.0" + +diff@^4.0.1: + version "4.0.2" + +dir-glob@^3.0.1: + version "3.0.1" + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + dependencies: + esutils "^2.0.2" + +dotenv@^16.3.1: + version "16.3.1" + +escape-string-regexp@^4.0.0: + version "4.0.0" + +eslint-config-prettier@^9.0.0: + version "9.0.0" + +eslint-scope@^7.2.2: + version "7.2.2" + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + +"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", eslint@^8.51.0, eslint@>=7.0.0: + version "8.51.0" + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.51.0" + "@humanwhocodes/config-array" "^0.11.11" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2: + version "1.5.0" + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + +esutils@^2.0.2: + version "2.0.3" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + +fast-glob@^3.2.9: + version "3.3.1" + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + +fast-levenshtein@^2.0.6: + version "2.0.6" + +fastq@^1.6.0: + version "1.15.0" + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.1.1" + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.9: + version "3.2.9" + +follow-redirects@^1.15.0: + version "1.15.3" + +form-data@^4.0.0: + version "4.0.0" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs.realpath@^1.0.0: + version "1.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3: + version "7.2.3" + 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" + +globals@^13.19.0: + version "13.23.0" + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +graphemer@^1.4.0: + version "1.4.0" + +has-flag@^3.0.0: + version "3.0.0" + +has-flag@^4.0.0: + version "4.0.0" + +ignore-by-default@^1.0.1: + version "1.0.1" + +ignore@^5.2.0, ignore@^5.2.4: + version "5.2.4" + +import-fresh@^3.2.1: + version "3.3.0" + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + +inflight@^1.0.4: + version "1.0.6" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + +is-binary-path@~2.1.0: + version "2.1.0" + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + +is-path-inside@^3.0.3: + version "3.0.3" + +isexe@^2.0.0: + version "2.0.0" + +isows@1.0.3: + version "1.0.3" + +js-yaml@^4.1.0: + version "4.1.0" + dependencies: + argparse "^2.0.1" + +json-buffer@3.0.1: + version "3.0.1" + +json-schema-traverse@^0.4.1: + version "0.4.1" + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + +keyv@^4.5.3: + version "4.5.4" + dependencies: + json-buffer "3.0.1" + +levn@^0.4.1: + version "0.4.1" + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^6.0.0: + version "6.0.0" + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + +lru-cache@^6.0.0: + version "6.0.0" + dependencies: + yallist "^4.0.0" + +make-error@^1.1.1: + version "1.3.6" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + +micromatch@^4.0.4: + version "4.0.5" + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + +mime-types@^2.1.12: + version "2.1.35" + dependencies: + mime-db "1.52.0" + +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + dependencies: + brace-expansion "^1.1.7" + +ms@^2.1.1: + version "2.1.3" + +ms@2.1.2: + version "2.1.2" + +natural-compare@^1.4.0: + version "1.4.0" + +node-cron@^3.0.2: + version "3.0.2" + dependencies: + uuid "8.3.2" + +nodemon@^3.0.1: + version "3.0.1" + dependencies: + chokidar "^3.5.2" + debug "^3.2.7" + ignore-by-default "^1.0.1" + minimatch "^3.1.2" + pstree.remy "^1.1.8" + semver "^7.5.3" + simple-update-notifier "^2.0.0" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.5" + +nopt@~1.0.10: + version "1.0.10" + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + +once@^1.3.0: + version "1.4.0" + dependencies: + wrappy "1" + +optionator@^0.9.3: + version "0.9.3" + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + +p-limit@^3.0.2: + version "3.1.0" + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + +path-key@^3.1.0: + version "3.1.1" + +path-type@^4.0.0: + version "4.0.0" + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + +prelude-ls@^1.2.1: + version "1.2.1" + +prettier@^3.0.3: + version "3.0.3" + +proxy-from-env@^1.1.0: + version "1.1.0" + +pstree.remy@^1.1.8: + version "1.1.8" + +punycode@^2.1.0: + version "2.3.0" + +queue-microtask@^1.2.2: + version "1.2.3" + +readdirp@~3.6.0: + version "3.6.0" + dependencies: + picomatch "^2.2.1" + +resolve-from@^4.0.0: + version "4.0.0" + +reusify@^1.0.4: + version "1.0.4" + +rimraf@^3.0.2: + version "3.0.2" + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + dependencies: + queue-microtask "^1.2.2" + +semver@^7.5.3, semver@^7.5.4: + version "7.5.4" + dependencies: + lru-cache "^6.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + +simple-update-notifier@^2.0.0: + version "2.0.0" + dependencies: + semver "^7.5.3" + +slash@^3.0.0: + version "3.0.0" + +strip-ansi@^6.0.1: + version "6.0.1" + dependencies: + ansi-regex "^5.0.1" + +strip-json-comments@^3.1.1: + version "3.1.1" + +supports-color@^5.5.0: + version "5.5.0" + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + dependencies: + has-flag "^4.0.0" + +text-table@^0.2.0: + version "0.2.0" + +to-regex-range@^5.0.1: + version "5.0.1" + dependencies: + is-number "^7.0.0" + +touch@^3.1.0: + version "3.1.0" + dependencies: + nopt "~1.0.10" + +ts-api-utils@^1.0.1: + version "1.0.3" + +ts-node@^10.9.1: + version "10.9.1" + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + +typescript@^5.2.2, typescript@>=2.7, typescript@>=4.2.0, typescript@>=5.0.4: + version "5.2.2" + +undefsafe@^2.0.5: + version "2.0.5" + +undici-types@~5.25.1: + version "5.25.3" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz" + integrity sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA== + +uri-js@^4.2.2: + version "4.4.1" + dependencies: + punycode "^2.1.0" + +uuid@8.3.2: + version "8.3.2" + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + +viem@^1.16.5: + version "1.16.5" + dependencies: + "@adraffy/ens-normalize" "1.9.4" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@scure/bip32" "1.3.2" + "@scure/bip39" "1.2.1" + abitype "0.9.8" + isows "1.0.3" + ws "8.13.0" + +which@^2.0.1: + version "2.0.2" + dependencies: + isexe "^2.0.0" + +wrappy@1: + version "1.0.2" + +ws@*, ws@8.13.0: + version "8.13.0" + +yallist@^4.0.0: + version "4.0.0" + +yn@3.1.1: + version "3.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" From c310d20ddc9690612072c875b3249de11379fc6a Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Fri, 20 Oct 2023 13:12:51 +0800 Subject: [PATCH 04/81] WIP: controller with batching blocks functionality --- packages/reporter/.env.example | 30 +- packages/reporter/package.json | 3 +- .../reporter/src/AMBHeaderReporterCaller.js | 57 - packages/reporter/src/BlockListener.ts | 66 + .../reporter/src/controller/AMBController.ts | 71 + .../src/controller/SygmaController.ts | 81 + .../src/controller/TelepathyController.ts | 87 + packages/reporter/src/index.ts | 57 +- packages/reporter/src/newIndex.ts | 34 + packages/reporter/src/reporter/AMBReporter.ts | 65 - .../reporter/src/reporter/SygmaReporter.ts | 74 - .../src/reporter/TelepathyReporter.ts | 75 - packages/reporter/src/reporter/type.ts | 7 - packages/reporter/yarn.lock | 3716 +++++++++++++---- 14 files changed, 3191 insertions(+), 1232 deletions(-) delete mode 100644 packages/reporter/src/AMBHeaderReporterCaller.js create mode 100644 packages/reporter/src/BlockListener.ts create mode 100644 packages/reporter/src/controller/AMBController.ts create mode 100644 packages/reporter/src/controller/SygmaController.ts create mode 100644 packages/reporter/src/controller/TelepathyController.ts create mode 100644 packages/reporter/src/newIndex.ts delete mode 100644 packages/reporter/src/reporter/AMBReporter.ts delete mode 100644 packages/reporter/src/reporter/SygmaReporter.ts delete mode 100644 packages/reporter/src/reporter/TelepathyReporter.ts delete mode 100644 packages/reporter/src/reporter/type.ts diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index 8f7a1a15..d277c856 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -1,32 +1,22 @@ -PRIVATE_KEY=0x0abc +PRIVATE_KEY= SOURCE_RPC_URL= DEST_RPC_URL=https://rpc.gnosischain.com -SYGMA_FEE_DATA=0x - -TELEPATHY_PROOF_API_URL=https://api.telepathy.xyz/api/hashi/ -AMB_ADAPTER=0x01268DB05965CeAc2a89566c42CD550ED7eE5ECD -GAS=30000 +SOURCE_CHAIN=goerli +DEST_CHAIN=gnosis -# If not run all, config each reporter separately -AMB_REPORTER=true -AMB_FREQUENCY=1,10,20,30,40,50 * * * * * -AMB_SOURCE_CHAIN=goerli -AMB_DEST_CHAIN=gnosis -AMB_GAS=50000 +AMB_CONTROLLER=false -SYGMA_REPORTER=true -SYGMA_FREQUENCY= 1,10,20,30,40,50 * * * * * -SYGMA_SOURCE_CHAIN=goerli -SYGMA_DEST_CHAIN=gnosis +SYGMA_CONTROLLER=false SYGMA_FEE_DATA=0x -TELEPATHY_REPORTER=true -TELEPATHY_FREQUENCY=50000 #run every 50000ms -TELEPATHY_SOURCE_CHAIN=goerli -TELEPATHY_DEST_CHAIN=gnosis +TELEPATHY_CONTROLLER=true TELEPATHY_PROOF_API_URL=https://api.telepathy.xyz/api/hashi/ +GOERLI_BLOCKTIME=12 +ETHEREUM_BLOCKTIME=16 +GNOSIS_BLOCKTINE=5 +CHIADO_BLOCKTIME=5 diff --git a/packages/reporter/package.json b/packages/reporter/package.json index 8d07caf7..c223ddeb 100644 --- a/packages/reporter/package.json +++ b/packages/reporter/package.json @@ -16,7 +16,8 @@ "axios": "^1.5.1", "dotenv": "^16.3.1", "node-cron": "^3.0.2", - "viem": "^1.16.5" + "viem": "^1.16.5", + "winston": "^3.11.0" }, "devDependencies": { "@types/node": "^20.8.6", diff --git a/packages/reporter/src/AMBHeaderReporterCaller.js b/packages/reporter/src/AMBHeaderReporterCaller.js deleted file mode 100644 index e349b9b1..00000000 --- a/packages/reporter/src/AMBHeaderReporterCaller.js +++ /dev/null @@ -1,57 +0,0 @@ -//Calls the AMBHeaderReporter reportHeaders() method every x hours - -// require('dotenv').config(); -// const { ethers } = require('ethers'); -// const cron = require('node-cron'); - -import { createPublicClient, http, createWalletClient } from 'viem' -import { mainnet, goerli, gnosis } from 'viem/chains' -import { privateKeyToAccount } from 'viem/accounts' -import 'dotenv/config' -import 'node-cron' - -const walletClient = createWalletClient({ - chain: goerli, - transport: http() -}) -const publicClient = createPublicClient({ - chain: goerli, - transport: http() -}) - - -const account = privateKeyToAccount(process.env.PRIVATE_KEY) -// Create an instance of the contract -const contractAddress = process.env.AMB_REPORTER_CONTRACT_ADDRESS; - -const contractABI = require('../ABIs/ambReporterContractABI.json'); - - - -// Set up the cron job to call the Solidity method every 1 hour. 24h -> '0 0 * * *' -cron.schedule('0 * * * *', async () => { - try { - // Get the latest block number - const blockNumber = await publicClient.getBlockNumber(); - console.log('Latest block number:', blockNumber); - - amb_adapter = process.env.AMB_ADAPTER; - gas = process.env.GAS; - - // Call the reportHeaders method using the contract instance - const {request} = await publicClient.simulateContract({ - account, // calling from account - address: contractAddress, - abi: contractABI, - functionName: 'reportHeaders', - args: [[blockNumber], amb_adapter, gas], - }) - ; - const txHash = await walletClient.writeContract(request); - console.log('Solidity method called successfully:', txHash); - } catch (error) { - console.error('Error calling Solidity method:', error); - } -}); - -console.log('Cron job scheduled to call the Solidity method every 1 hour.'); \ No newline at end of file diff --git a/packages/reporter/src/BlockListener.ts b/packages/reporter/src/BlockListener.ts new file mode 100644 index 00000000..ff1a7ef5 --- /dev/null +++ b/packages/reporter/src/BlockListener.ts @@ -0,0 +1,66 @@ +import { createPublicClient, http, createWalletClient, PublicClient, Chain } from "viem" +import { mainnet, goerli, gnosis } from "viem/chains" +import winston from "winston" +class BlocksListener { + controllers: any[] + logger: winston.Logger + timeFetchBlocksMs: number + lastProcessedBlock: bigint = 0n + _interval: ReturnType | undefined // NodeJs.Timeout + + constructor(controllers: any[], timeFetchBlocksMs: number, logger: winston.Logger) { + this.controllers = controllers + this.timeFetchBlocksMs = timeFetchBlocksMs + this.logger = logger + } + + start() { + this._fetchBlocks() + this._interval = setInterval(() => { + this._fetchBlocks() + this.logger.info(`Waiting for ${this.timeFetchBlocksMs}ms...`) + }, this.timeFetchBlocksMs) + } + + stop() { + clearInterval(this._interval) + } + + async _fetchBlocks() { + try { + this.logger.info("Start to fetch blocks") + const publicClient = createPublicClient({ + chain: + process.env.SOURCE_CHAIN === "goerli" ? goerli : process.env.SOURCE_CHAIN === "mainnet" ? mainnet : undefined, + transport: http(process.env.SOURCE_RPC_URL), + }) + const currentBlockNumber = await publicClient.getBlockNumber() + this.logger.info(`Current Block Number: ${currentBlockNumber} , on source chain: ${process.env.SOURCE_CHAIN}`) + if (this.lastProcessedBlock !== currentBlockNumber) { + this.lastProcessedBlock = await publicClient.getBlockNumber() + + const queryBlockLength = 100n // the number of blocks to query + const blockBuffer = 10n // put 10 blocks before the current block in case the node provider don't sync up at the head + const startBlock = this.lastProcessedBlock - queryBlockLength - blockBuffer + const endBlock = this.lastProcessedBlock - blockBuffer + const blocks = await Promise.all( + Array.from({ length: Number(queryBlockLength + 1n) }, (value, index) => startBlock + BigInt(index)), + ) + this.logger.info(`Fetching block from ${startBlock} to ${endBlock}`) + + await Promise.all(this.controllers.map((_controller: any) => _controller.onBlocks(blocks))) + + this.lastProcessedBlock = endBlock + } else { + this.logger.error(`${currentBlockNumber} has already been fetched!`) + } + // delay for 1000ms + await new Promise((func) => setTimeout(func, 1000)) + } catch (_err) { + // logger.error(_err) + this.logger.error(`error from block listener ${_err}`) + } + } +} + +export default BlocksListener diff --git a/packages/reporter/src/controller/AMBController.ts b/packages/reporter/src/controller/AMBController.ts new file mode 100644 index 00000000..b666f66a --- /dev/null +++ b/packages/reporter/src/controller/AMBController.ts @@ -0,0 +1,71 @@ +var cron = require("node-cron") +import { createPublicClient, http, createWalletClient, PublicClient, Chain } from "viem" +import { mainnet, goerli, gnosis } from "viem/chains" +import { privateKeyToAccount } from "viem/accounts" +import "dotenv/config" +import contract_address from "../utils/address.json" +import contractABI from "../ABIs/ambReporterContractABI.json" +import winston from "winston" + +class AMBController { + sourceChain: string + destinationChain: string + isEnabled: boolean = false + logger: winston.Logger + constructor(sourceChain: string, destinationChain: string, isEnabled: boolean, logger: winston.Logger) { + this.sourceChain = sourceChain + this.destinationChain = destinationChain + this.isEnabled = isEnabled + this.logger = logger + } + async onBlocks(blockNumbers: string[]) { + try { + this.logger.info("AMB: Starting AMB Reporter") + const walletClient = createWalletClient({ + chain: this.sourceChain === "goerli" ? goerli : this.sourceChain === "mainnet" ? mainnet : undefined, + transport: http(process.env.SOURCE_RPC_URL), + }) + const publicClient = createPublicClient({ + chain: this.sourceChain === "goerli" ? goerli : this.sourceChain === "mainnet" ? mainnet : undefined, + transport: http(process.env.SOURCE_RPC_URL), + }) + const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) + + const reporterAddr = this.getSourceReporterAddr() + const adapterAddr = this.getDestAdapter() + + const { result, request } = await publicClient.simulateContract({ + account, // calling from account + address: reporterAddr as `0x${string}`, + abi: contractABI, + functionName: "reportHeaders", + args: [blockNumbers, adapterAddr, process.env.GAS], + }) + + const txhash = await walletClient.writeContract(request) + this.logger.info(`AMB: TxHash from AMB Controller: ${txhash}`) + } catch (error) { + this.logger.error(`AMB: Error from AMB Controller: ${error}`) + } + } + getSourceReporterAddr() { + switch (this.sourceChain) { + case "goerli": + return contract_address.amb.goerli_reporter + case "ethereum": + return contract_address.amb.ethereum_reporter + default: + return contract_address.amb.goerli_reporter + } + } + getDestAdapter() { + switch (this.destinationChain) { + case "gnosis": + return contract_address.amb.gnosis_adapter + default: + return contract_address.amb.gnosis_adapter + } + } +} + +export default AMBController diff --git a/packages/reporter/src/controller/SygmaController.ts b/packages/reporter/src/controller/SygmaController.ts new file mode 100644 index 00000000..7ed3ca10 --- /dev/null +++ b/packages/reporter/src/controller/SygmaController.ts @@ -0,0 +1,81 @@ +var cron = require("node-cron") +import { createPublicClient, http, createWalletClient, parseEther } from "viem" +import { mainnet, goerli, gnosis } from "viem/chains" +import { privateKeyToAccount } from "viem/accounts" +import "dotenv/config" +import contract_address from "../utils/address.json" +import contractABI from "../ABIs/SygmaReporterContractABI.json" +import winston from "winston" + +class SygmaController { + sourceChain: string + destinationChain: string + isEnabled: boolean = false + logger: winston.Logger + constructor(sourceChain: string, destinationChain: string, isEnabled: boolean, logger: winston.Logger) { + this.sourceChain = sourceChain + this.destinationChain = destinationChain + this.isEnabled = isEnabled + this.logger = logger + } + + async onBlocks(blockNumbers: string[]) { + try { + this.logger.info("Sygma: Starting Sygma Reporter") + const walletClient = createWalletClient({ + chain: this.sourceChain === "goerli" ? goerli : this.sourceChain === "mainnet" ? mainnet : undefined, + transport: http(process.env.SOURCE_RPC_URL), + }) + const publicClient = createPublicClient({ + chain: this.sourceChain === "goerli" ? goerli : this.sourceChain === "mainnet" ? mainnet : undefined, + transport: http(process.env.SOURCE_RPC_URL), + }) + const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) + + const reporterAddr = this.getSourceReporterAddr() + const adapterAddr = this.getDestAdapter() + const destDomainId = this.getDomainID() + + const { result, request } = await publicClient.simulateContract({ + account, // calling from account + address: reporterAddr as `0x${string}`, + abi: contractABI, + functionName: "reportHeadersToDomain", + args: [blockNumbers, adapterAddr, destDomainId, "0x"], + value: parseEther("0.0001"), + }) + const txhash = await walletClient.writeContract(request) + this.logger.info(`Sygma: TxHash from Sygma Controller: ${txhash}`) + } catch (error) { + this.logger.error(`Sygma: Error from Sygma Controller: ${error}`) + } + } + getSourceReporterAddr() { + switch (this.sourceChain) { + case "goerli": + return contract_address.sygma.goerli_reporter + case "ethereum": + return contract_address.sygma.ethereum_reporter + default: + return contract_address.sygma.goerli_reporter + } + } + getDestAdapter() { + switch (this.destinationChain) { + case "gnosis": + return contract_address.sygma.gnosis_adapter + default: + return contract_address.sygma.gnosis_adapter + } + } + getDomainID() { + switch (this.destinationChain) { + case "gnosis": + return 101 + default: + return 101 + } + } +} + +export default SygmaController diff --git a/packages/reporter/src/controller/TelepathyController.ts b/packages/reporter/src/controller/TelepathyController.ts new file mode 100644 index 00000000..9ca87cb2 --- /dev/null +++ b/packages/reporter/src/controller/TelepathyController.ts @@ -0,0 +1,87 @@ +import axios from "axios" +import { createPublicClient, http, createWalletClient, hexToNumber } from "viem" +import { gnosis } from "viem/chains" +import { privateKeyToAccount } from "viem/accounts" +import "dotenv/config" +import contract_address from "../utils/address.json" +import lightClientContractABI from "../ABIs/telepathyContractABI.json" +import adapterContractABI from "../ABIs/telepathyAdapterABI.json" +import winston from "winston" + +class TelepathyController { + sourceChain: string + destinationChain: string + isEnabled: boolean = false + logger: winston.Logger + constructor(sourceChain: string, destinationChain: string, isEnabled: boolean, logger: winston.Logger) { + this.sourceChain = sourceChain + this.destinationChain = destinationChain + this.isEnabled = isEnabled + this.logger = logger + } + + async onBlocks(blockNumbers: string[]) { + try { + // Telepathy on support light client on Gnosis at the moment + const walletClient = createWalletClient({ + chain: gnosis, + transport: http(process.env.DEST_RPC_URL), + }) + const publicClient = createPublicClient({ + chain: gnosis, + transport: http(process.env.DEST_RPC_URL), + }) + const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) + + const adapterAddr = contract_address.telepathy.gnosis_adapter + const lightClientAddr = contract_address.telepathy.gnosis_light_client + + // Getting the latest block number from provider + const currentBlockNumber = await publicClient.getBlockNumber() + + // get contract events from latest block -500 : latest block + const queryBlockLength = 1000n // the number of blocks to query + const blockBuffer = 10n // put 10 blocks before the current block in case the node provider don't sync up at the head + const startBlock = currentBlockNumber - queryBlockLength - blockBuffer + const endBlock = currentBlockNumber - blockBuffer + this.logger.info(`Telepathy: Getting Contract Event from block ${startBlock} to block ${currentBlockNumber}`) + const logs = await publicClient.getContractEvents({ + address: lightClientAddr as `0x${string}`, + abi: lightClientContractABI, + eventName: "HeadUpdate", + fromBlock: startBlock, + toBlock: endBlock, + }) + + if (logs.length == 0) { + this.logger.error("No event is found!") + return + } + + logs.forEach(async (event) => { + // get slot value from first indexed + const slotValue = event.topics[1] + this.logger.info(`Fetching proof for slot ${slotValue}`) + const postUrl = process.env.TELEPATHY_PROOF_API_URL + "5" + "/" + hexToNumber(slotValue!) + const response = await axios.post(postUrl) + this.logger.info(`Telepathy: Response from telepathy proof provider: ${response.data}`) + const { chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof } = response.data.result + this.logger.info(`Telepathy: Calling storeBlockHeader for block number ${blockNumber}`) + const { request, result } = await publicClient.simulateContract({ + account, + address: adapterAddr as `0x${string}`, + abi: adapterContractABI, + functionName: "storeBlockHeader", + args: [chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof], + }) + + const txHash = await walletClient.writeContract(request) + this.logger.info(`Telepathy: TxHash from Telepathy Controller: ${txHash} `) + }) + } catch (error) { + this.logger.error(`Telepathy: Error from Telepathy Controller: ${error}`) + } + } +} + +export default TelepathyController diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 52115a5b..42d19f9b 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -1,33 +1,34 @@ +// import logger from "winston" +import { createPublicClient, http, createWalletClient, PublicClient, Chain } from "viem" +import AMBController from "./controller/AMBController" +import SygmaController from "./controller/SygmaController" +import TelepathyController from "./controller/TelepathyController" +import BlocksListener from "./BlockListener" import "dotenv/config" -import AMB from "./reporter/AMBReporter" -import Sygma from "./reporter/SygmaReporter" -import Telepathy from "./reporter/TelepathyReporter" - +import winston from "winston" function main() { - if (process.env.AMB_REPORTER === "true") { - const amb = new AMB() - amb.callReportHeader({ - frequency_config: process.env.AMB_FREQUENCY!, - source_chain: process.env.AMB_SOURCE_CHAIN!, - destination_chain: process.env.AMB_DEST_CHAIN!, - }) - } - if (process.env.SYGMA_REPORTER === "true") { - const sygma = new Sygma() - sygma.callReportHeader({ - frequency_config: process.env.SYGMA_FREQUENCY!, - source_chain: process.env.SYGMA_SOURCE_CHAIN!, - destination_chain: process.env.SYGMA_DEST_CHAIN!, - }) - } - if (process.env.TELEPATHY_REPORTER === "true") { - const telepathy = new Telepathy() - telepathy.callReportHeader({ - frequency_config: process.env.TELEPATHY_FREQUENCY!, - source_chain: process.env.TELEPATHY_SOURCE_CHAIN!, - destination_chain: process.env.TELEPATHY_DEST_CHAIN!, - }) - } + const logger = winston.createLogger({ + level: "info", + format: winston.format.json(), + transports: [new winston.transports.Console()], + }) + const sourceChain = process.env.SOURCE_CHAIN + const destChain = process.env.DEST_CHAIN + const ambController = new AMBController(sourceChain!, destChain!, process.env.AMB_CONTROLLER === "true", logger) + const sygmaController = new SygmaController(sourceChain!, destChain!, process.env.SYGMA_CONTROLLER === "true", logger) + const telepathyController = new TelepathyController( + sourceChain!, + destChain!, + process.env.TELEPATHY_CONTROLLER === "true", + logger, + ) + + const blocksListener = new BlocksListener( + [ambController, sygmaController, telepathyController].filter((controller) => controller.isEnabled == true), + 10 * 1000, + logger, + ) + blocksListener.start() } main() diff --git a/packages/reporter/src/newIndex.ts b/packages/reporter/src/newIndex.ts new file mode 100644 index 00000000..42d19f9b --- /dev/null +++ b/packages/reporter/src/newIndex.ts @@ -0,0 +1,34 @@ +// import logger from "winston" +import { createPublicClient, http, createWalletClient, PublicClient, Chain } from "viem" +import AMBController from "./controller/AMBController" +import SygmaController from "./controller/SygmaController" +import TelepathyController from "./controller/TelepathyController" +import BlocksListener from "./BlockListener" +import "dotenv/config" +import winston from "winston" +function main() { + const logger = winston.createLogger({ + level: "info", + format: winston.format.json(), + transports: [new winston.transports.Console()], + }) + const sourceChain = process.env.SOURCE_CHAIN + const destChain = process.env.DEST_CHAIN + const ambController = new AMBController(sourceChain!, destChain!, process.env.AMB_CONTROLLER === "true", logger) + const sygmaController = new SygmaController(sourceChain!, destChain!, process.env.SYGMA_CONTROLLER === "true", logger) + const telepathyController = new TelepathyController( + sourceChain!, + destChain!, + process.env.TELEPATHY_CONTROLLER === "true", + logger, + ) + + const blocksListener = new BlocksListener( + [ambController, sygmaController, telepathyController].filter((controller) => controller.isEnabled == true), + 10 * 1000, + logger, + ) + blocksListener.start() +} + +main() diff --git a/packages/reporter/src/reporter/AMBReporter.ts b/packages/reporter/src/reporter/AMBReporter.ts deleted file mode 100644 index c5fdd4f1..00000000 --- a/packages/reporter/src/reporter/AMBReporter.ts +++ /dev/null @@ -1,65 +0,0 @@ -var cron = require("node-cron") -import { createPublicClient, http, createWalletClient } from "viem" -import { mainnet, goerli, gnosis } from "viem/chains" -import { privateKeyToAccount } from "viem/accounts" -import "dotenv/config" -import reporter_config from "./type" -import contract_address from "../utils/address.json" -import contractABI from "../ABIs/ambReporterContractABI.json" - -class AMBReporter { - constructor() {} - async callReportHeader(props: reporter_config) { - console.log("Starting AMB Reporter") - const walletClient = createWalletClient({ - chain: process.env.AMB_SOURCE_CHAIN === "goerli" ? goerli : mainnet, - transport: http(process.env.SOURCE_RPC_URL), - }) - const publicClient = createPublicClient({ - chain: goerli, - transport: http(process.env.SOURCE_RPC_URL), - }) - const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) - - function getSourceReporterAddr() { - switch (props.source_chain) { - case "goerli": - return contract_address.amb.goerli_reporter - case "ethereum": - return contract_address.amb.ethereum_reporter - default: - return contract_address.amb.goerli_reporter - } - } - - function getDestAdapter() { - switch (props.destination_chain) { - case "gnosis": - return contract_address.amb.gnosis_adapter - default: - return contract_address.amb.gnosis_adapter - } - } - const reporterAddr = getSourceReporterAddr() - const adapterAddr = getDestAdapter() - - cron.schedule(`${props.frequency_config}`, async () => { - const blockNumber = await publicClient.getBlockNumber() - // Putting a buffer here for block number in case the provider's node is not up to date. - console.log(`Reporting BlockNumber: ${blockNumber - 10n}`) - - const { result, request } = await publicClient.simulateContract({ - account, // calling from account - address: reporterAddr as `0x${string}`, - abi: contractABI, - functionName: "reportHeaders", - args: [[blockNumber - 10n], adapterAddr, process.env.GAS], - }) - - const txhash = await walletClient.writeContract(request) - console.log("TxHash ", txhash) - }) - } -} - -export default AMBReporter diff --git a/packages/reporter/src/reporter/SygmaReporter.ts b/packages/reporter/src/reporter/SygmaReporter.ts deleted file mode 100644 index cf84a58e..00000000 --- a/packages/reporter/src/reporter/SygmaReporter.ts +++ /dev/null @@ -1,74 +0,0 @@ -var cron = require("node-cron") -import { createPublicClient, http, createWalletClient, parseEther } from "viem" -import { mainnet, goerli, gnosis } from "viem/chains" -import { privateKeyToAccount } from "viem/accounts" -import "dotenv/config" -import reporter_config from "./type" -import contract_address from "../utils/address.json" -import contractABI from "../ABIs/SygmaReporterContractABI.json" - -class SygmaReporter { - constructor() {} - async callReportHeader(props: reporter_config) { - console.log("Starting Sygma Reporter") - const walletClient = createWalletClient({ - chain: process.env.AMB_SOURCE_CHAIN === "goerli" ? goerli : mainnet, - transport: http(process.env.SOURCE_RPC_URL), - }) - const publicClient = createPublicClient({ - chain: goerli, - transport: http(process.env.SOURCE_RPC_URL), - }) - const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) - - function getSourceReporterAddr() { - switch (props.source_chain) { - case "goerli": - return contract_address.sygma.goerli_reporter - case "ethereum": - return contract_address.sygma.ethereum_reporter - default: - return contract_address.sygma.goerli_reporter - } - } - - function getDestAdapter() { - switch (props.destination_chain) { - case "gnosis": - return contract_address.sygma.gnosis_adapter - default: - return contract_address.sygma.gnosis_adapter - } - } - - function getDomainID() { - switch (props.destination_chain) { - case "gnosis": - return 101 - default: - return 101 - } - } - const reporterAddr = getSourceReporterAddr() - const adapterAddr = getDestAdapter() - const destDomainId = getDomainID() - - cron.schedule(`${props.frequency_config}`, async () => { - const blockNumber = await publicClient.getBlockNumber() - // Putting a buffer here for block number in case the provider's node is not up to date. - console.log(`Reporting BlockNumber ${blockNumber - 10n}`) - const { result, request } = await publicClient.simulateContract({ - account, // calling from account - address: reporterAddr as `0x${string}`, - abi: contractABI, - functionName: "reportHeadersToDomain", - args: [[blockNumber - 10n], adapterAddr, destDomainId, "0x"], - value: parseEther("0.0001"), - }) - const txhash = await walletClient.writeContract(request) - console.log("TxHash ", txhash) - }) - } -} - -export default SygmaReporter diff --git a/packages/reporter/src/reporter/TelepathyReporter.ts b/packages/reporter/src/reporter/TelepathyReporter.ts deleted file mode 100644 index 9641dd3c..00000000 --- a/packages/reporter/src/reporter/TelepathyReporter.ts +++ /dev/null @@ -1,75 +0,0 @@ -import axios from "axios" -import { createPublicClient, http, createWalletClient, parseAbiItem, hexToBigInt } from "viem" -import { mainnet, goerli, gnosis } from "viem/chains" -import { privateKeyToAccount } from "viem/accounts" -import "dotenv/config" -import reporter_config from "./type" -import contract_address from "../utils/address.json" -import lightClientContractABI from "../ABIs/telepathyContractABI.json" -import adapterContractABI from "../ABIs/telepathyAdapterABI.json" - -class TelepathyReporter { - constructor() {} - async callReportHeader(props: reporter_config) { - console.log("Starting Telepathy Reporter") - - var runJob = setInterval(async () => { - try { - await this.fetchProofAndStoreBlockHeader(props) - } catch (error) { - console.log("Error when calling Telepathy's storeBlockHeader : ", error) - } - }, Number(props.frequency_config)) - } - - async fetchProofAndStoreBlockHeader(props: reporter_config) { - const walletClient = createWalletClient({ - chain: gnosis, - transport: http(process.env.DEST_RPC_URL), - }) - const publicClient = createPublicClient({ - chain: gnosis, - transport: http(process.env.DEST_RPC_URL), - }) - const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) - - const adapterAddr = contract_address.telepathy.gnosis_adapter - const lightClientAddr = contract_address.telepathy.gnosis_light_client - - // Getting the latest block number from provider - const currentBlockNumber = await publicClient.getBlockNumber() - - // get contract events from latest block -500 : latest block - console.log(`Getting Contract Event from block ${currentBlockNumber - 500n} to block ${currentBlockNumber}`) - const logs = await publicClient.getContractEvents({ - address: contract_address.telepathy.gnosis_light_client as `0x${string}`, - abi: lightClientContractABI, - eventName: "HeadUpdate", - fromBlock: currentBlockNumber - 500n, - toBlock: currentBlockNumber, - }) - - console.log("logs ", logs) - logs.forEach(async (event) => { - // get slot value from first indexed - const slotValue = event.topics[1] - const postUrl = process.env.TELEPATHY_PROOF_API_URL + "5" + "/" + slotValue - const response = await axios.post(postUrl) - console.log("Response from telepathy proof provider: ", response.data) - const { chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof } = response.data.result - console.log(`Calling storeBlockHeader for block number ${blockNumber}`) - const { request, result } = await publicClient.simulateContract({ - account, - address: adapterAddr as `0x${string}`, - abi: adapterContractABI, - functionName: "storeBlockHeader", - args: [5, slot, blockNumber, blockNumberProof, blockHash, blockHashProof], - }) - - const txHash = await walletClient.writeContract(request) - console.log("TxHash ", txHash) - }) - } -} - -export default TelepathyReporter diff --git a/packages/reporter/src/reporter/type.ts b/packages/reporter/src/reporter/type.ts deleted file mode 100644 index 2455f619..00000000 --- a/packages/reporter/src/reporter/type.ts +++ /dev/null @@ -1,7 +0,0 @@ -type reporter_config = { - frequency_config: string - source_chain: string - destination_chain: string -} - -export default reporter_config diff --git a/packages/reporter/yarn.lock b/packages/reporter/yarn.lock index 21eb86f3..0e59c872 100644 --- a/packages/reporter/yarn.lock +++ b/packages/reporter/yarn.lock @@ -1,905 +1,2811 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - -"@adraffy/ens-normalize@1.9.4": - version "1.9.4" - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.9.1" - -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.51.0": - version "8.51.0" - -"@humanwhocodes/config-array@^0.11.11": - version "0.11.11" - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.1" - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.15" - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@noble/curves@~1.2.0", "@noble/curves@1.2.0": - version "1.2.0" - dependencies: - "@noble/hashes" "1.3.2" - -"@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2", "@noble/hashes@1.3.2": - version "1.3.2" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": - version "2.0.5" - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@scure/base@~1.1.0", "@scure/base@~1.1.2": - version "1.1.3" - -"@scure/bip32@1.3.2": - version "1.3.2" - dependencies: - "@noble/curves" "~1.2.0" - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.2" - -"@scure/bip39@1.2.1": - version "1.2.1" - dependencies: - "@noble/hashes" "~1.3.0" - "@scure/base" "~1.1.0" - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - -"@types/json-schema@^7.0.12": - version "7.0.13" - -"@types/node-cron@^3.0.9": - version "3.0.9" - resolved "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.9.tgz" - integrity sha512-P10Vf+oagnMbefD31nqjS/dpBM34qzfdpvIgVZwtwsNb0Hg2lDaPFeGcyGUJIqh3zHlDMwYXGeunGgMnswgnPg== - -"@types/node@*", "@types/node@^20.8.6": - version "20.8.6" - resolved "https://registry.npmjs.org/@types/node/-/node-20.8.6.tgz" - integrity sha512-eWO4K2Ji70QzKUqRy6oyJWUeB7+g2cRagT3T/nxYibYcT4y2BDL8lqolRXjTHmkZCdJfIPaY73KbJAZmcryxTQ== - dependencies: - undici-types "~5.25.1" - -"@types/semver@^7.5.0": - version "7.5.3" - -"@typescript-eslint/eslint-plugin@^6.7.5": - version "6.7.5" - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.7.5" - "@typescript-eslint/type-utils" "6.7.5" - "@typescript-eslint/utils" "6.7.5" - "@typescript-eslint/visitor-keys" "6.7.5" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.4" - natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@^6.7.5": - version "6.7.5" - dependencies: - "@typescript-eslint/scope-manager" "6.7.5" - "@typescript-eslint/types" "6.7.5" - "@typescript-eslint/typescript-estree" "6.7.5" - "@typescript-eslint/visitor-keys" "6.7.5" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@6.7.5": - version "6.7.5" - dependencies: - "@typescript-eslint/types" "6.7.5" - "@typescript-eslint/visitor-keys" "6.7.5" - -"@typescript-eslint/type-utils@6.7.5": - version "6.7.5" - dependencies: - "@typescript-eslint/typescript-estree" "6.7.5" - "@typescript-eslint/utils" "6.7.5" - debug "^4.3.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/types@6.7.5": - version "6.7.5" - -"@typescript-eslint/typescript-estree@6.7.5": - version "6.7.5" - dependencies: - "@typescript-eslint/types" "6.7.5" - "@typescript-eslint/visitor-keys" "6.7.5" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/utils@6.7.5": - version "6.7.5" - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.7.5" - "@typescript-eslint/types" "6.7.5" - "@typescript-eslint/typescript-estree" "6.7.5" - semver "^7.5.4" - -"@typescript-eslint/visitor-keys@6.7.5": - version "6.7.5" - dependencies: - "@typescript-eslint/types" "6.7.5" - eslint-visitor-keys "^3.4.1" - -abbrev@1: - version "1.1.1" - -abitype@0.9.8: - version "0.9.8" - -acorn-jsx@^5.3.2: - version "5.3.2" - -acorn-walk@^8.1.1: - version "8.2.0" - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.4.1, acorn@^8.9.0: - version "8.10.0" - -ajv@^6.12.4: - version "6.12.6" - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-regex@^5.0.1: - version "5.0.1" - -ansi-styles@^4.1.0: - version "4.3.0" - dependencies: - color-convert "^2.0.1" - -anymatch@~3.1.2: - version "3.1.3" - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^4.1.0: - version "4.1.3" - -argparse@^2.0.1: - version "2.0.1" - -array-union@^2.1.0: - version "2.1.0" - -asynckit@^0.4.0: - version "0.4.0" - -axios@^1.5.1: - version "1.5.1" - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -balanced-match@^1.0.0: - version "1.0.2" - -binary-extensions@^2.0.0: - version "2.2.0" - -brace-expansion@^1.1.7: - version "1.1.11" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - dependencies: - fill-range "^7.0.1" - -callsites@^3.0.0: - version "3.1.0" - -chalk@^4.0.0: - version "4.1.2" - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@^3.5.2: - version "3.5.3" - 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" - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - -combined-stream@^1.0.8: - version "1.0.8" - dependencies: - delayed-stream "~1.0.0" - -concat-map@0.0.1: - version "0.0.1" - -create-require@^1.1.0: - version "1.1.1" - -cross-spawn@^7.0.2: - version "7.0.3" - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@^3.2.7: - version "3.2.7" - dependencies: - ms "^2.1.1" - -debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - dependencies: - ms "2.1.2" - -deep-is@^0.1.3: - version "0.1.4" - -delayed-stream@~1.0.0: - version "1.0.0" - -diff@^4.0.1: - version "4.0.2" - -dir-glob@^3.0.1: - version "3.0.1" - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - dependencies: - esutils "^2.0.2" - -dotenv@^16.3.1: - version "16.3.1" - -escape-string-regexp@^4.0.0: - version "4.0.0" - -eslint-config-prettier@^9.0.0: - version "9.0.0" - -eslint-scope@^7.2.2: - version "7.2.2" - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - -"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", eslint@^8.51.0, eslint@>=7.0.0: - version "8.51.0" - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.51.0" - "@humanwhocodes/config-array" "^0.11.11" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esquery@^1.4.2: - version "1.5.0" - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - -esutils@^2.0.2: - version "2.0.3" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - -fast-glob@^3.2.9: - version "3.3.1" - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - -fast-levenshtein@^2.0.6: - version "2.0.6" - -fastq@^1.6.0: - version "1.15.0" - dependencies: - reusify "^1.0.4" - -file-entry-cache@^6.0.1: - version "6.0.1" - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - dependencies: - to-regex-range "^5.0.1" - -find-up@^5.0.0: - version "5.0.0" - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.1.1" - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.9: - version "3.2.9" - -follow-redirects@^1.15.0: - version "1.15.3" - -form-data@^4.0.0: - version "4.0.0" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -fs.realpath@^1.0.0: - version "1.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - dependencies: - is-glob "^4.0.3" - -glob@^7.1.3: - version "7.2.3" - 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" - -globals@^13.19.0: - version "13.23.0" - dependencies: - type-fest "^0.20.2" - -globby@^11.1.0: - version "11.1.0" - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -graphemer@^1.4.0: - version "1.4.0" - -has-flag@^3.0.0: - version "3.0.0" - -has-flag@^4.0.0: - version "4.0.0" - -ignore-by-default@^1.0.1: - version "1.0.1" - -ignore@^5.2.0, ignore@^5.2.4: - version "5.2.4" - -import-fresh@^3.2.1: - version "3.3.0" - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - -inflight@^1.0.4: - version "1.0.6" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - -is-binary-path@~2.1.0: - version "2.1.0" - dependencies: - binary-extensions "^2.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - -is-path-inside@^3.0.3: - version "3.0.3" - -isexe@^2.0.0: - version "2.0.0" - -isows@1.0.3: - version "1.0.3" - -js-yaml@^4.1.0: - version "4.1.0" - dependencies: - argparse "^2.0.1" - -json-buffer@3.0.1: - version "3.0.1" - -json-schema-traverse@^0.4.1: - version "0.4.1" - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - -keyv@^4.5.3: - version "4.5.4" - dependencies: - json-buffer "3.0.1" - -levn@^0.4.1: - version "0.4.1" - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -locate-path@^6.0.0: - version "6.0.0" - dependencies: - p-locate "^5.0.0" - -lodash.merge@^4.6.2: - version "4.6.2" - -lru-cache@^6.0.0: - version "6.0.0" - dependencies: - yallist "^4.0.0" - -make-error@^1.1.1: - version "1.3.6" - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - -micromatch@^4.0.4: - version "4.0.5" - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - -mime-types@^2.1.12: - version "2.1.35" - dependencies: - mime-db "1.52.0" - -minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - dependencies: - brace-expansion "^1.1.7" - -ms@^2.1.1: - version "2.1.3" - -ms@2.1.2: - version "2.1.2" - -natural-compare@^1.4.0: - version "1.4.0" - -node-cron@^3.0.2: - version "3.0.2" - dependencies: - uuid "8.3.2" - -nodemon@^3.0.1: - version "3.0.1" - dependencies: - chokidar "^3.5.2" - debug "^3.2.7" - ignore-by-default "^1.0.1" - minimatch "^3.1.2" - pstree.remy "^1.1.8" - semver "^7.5.3" - simple-update-notifier "^2.0.0" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.5" - -nopt@~1.0.10: - version "1.0.10" - dependencies: - abbrev "1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - -once@^1.3.0: - version "1.4.0" - dependencies: - wrappy "1" - -optionator@^0.9.3: - version "0.9.3" - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -p-limit@^3.0.2: - version "3.1.0" - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - dependencies: - p-limit "^3.0.2" - -parent-module@^1.0.0: - version "1.0.1" - dependencies: - callsites "^3.0.0" - -path-exists@^4.0.0: - version "4.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - -path-key@^3.1.0: - version "3.1.1" - -path-type@^4.0.0: - version "4.0.0" - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - -prelude-ls@^1.2.1: - version "1.2.1" - -prettier@^3.0.3: - version "3.0.3" - -proxy-from-env@^1.1.0: - version "1.1.0" - -pstree.remy@^1.1.8: - version "1.1.8" - -punycode@^2.1.0: - version "2.3.0" - -queue-microtask@^1.2.2: - version "1.2.3" - -readdirp@~3.6.0: - version "3.6.0" - dependencies: - picomatch "^2.2.1" - -resolve-from@^4.0.0: - version "4.0.0" - -reusify@^1.0.4: - version "1.0.4" - -rimraf@^3.0.2: - version "3.0.2" - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - dependencies: - queue-microtask "^1.2.2" - -semver@^7.5.3, semver@^7.5.4: - version "7.5.4" - dependencies: - lru-cache "^6.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - -simple-update-notifier@^2.0.0: - version "2.0.0" - dependencies: - semver "^7.5.3" - -slash@^3.0.0: - version "3.0.0" - -strip-ansi@^6.0.1: - version "6.0.1" - dependencies: - ansi-regex "^5.0.1" - -strip-json-comments@^3.1.1: - version "3.1.1" - -supports-color@^5.5.0: - version "5.5.0" - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - dependencies: - has-flag "^4.0.0" - -text-table@^0.2.0: - version "0.2.0" - -to-regex-range@^5.0.1: - version "5.0.1" - dependencies: - is-number "^7.0.0" - -touch@^3.1.0: - version "3.1.0" - dependencies: - nopt "~1.0.10" - -ts-api-utils@^1.0.1: - version "1.0.3" - -ts-node@^10.9.1: - version "10.9.1" - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - -typescript@^5.2.2, typescript@>=2.7, typescript@>=4.2.0, typescript@>=5.0.4: - version "5.2.2" - -undefsafe@^2.0.5: - version "2.0.5" - -undici-types@~5.25.1: - version "5.25.3" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz" - integrity sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA== - -uri-js@^4.2.2: - version "4.4.1" - dependencies: - punycode "^2.1.0" - -uuid@8.3.2: - version "8.3.2" - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - -viem@^1.16.5: - version "1.16.5" - dependencies: - "@adraffy/ens-normalize" "1.9.4" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@scure/bip32" "1.3.2" - "@scure/bip39" "1.2.1" - abitype "0.9.8" - isows "1.0.3" - ws "8.13.0" - -which@^2.0.1: - version "2.0.2" - dependencies: - isexe "^2.0.0" - -wrappy@1: - version "1.0.2" - -ws@*, ws@8.13.0: - version "8.13.0" - -yallist@^4.0.0: - version "4.0.0" - -yn@3.1.1: - version "3.1.1" - -yocto-queue@^0.1.0: - version "0.1.0" +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd + languageName: node + linkType: hard + +"@adraffy/ens-normalize@npm:1.9.4": + version: 1.9.4 + resolution: "@adraffy/ens-normalize@npm:1.9.4" + checksum: 7d7fff58ebe2c4961f7e5e61dad123aa6a63fec0df5c84af1fa41079dc05d398599690be4427b3a94d2baa94084544bcfdf2d51cbed7504b9b0583b0960ad550 + languageName: node + linkType: hard + +"@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0": + version: 1.6.0 + resolution: "@colors/colors@npm:1.6.0" + checksum: aa209963e0c3218e80a4a20553ba8c0fbb6fa13140540b4e5f97923790be06801fc90172c1114fc8b7e888b3d012b67298cde6b9e81521361becfaee400c662f + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": 0.3.9 + checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa + languageName: node + linkType: hard + +"@dabh/diagnostics@npm:^2.0.2": + version: 2.0.3 + resolution: "@dabh/diagnostics@npm:2.0.3" + dependencies: + colorspace: 1.1.x + enabled: 2.0.x + kuler: ^2.0.0 + checksum: 4879600c55c8315a0fb85fbb19057bad1adc08f0a080a8cb4e2b63f723c379bfc4283b68123a2b078d367b327dd8df12fcb27464efe791addc0a48b9df6d79a1 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": + version: 4.9.1 + resolution: "@eslint-community/regexpp@npm:4.9.1" + checksum: 06fb839e9c756f6375cc545c2f2e05a0a64576bd6370e8e3c07983fd29a3d6e164ef4aa48a361f7d27e6713ab79c83053ff6a2ccb78748bc955e344279c4a3b6 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.2": + version: 2.1.2 + resolution: "@eslint/eslintrc@npm:2.1.2" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.6.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: bc742a1e3b361f06fedb4afb6bf32cbd27171292ef7924f61c62f2aed73048367bcc7ac68f98c06d4245cd3fabc43270f844e3c1699936d4734b3ac5398814a7 + languageName: node + linkType: hard + +"@eslint/js@npm:8.51.0": + version: 8.51.0 + resolution: "@eslint/js@npm:8.51.0" + checksum: 0228bf1e1e0414843e56d9ff362a2a72d579c078f93174666f29315690e9e30a8633ad72c923297f7fd7182381b5a476805ff04dac8debe638953eb1ded3ac73 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.11.11": + version: 0.11.12 + resolution: "@humanwhocodes/config-array@npm:0.11.12" + dependencies: + "@humanwhocodes/object-schema": ^2.0.0 + debug: ^4.1.1 + minimatch: ^3.0.5 + checksum: 8eab5a7c7e4948aa07cf26d0b6cca103298ab9bbb70f897c7cfbb3ee5fd5431a0d9f2ff5efd4d712dae7fd8fa941f09b1b22da842b9d87367ccb75b86bbd715b + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^2.0.0": + version: 2.0.0 + resolution: "@humanwhocodes/object-schema@npm:2.0.0" + checksum: e0558acd035198a69adfa3edce33ec385bb664c92478a08a91b3e8082acd2d96ef7bf43189d848e4b0bdd75092f9d494a55a4efaf5bed45101c9e83d28379d83 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.0.3": + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef + languageName: node + linkType: hard + +"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" + dependencies: + "@noble/hashes": 1.3.2 + checksum: bb798d7a66d8e43789e93bc3c2ddff91a1e19fdb79a99b86cd98f1e5eff0ee2024a2672902c2576ef3577b6f282f3b5c778bebd55761ddbb30e36bf275e83dd0 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.2, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.2": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2": + version: 1.1.3 + resolution: "@scure/base@npm:1.1.3" + checksum: 1606ab8a4db898cb3a1ada16c15437c3bce4e25854fadc8eb03ae93cbbbac1ed90655af4b0be3da37e12056fef11c0374499f69b9e658c9e5b7b3e06353c630c + languageName: node + linkType: hard + +"@scure/bip32@npm:1.3.2": + version: 1.3.2 + resolution: "@scure/bip32@npm:1.3.2" + dependencies: + "@noble/curves": ~1.2.0 + "@noble/hashes": ~1.3.2 + "@scure/base": ~1.1.2 + checksum: c5ae84fae43490853693b481531132b89e056d45c945fc8b92b9d032577f753dfd79c5a7bbcbf0a7f035951006ff0311b6cf7a389e26c9ec6335e42b20c53157 + languageName: node + linkType: hard + +"@scure/bip39@npm:1.2.1": + version: 1.2.1 + resolution: "@scure/bip39@npm:1.2.1" + dependencies: + "@noble/hashes": ~1.3.0 + "@scure/base": ~1.1.0 + checksum: c5bd6f1328fdbeae2dcdd891825b1610225310e5e62a4942714db51066866e4f7bef242c7b06a1b9dcc8043a4a13412cf5c5df76d3b10aa9e36b82e9b6e3eeaa + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.9 + resolution: "@tsconfig/node10@npm:1.0.9" + checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.12": + version: 7.0.14 + resolution: "@types/json-schema@npm:7.0.14" + checksum: 4b3dd99616c7c808201c56f6c7f6552eb67b5c0c753ab3fa03a6cb549aae950da537e9558e53fa65fba23d1be624a1e4e8d20c15027efbe41e03ca56f2b04fb0 + languageName: node + linkType: hard + +"@types/node-cron@npm:^3.0.9": + version: 3.0.9 + resolution: "@types/node-cron@npm:3.0.9" + checksum: 8335eb0a453b956cc2da5431269e4732e0063c6cca0763cf779c7c242d0dfe3eea1929951a0b11fb9e7a2eee838836ee8cda79e9d6098b1bee91d5a17dce1e73 + languageName: node + linkType: hard + +"@types/node@npm:^20.8.6": + version: 20.8.6 + resolution: "@types/node@npm:20.8.6" + dependencies: + undici-types: ~5.25.1 + checksum: ccfb7ac482c5a96edeb239893c5c099f5257fcc2ed9ae62fefdfbc782b79e16dbc2af9a85b379665237bf759904b44ca2be68e75d239e0297882aad42f61905c + languageName: node + linkType: hard + +"@types/semver@npm:^7.5.0": + version: 7.5.4 + resolution: "@types/semver@npm:7.5.4" + checksum: 120c0189f6fec5f2d12d0d71ac8a4cfa952dc17fa3d842e8afddb82bba8828a4052f8799c1653e2b47ae1977435f38e8985658fde971905ce5afb8e23ee97ecf + languageName: node + linkType: hard + +"@types/triple-beam@npm:^1.3.2": + version: 1.3.4 + resolution: "@types/triple-beam@npm:1.3.4" + checksum: 869641358164a9b87aec710e046c11a65803b7dc3545f33c3365df9590d1059c70592bb35a7fc4099fa746f112ab5a207881ba9fb570e9b1dea4ffd89761d804 + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^6.7.5": + version: 6.8.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.8.0" + dependencies: + "@eslint-community/regexpp": ^4.5.1 + "@typescript-eslint/scope-manager": 6.8.0 + "@typescript-eslint/type-utils": 6.8.0 + "@typescript-eslint/utils": 6.8.0 + "@typescript-eslint/visitor-keys": 6.8.0 + debug: ^4.3.4 + graphemer: ^1.4.0 + ignore: ^5.2.4 + natural-compare: ^1.4.0 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependencies: + "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: c36ccf606ebcaff8263c4ffa3b4cda58c6f93474b9eea9906e51be2fef8596977a245cc13770b21c6bfd38ccf45a3cf3613d5f4499429f62ec80afe15ae345bd + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^6.7.5": + version: 6.8.0 + resolution: "@typescript-eslint/parser@npm:6.8.0" + dependencies: + "@typescript-eslint/scope-manager": 6.8.0 + "@typescript-eslint/types": 6.8.0 + "@typescript-eslint/typescript-estree": 6.8.0 + "@typescript-eslint/visitor-keys": 6.8.0 + debug: ^4.3.4 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10d7a3ae383fee5a5cba9541c72e23d6ab01cca6b414a62b44dacb5ebc15c80b80aa6c105b6469d3795f2f8514ae2499c069cd2d9dcac61f3db9ef6c7a75e080 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:6.8.0": + version: 6.8.0 + resolution: "@typescript-eslint/scope-manager@npm:6.8.0" + dependencies: + "@typescript-eslint/types": 6.8.0 + "@typescript-eslint/visitor-keys": 6.8.0 + checksum: b6cf2803531d1c14b56c30fd3cd807b80e17fe48d0da8e5aa9ae50915407ed732c7e2a7ac8030b7cf8ed07b8e481a1138d76bf05b727837a0e016280c2f6873b + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:6.8.0": + version: 6.8.0 + resolution: "@typescript-eslint/type-utils@npm:6.8.0" + dependencies: + "@typescript-eslint/typescript-estree": 6.8.0 + "@typescript-eslint/utils": 6.8.0 + debug: ^4.3.4 + ts-api-utils: ^1.0.1 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 9b7d56904dc1a5719ef79eb1b7989d6fad10c71fb07ec3e66cf69b8c8dc5383d644ab122d4701bc4960fb7c99cc08aee4e645db3e4675d488d5779197e15dfda + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:6.8.0": + version: 6.8.0 + resolution: "@typescript-eslint/types@npm:6.8.0" + checksum: 1fcd85f6d575116d51c6ee757ed37610ae5e7e4296a29f93c9c6949f6cd16d24550eb7fc5bae7a43119cc08e13836f69a7ae7c54ebba6c95aef96b34d3bfb7f7 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:6.8.0": + version: 6.8.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.8.0" + dependencies: + "@typescript-eslint/types": 6.8.0 + "@typescript-eslint/visitor-keys": 6.8.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependenciesMeta: + typescript: + optional: true + checksum: 388db7f33ef1bc0e7b960c0bce9c744c2e32c66c7ab8dfae73d8533958202ad6f31663b0010f79c45b5ff93159c67f45b00693d73b9da2472b17156dfd26b4a8 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:6.8.0": + version: 6.8.0 + resolution: "@typescript-eslint/utils@npm:6.8.0" + dependencies: + "@eslint-community/eslint-utils": ^4.4.0 + "@types/json-schema": ^7.0.12 + "@types/semver": ^7.5.0 + "@typescript-eslint/scope-manager": 6.8.0 + "@typescript-eslint/types": 6.8.0 + "@typescript-eslint/typescript-estree": 6.8.0 + semver: ^7.5.4 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 6d9f90db504502a9aa10e834830c3ffa25483757414670acc6141a3ebef9171a57688a3a179febf35a0e1e0b322f37228d9537bf1b279f1af7fc97888b873bc3 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:6.8.0": + version: 6.8.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.8.0" + dependencies: + "@typescript-eslint/types": 6.8.0 + eslint-visitor-keys: ^3.4.1 + checksum: 710d9067b85d7715a400ae625c083c41733abb891d7b35108de083913980f9642e79d27689599fa39915f0fecae16dbfc30367007fccc838ccd917943660de22 + languageName: node + linkType: hard + +"abbrev@npm:1, abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 + languageName: node + linkType: hard + +"abitype@npm:0.9.8": + version: 0.9.8 + resolution: "abitype@npm:0.9.8" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: d7d887f29d6821e3f7a400de9620511b80ead3f85c5c87308aaec97965d3493e6687ed816e88722b4f512249bd66dee9e69231b49af0e1db8f69400a62c87cf6 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.1.1": + version: 8.2.0 + resolution: "acorn-walk@npm:8.2.0" + checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 + languageName: node + linkType: hard + +"acorn@npm:^8.4.1, acorn@npm:^8.9.0": + version: 8.10.0 + resolution: "acorn@npm:8.10.0" + bin: + acorn: bin/acorn + checksum: 538ba38af0cc9e5ef983aee196c4b8b4d87c0c94532334fa7e065b2c8a1f85863467bb774231aae91613fcda5e68740c15d97b1967ae3394d20faddddd8af61d + languageName: node + linkType: hard + +"agent-base@npm:6, agent-base@npm:^6.0.2": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1": + version: 4.5.0 + resolution: "agentkeepalive@npm:4.5.0" + dependencies: + humanize-ms: ^1.2.1 + checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^3.0.0": + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" + dependencies: + delegates: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + languageName: node + linkType: hard + +"async@npm:^3.2.3": + version: 3.2.4 + resolution: "async@npm:3.2.4" + checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"axios@npm:^1.5.1": + version: 1.5.1 + resolution: "axios@npm:1.5.1" + dependencies: + follow-redirects: ^1.15.0 + form-data: ^4.0.0 + proxy-from-env: ^1.1.0 + checksum: 4444f06601f4ede154183767863d2b8e472b4a6bfc5253597ed6d21899887e1fd0ee2b3de792ac4f8459fe2e359d2aa07c216e45fd8b9e4e0688a6ebf48a5a8d + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.2, braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + languageName: node + linkType: hard + +"cacache@npm:^17.0.0": + version: 17.1.4 + resolution: "cacache@npm:17.1.4" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^7.7.1 + minipass: ^7.0.3 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: b7751df756656954a51201335addced8f63fc53266fa56392c9f5ae83c8d27debffb4458ac2d168a744a4517ec3f2163af05c20097f93d17bdc2dc8a385e14a6 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"chokidar@npm:^3.5.2": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.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 + dependenciesMeta: + fsevents: + optional: true + checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.3": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:^1.0.0, color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-string@npm:^1.6.0": + version: 1.9.1 + resolution: "color-string@npm:1.9.1" + dependencies: + color-name: ^1.0.0 + simple-swizzle: ^0.2.2 + checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 + languageName: node + linkType: hard + +"color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b + languageName: node + linkType: hard + +"color@npm:^3.1.3": + version: 3.2.1 + resolution: "color@npm:3.2.1" + dependencies: + color-convert: ^1.9.3 + color-string: ^1.6.0 + checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 + languageName: node + linkType: hard + +"colorspace@npm:1.1.x": + version: 1.1.4 + resolution: "colorspace@npm:1.1.4" + dependencies: + color: ^3.1.3 + text-hex: 1.0.x + checksum: bb3934ef3c417e961e6d03d7ca60ea6e175947029bfadfcdb65109b01881a1c0ecf9c2b0b59abcd0ee4a0d7c1eae93beed01b0e65848936472270a0b341ebce8 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: ^2.1.1 + checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd + languageName: node + linkType: hard + +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: ^4.0.0 + checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: ^2.0.2 + checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce + languageName: node + linkType: hard + +"dotenv@npm:^16.3.1": + version: 16.3.1 + resolution: "dotenv@npm:16.3.1" + checksum: 15d75e7279018f4bafd0ee9706593dd14455ddb71b3bcba9c52574460b7ccaf67d5cf8b2c08a5af1a9da6db36c956a04a1192b101ee102a3e0cf8817bbcf3dfd + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"enabled@npm:2.0.x": + version: 2.0.0 + resolution: "enabled@npm:2.0.0" + checksum: 9d256d89f4e8a46ff988c6a79b22fa814b4ffd82826c4fdacd9b42e9b9465709d3b748866d0ab4d442dfc6002d81de7f7b384146ccd1681f6a7f868d2acca063 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^9.0.0": + version: 9.0.0 + resolution: "eslint-config-prettier@npm:9.0.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 362e991b6cb343f79362bada2d97c202e5303e6865888918a7445c555fb75e4c078b01278e90be98aa98ae22f8597d8e93d48314bec6824f540f7efcab3ce451 + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 + languageName: node + linkType: hard + +"eslint@npm:^8.51.0": + version: 8.51.0 + resolution: "eslint@npm:8.51.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.2 + "@eslint/js": 8.51.0 + "@humanwhocodes/config-array": ^0.11.11 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + ajv: ^6.12.4 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 + esquery: ^1.4.2 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + graphemer: ^1.4.0 + ignore: ^5.2.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + is-path-inside: ^3.0.3 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.3 + strip-ansi: ^6.0.1 + text-table: ^0.2.0 + bin: + eslint: bin/eslint.js + checksum: 214fa5d1fcb67af1b8992ce9584ccd85e1aa7a482f8b8ea5b96edc28fa838a18a3b69456db45fc1ed3ef95f1e9efa9714f737292dc681e572d471d02fda9649c + languageName: node + linkType: hard + +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 + languageName: node + linkType: hard + +"esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" + dependencies: + estraverse: ^5.1.0 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: ^5.2.0 + checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9": + version: 3.3.1 + resolution: "fast-glob@npm:3.3.1" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.4 + checksum: b6f3add6403e02cf3a798bfbb1183d0f6da2afd368f27456010c0bc1f9640aea308243d4cb2c0ab142f618276e65ecb8be1661d7c62a7b4e5ba774b9ce5432e5 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.15.0 + resolution: "fastq@npm:1.15.0" + dependencies: + reusify: ^1.0.4 + checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a + languageName: node + linkType: hard + +"fecha@npm:^4.2.0": + version: 4.2.3 + resolution: "fecha@npm:4.2.3" + checksum: f94e2fb3acf5a7754165d04549460d3ae6c34830394d20c552197e3e000035d69732d74af04b9bed3283bf29fe2a9ebdcc0085e640b0be3cc3658b9726265e31 + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: ^3.0.4 + checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.1.1 + resolution: "flat-cache@npm:3.1.1" + dependencies: + flatted: ^3.2.9 + keyv: ^4.5.3 + rimraf: ^3.0.2 + checksum: 4958cfe0f46acf84953d4e16676ef5f0d38eab3a92d532a1e8d5f88f11eea8b36d5d598070ff2aeae15f1fde18f8d7d089eefaf9db10b5a587cc1c9072325c7a + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.2.9 + resolution: "flatted@npm:3.2.9" + checksum: f14167fbe26a9d20f6fca8d998e8f1f41df72c8e81f9f2c9d61ed2bea058248f5e1cbd05e7f88c0e5087a6a0b822a1e5e2b446e879f3cfbe0b07ba2d7f80b026 + languageName: node + linkType: hard + +"fn.name@npm:1.x.x": + version: 1.1.0 + resolution: "fn.name@npm:1.1.0" + checksum: e357144f48cfc9a7f52a82bbc6c23df7c8de639fce049cac41d41d62cabb740cdb9f14eddc6485e29c933104455bdd7a69bb14a9012cef9cd4fa252a4d0cf293 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.0": + version: 1.15.3 + resolution: "follow-redirects@npm:1.15.3" + peerDependenciesMeta: + debug: + optional: true + checksum: 584da22ec5420c837bd096559ebfb8fe69d82512d5585004e36a3b4a6ef6d5905780e0c74508c7b72f907d1fa2b7bd339e613859e9c304d0dc96af2027fd0231 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@~2.3.2#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + dependencies: + aproba: ^1.0.3 || ^2.0.0 + color-support: ^1.1.3 + console-control-strings: ^1.1.0 + has-unicode: ^2.0.1 + signal-exit: ^3.0.7 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + wide-align: ^1.1.5 + checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + +"glob@npm:^10.2.2": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.5 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + path-scurry: ^1.10.1 + bin: + glob: dist/esm/bin.mjs + checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.4": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + 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 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"globals@npm:^13.19.0": + version: 13.23.0 + resolution: "globals@npm:13.23.0" + dependencies: + type-fest: ^0.20.2 + checksum: 194c97cf8d1ef6ba59417234c2386549c4103b6e5f24b1ff1952de61a4753e5d2069435ba629de711a6480b1b1d114a98e2ab27f85e966d5a10c319c3bbd3dc3 + languageName: node + linkType: hard + +"globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: ^2.1.0 + dir-glob: ^3.0.1 + fast-glob: ^3.2.9 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^3.0.0 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: ^2.0.0 + checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"ignore-by-default@npm:^1.0.1": + version: 1.0.1 + resolution: "ignore-by-default@npm:1.0.1" + checksum: 441509147b3615e0365e407a3c18e189f78c07af08564176c680be1fabc94b6c789cad1342ad887175d4ecd5225de86f73d376cec8e06b42fd9b429505ffcf8a + languageName: node + linkType: hard + +"ignore@npm:^5.2.0, ignore@npm:^5.2.4": + version: 5.2.4 + resolution: "ignore@npm:5.2.4" + checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:^2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.3.1": + version: 0.3.2 + resolution: "is-arrayish@npm:0.3.2" + checksum: 977e64f54d91c8f169b59afcd80ff19227e9f5c791fa28fa2e5bce355cbaf6c2c356711b734656e80c9dd4a854dd7efcf7894402f1031dfc5de5d620775b4d5f + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: ^2.0.0 + checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isows@npm:1.0.3": + version: 1.0.3 + resolution: "isows@npm:1.0.3" + peerDependencies: + ws: "*" + checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: 3.0.1 + checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 + languageName: node + linkType: hard + +"kuler@npm:^2.0.0": + version: 2.0.0 + resolution: "kuler@npm:2.0.0" + checksum: 9e10b5a1659f9ed8761d38df3c35effabffbd19fc6107324095238e4ef0ff044392cae9ac64a1c2dda26e532426485342226b93806bd97504b174b0dcf04ed81 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 + languageName: node + linkType: hard + +"logform@npm:^2.3.2, logform@npm:^2.4.0": + version: 2.6.0 + resolution: "logform@npm:2.6.0" + dependencies: + "@colors/colors": 1.6.0 + "@types/triple-beam": ^1.3.2 + fecha: ^4.2.0 + ms: ^2.1.1 + safe-stable-stringify: ^2.3.1 + triple-beam: ^1.3.0 + checksum: b9ea74bb75e55379ad0eb3e4d65ae6e8d02bc45b431c218162878bf663997ab9258a73104c2b30e09dd2db288bb83c8bf8748e46689d75f5e7e34cf69378d6df + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.7.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 + languageName: node + linkType: hard + +"lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.0.1 + resolution: "lru-cache@npm:10.0.1" + checksum: 06f8d0e1ceabd76bb6f644a26dbb0b4c471b79c7b514c13c6856113879b3bf369eb7b497dad4ff2b7e2636db202412394865b33c332100876d838ad1372f0181 + languageName: node + linkType: hard + +"make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^11.0.3": + version: 11.1.1 + resolution: "make-fetch-happen@npm:11.1.1" + dependencies: + agentkeepalive: ^4.2.1 + cacache: ^17.0.0 + http-cache-semantics: ^4.1.1 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^7.7.1 + minipass: ^5.0.0 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + socks-proxy-agent: ^7.0.0 + ssri: ^10.0.0 + checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: ^3.0.2 + picomatch: ^2.3.1 + checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: ^3.0.0 + checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"ms@npm:^2.0.0, ms@npm:^2.1.1": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"node-cron@npm:^3.0.2": + version: 3.0.2 + resolution: "node-cron@npm:3.0.2" + dependencies: + uuid: 8.3.2 + checksum: dd21585c0d4069a0752022dad9b8380a4393c4783ec78355ffa99ff32b018c3743a35d4ebf9d7c7863949e94e302b440f58c884eb4960e71c7260d817e2d3f25 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 9.4.0 + resolution: "node-gyp@npm:9.4.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^11.0.3 + nopt: ^6.0.0 + npmlog: ^6.0.0 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^2.0.2 + bin: + node-gyp: bin/node-gyp.js + checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 + languageName: node + linkType: hard + +"nodemon@npm:^3.0.1": + version: 3.0.1 + resolution: "nodemon@npm:3.0.1" + dependencies: + chokidar: ^3.5.2 + debug: ^3.2.7 + ignore-by-default: ^1.0.1 + minimatch: ^3.1.2 + pstree.remy: ^1.1.8 + semver: ^7.5.3 + simple-update-notifier: ^2.0.0 + supports-color: ^5.5.0 + touch: ^3.1.0 + undefsafe: ^2.0.5 + bin: + nodemon: bin/nodemon.js + checksum: 6a5d81855760d6617049eccce10ccf02bddb482dab13ceea5280ae595ec7004eee13e7b934368e3f46c37fe4d970342a8c38c99cae7e93e4d7a3ed1c1ecb6acf + languageName: node + linkType: hard + +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: ^1.0.0 + bin: + nopt: bin/nopt.js + checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac + languageName: node + linkType: hard + +"nopt@npm:~1.0.10": + version: 1.0.10 + resolution: "nopt@npm:1.0.10" + dependencies: + abbrev: 1 + bin: + nopt: ./bin/nopt.js + checksum: f62575aceaa3be43f365bf37a596b89bbac2e796b001b6d2e2a85c2140a4e378ff919e2753ccba959c4fd344776fc88c29b393bc167fa939fb1513f126f4cd45 + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"npmlog@npm:^6.0.0": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: ^3.0.0 + console-control-strings: ^1.1.0 + gauge: ^4.0.3 + set-blocking: ^2.0.0 + checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"one-time@npm:^1.0.0": + version: 1.0.0 + resolution: "one-time@npm:1.0.0" + dependencies: + fn.name: 1.x.x + checksum: fd008d7e992bdec1c67f53a2f9b46381ee12a9b8c309f88b21f0223546003fb47e8ad7c1fd5843751920a8d276c63bd4b45670ef80c61fb3e07dbccc962b5c7d + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.3 + resolution: "optionator@npm:0.9.3" + dependencies: + "@aashutoshrathi/word-wrap": ^1.2.3 + deep-is: ^0.1.3 + fast-levenshtein: ^2.0.6 + levn: ^0.4.1 + prelude-ls: ^1.2.1 + type-check: ^0.4.0 + checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: ^3.0.0 + checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: ^9.1.1 || ^10.0.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a + languageName: node + linkType: hard + +"prettier@npm:^3.0.3": + version: 3.0.3 + resolution: "prettier@npm:3.0.3" + bin: + prettier: bin/prettier.cjs + checksum: e10b9af02b281f6c617362ebd2571b1d7fc9fb8a3bd17e371754428cda992e5e8d8b7a046e8f7d3e2da1dcd21aa001e2e3c797402ebb6111b5cd19609dd228e0 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 + languageName: node + linkType: hard + +"pstree.remy@npm:^1.1.8": + version: 1.1.8 + resolution: "pstree.remy@npm:1.1.8" + checksum: 5cb53698d6bb34dfb278c8a26957964aecfff3e161af5fbf7cee00bbe9d8547c7aced4bd9cb193bce15fb56e9e4220fc02a5bf9c14345ffb13a36b858701ec2d + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.0 + resolution: "punycode@npm:2.3.0" + checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: ^2.2.1 + checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 + languageName: node + linkType: hard + +"reporter@workspace:.": + version: 0.0.0-use.local + resolution: "reporter@workspace:." + dependencies: + "@types/node": ^20.8.6 + "@types/node-cron": ^3.0.9 + "@typescript-eslint/eslint-plugin": ^6.7.5 + "@typescript-eslint/parser": ^6.7.5 + axios: ^1.5.1 + dotenv: ^16.3.1 + eslint: ^8.51.0 + eslint-config-prettier: ^9.0.0 + node-cron: ^3.0.2 + nodemon: ^3.0.1 + prettier: ^3.0.3 + ts-node: ^10.9.1 + typescript: ^5.2.2 + viem: ^1.16.5 + winston: ^3.11.0 + languageName: unknown + linkType: soft + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safe-stable-stringify@npm:^2.3.1": + version: 2.4.3 + resolution: "safe-stable-stringify@npm:2.4.3" + checksum: 3aeb64449706ee1f5ad2459fc99648b131d48e7a1fbb608d7c628020177512dc9d94108a5cb61bbc953985d313d0afea6566d243237743e02870490afef04b43 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + +"simple-swizzle@npm:^0.2.2": + version: 0.2.2 + resolution: "simple-swizzle@npm:0.2.2" + dependencies: + is-arrayish: ^0.3.1 + checksum: a7f3f2ab5c76c4472d5c578df892e857323e452d9f392e1b5cf74b74db66e6294a1e1b8b390b519fa1b96b5b613f2a37db6cffef52c3f1f8f3c5ea64eb2d54c0 + languageName: node + linkType: hard + +"simple-update-notifier@npm:^2.0.0": + version: 2.0.0 + resolution: "simple-update-notifier@npm:2.0.0" + dependencies: + semver: ^7.5.3 + checksum: 9ba00d38ce6a29682f64a46213834e4eb01634c2f52c813a9a7b8873ca49cdbb703696f3290f3b27dc067de6d9418b0b84bef22c3eb074acf352529b2d6c27fd + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "socks-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^6.0.2 + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 + languageName: node + linkType: hard + +"socks@npm:^2.6.2": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" + dependencies: + minipass: ^7.0.3 + checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 + languageName: node + linkType: hard + +"stack-trace@npm:0.0.x": + version: 0.0.10 + resolution: "stack-trace@npm:0.0.10" + checksum: 473036ad32f8c00e889613153d6454f9be0536d430eb2358ca51cad6b95cea08a3cc33cc0e34de66b0dad221582b08ed2e61ef8e13f4087ab690f388362d6610 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: ~5.2.0 + checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + +"supports-color@npm:^5.5.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.0 + resolution: "tar@npm:6.2.0" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c + languageName: node + linkType: hard + +"text-hex@npm:1.0.x": + version: 1.0.0 + resolution: "text-hex@npm:1.0.0" + checksum: 1138f68adc97bf4381a302a24e2352f04992b7b1316c5003767e9b0d3367ffd0dc73d65001ea02b07cd0ecc2a9d186de0cf02f3c2d880b8a522d4ccb9342244a + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"touch@npm:^3.1.0": + version: 3.1.0 + resolution: "touch@npm:3.1.0" + dependencies: + nopt: ~1.0.10 + bin: + nodetouch: ./bin/nodetouch.js + checksum: e0be589cb5b0e6dbfce6e7e077d4a0d5f0aba558ef769c6d9c33f635e00d73d5be49da6f8631db302ee073919d82b5b7f56da2987feb28765c95a7673af68647 + languageName: node + linkType: hard + +"triple-beam@npm:^1.3.0": + version: 1.4.1 + resolution: "triple-beam@npm:1.4.1" + checksum: 2e881a3e8e076b6f2b85b9ec9dd4a900d3f5016e6d21183ed98e78f9abcc0149e7d54d79a3f432b23afde46b0885bdcdcbff789f39bc75de796316961ec07f61 + languageName: node + linkType: hard + +"ts-api-utils@npm:^1.0.1": + version: 1.0.3 + resolution: "ts-api-utils@npm:1.0.3" + peerDependencies: + typescript: ">=4.2.0" + checksum: 441cc4489d65fd515ae6b0f4eb8690057add6f3b6a63a36073753547fb6ce0c9ea0e0530220a0b282b0eec535f52c4dfc315d35f8a4c9a91c0def0707a714ca6 + languageName: node + linkType: hard + +"ts-node@npm:^10.9.1": + version: 10.9.1 + resolution: "ts-node@npm:10.9.1" + dependencies: + "@cspotcode/source-map-support": ^0.8.0 + "@tsconfig/node10": ^1.0.7 + "@tsconfig/node12": ^1.0.7 + "@tsconfig/node14": ^1.0.0 + "@tsconfig/node16": ^1.0.2 + acorn: ^8.4.1 + acorn-walk: ^8.1.1 + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + v8-compile-cache-lib: ^3.0.1 + yn: 3.1.1 + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: ^1.2.1 + checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 + languageName: node + linkType: hard + +"typescript@npm:^5.2.2": + version: 5.2.2 + resolution: "typescript@npm:5.2.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 7912821dac4d962d315c36800fe387cdc0a6298dba7ec171b350b4a6e988b51d7b8f051317786db1094bd7431d526b648aba7da8236607febb26cf5b871d2d3c + languageName: node + linkType: hard + +"typescript@patch:typescript@^5.2.2#~builtin": + version: 5.2.2 + resolution: "typescript@patch:typescript@npm%3A5.2.2#~builtin::version=5.2.2&hash=7ad353" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 07106822b4305de3f22835cbba949a2b35451cad50888759b6818421290ff95d522b38ef7919e70fb381c5fe9c1c643d7dea22c8b31652a717ddbd57b7f4d554 + languageName: node + linkType: hard + +"undefsafe@npm:^2.0.5": + version: 2.0.5 + resolution: "undefsafe@npm:2.0.5" + checksum: f42ab3b5770fedd4ada175fc1b2eb775b78f609156f7c389106aafd231bfc210813ee49f54483d7191d7b76e483bc7f537b5d92d19ded27156baf57592eb02cc + languageName: node + linkType: hard + +"undici-types@npm:~5.25.1": + version: 5.25.3 + resolution: "undici-types@npm:5.25.3" + checksum: ec9d2cc36520cbd9fbe3b3b6c682a87fe5be214699e1f57d1e3d9a2cb5be422e62735f06e0067dc325fd3dd7404c697e4d479f9147dc8a804e049e29f357f2ff + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"uuid@npm:8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 + languageName: node + linkType: hard + +"viem@npm:^1.16.5": + version: 1.16.6 + resolution: "viem@npm:1.16.6" + dependencies: + "@adraffy/ens-normalize": 1.9.4 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@scure/bip32": 1.3.2 + "@scure/bip39": 1.2.1 + abitype: 0.9.8 + isows: 1.0.3 + ws: 8.13.0 + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 2f116cad184cfc7a9584073451549edfb23c3847b1784f092b80a279b848fe011a054bc4141c923b5bcce1d8493db98284db65416ce72e8ba522225d02786a9a + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: ^1.0.2 || 2 || 3 || 4 + checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 + languageName: node + linkType: hard + +"winston-transport@npm:^4.5.0": + version: 4.6.0 + resolution: "winston-transport@npm:4.6.0" + dependencies: + logform: ^2.3.2 + readable-stream: ^3.6.0 + triple-beam: ^1.3.0 + checksum: 19f06ebdbb57cb14cdd48a23145d418d3bbe538851053303f84f04a8a849bb530b78b1495a175059c1299f92945dc61d5421c4914fee32d9a41bc397d84f26d7 + languageName: node + linkType: hard + +"winston@npm:^3.11.0": + version: 3.11.0 + resolution: "winston@npm:3.11.0" + dependencies: + "@colors/colors": ^1.6.0 + "@dabh/diagnostics": ^2.0.2 + async: ^3.2.3 + is-stream: ^2.0.0 + logform: ^2.4.0 + one-time: ^1.0.0 + readable-stream: ^3.4.0 + safe-stable-stringify: ^2.3.1 + stack-trace: 0.0.x + triple-beam: ^1.3.0 + winston-transport: ^4.5.0 + checksum: ca4454070f7a71b19f53c8c1765c59a013dab220edb49161b2e81917751d3e9edc3382430e4fb050feda04fb8463290ecab7cbc9240ec8d3d3b32a121849bbb0 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"ws@npm:8.13.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard From 55d965e7acd33a30b43393eccc0b90e02b8b354c Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Sat, 21 Oct 2023 15:54:28 +0800 Subject: [PATCH 05/81] WIP: add Multiclient class --- packages/reporter/.env.example | 7 ++-- packages/reporter/src/BlockListener.ts | 21 +++++----- packages/reporter/src/MultiClient.ts | 39 +++++++++++++++++++ .../reporter/src/controller/AMBController.ts | 36 +++++++++-------- .../src/controller/SygmaController.ts | 31 ++++++++------- .../src/controller/TelepathyController.ts | 36 +++++++++-------- packages/reporter/src/index.ts | 39 ++++++++++++------- 7 files changed, 139 insertions(+), 70 deletions(-) create mode 100644 packages/reporter/src/MultiClient.ts diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index d277c856..d468c52e 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -1,17 +1,18 @@ PRIVATE_KEY= -SOURCE_RPC_URL= -DEST_RPC_URL=https://rpc.gnosischain.com +GOERLI_RPC_URL= +GNOSIS_RPC_URL= SOURCE_CHAIN=goerli DEST_CHAIN=gnosis AMB_CONTROLLER=false +GAS=30000 SYGMA_CONTROLLER=false SYGMA_FEE_DATA=0x -TELEPATHY_CONTROLLER=true +TELEPATHY_CONTROLLER=false TELEPATHY_PROOF_API_URL=https://api.telepathy.xyz/api/hashi/ GOERLI_BLOCKTIME=12 diff --git a/packages/reporter/src/BlockListener.ts b/packages/reporter/src/BlockListener.ts index ff1a7ef5..1ee4545b 100644 --- a/packages/reporter/src/BlockListener.ts +++ b/packages/reporter/src/BlockListener.ts @@ -1,17 +1,20 @@ -import { createPublicClient, http, createWalletClient, PublicClient, Chain } from "viem" +import { createPublicClient, http, createWalletClient, PublicClient, Chain, publicActions } from "viem" import { mainnet, goerli, gnosis } from "viem/chains" +import Multiclient from "./MultiClient" import winston from "winston" class BlocksListener { controllers: any[] logger: winston.Logger timeFetchBlocksMs: number lastProcessedBlock: bigint = 0n + multiclient: Multiclient _interval: ReturnType | undefined // NodeJs.Timeout - constructor(controllers: any[], timeFetchBlocksMs: number, logger: winston.Logger) { + constructor(controllers: any[], timeFetchBlocksMs: number, logger: winston.Logger, multiclient: Multiclient) { this.controllers = controllers this.timeFetchBlocksMs = timeFetchBlocksMs this.logger = logger + this.multiclient = multiclient } start() { @@ -29,15 +32,14 @@ class BlocksListener { async _fetchBlocks() { try { this.logger.info("Start to fetch blocks") - const publicClient = createPublicClient({ - chain: - process.env.SOURCE_CHAIN === "goerli" ? goerli : process.env.SOURCE_CHAIN === "mainnet" ? mainnet : undefined, - transport: http(process.env.SOURCE_RPC_URL), - }) - const currentBlockNumber = await publicClient.getBlockNumber() + + const client = this.multiclient + .getClientByChain(process.env.SOURCE_CHAIN === "goerli" ? goerli : mainnet) + .extend(publicActions) + const currentBlockNumber = await client.getBlockNumber() this.logger.info(`Current Block Number: ${currentBlockNumber} , on source chain: ${process.env.SOURCE_CHAIN}`) if (this.lastProcessedBlock !== currentBlockNumber) { - this.lastProcessedBlock = await publicClient.getBlockNumber() + this.lastProcessedBlock = await client.getBlockNumber() const queryBlockLength = 100n // the number of blocks to query const blockBuffer = 10n // put 10 blocks before the current block in case the node provider don't sync up at the head @@ -46,6 +48,7 @@ class BlocksListener { const blocks = await Promise.all( Array.from({ length: Number(queryBlockLength + 1n) }, (value, index) => startBlock + BigInt(index)), ) + console.log("blocks ", blocks) this.logger.info(`Fetching block from ${startBlock} to ${endBlock}`) await Promise.all(this.controllers.map((_controller: any) => _controller.onBlocks(blocks))) diff --git a/packages/reporter/src/MultiClient.ts b/packages/reporter/src/MultiClient.ts new file mode 100644 index 00000000..79669af1 --- /dev/null +++ b/packages/reporter/src/MultiClient.ts @@ -0,0 +1,39 @@ +import { createWalletClient, http, Chain, Client } from "viem" +import { privateKeyToAccount } from "viem/accounts" + +type ContructorConfigs = { + chains: Chain[] + privateKey: `0x${string}` + rpcUrls: { [chainName: string]: string } +} + +type GetClientsConfigs = { + chain?: Chain | undefined + privateKey: `0x${string}` + rpcUrl: string +} + +const getClient = ({ chain, privateKey, rpcUrl }: GetClientsConfigs) => + createWalletClient({ + account: privateKeyToAccount(privateKey), + chain: chain as Chain | undefined, + transport: http(rpcUrl), + }) + +class Multiclient { + private _clients: { [chainName: string]: Client } + + constructor({ chains, privateKey, rpcUrls }: ContructorConfigs) { + this._clients = chains.reduce((_acc: { [chainName: string]: any }, _chain: Chain) => { + const rpcUrl = rpcUrls[_chain.name] + _acc[_chain.name] = getClient({ chain: _chain, privateKey, rpcUrl }) + return _acc + }, {}) + } + + getClientByChain(_chain: Chain) { + return this._clients[_chain.name] + } +} + +export default Multiclient diff --git a/packages/reporter/src/controller/AMBController.ts b/packages/reporter/src/controller/AMBController.ts index b666f66a..522e5d2f 100644 --- a/packages/reporter/src/controller/AMBController.ts +++ b/packages/reporter/src/controller/AMBController.ts @@ -1,40 +1,44 @@ -var cron = require("node-cron") -import { createPublicClient, http, createWalletClient, PublicClient, Chain } from "viem" +import { publicActions, walletActions } from "viem" import { mainnet, goerli, gnosis } from "viem/chains" import { privateKeyToAccount } from "viem/accounts" import "dotenv/config" import contract_address from "../utils/address.json" import contractABI from "../ABIs/ambReporterContractABI.json" import winston from "winston" +import Multiclient from "../MultiClient" class AMBController { sourceChain: string destinationChain: string isEnabled: boolean = false logger: winston.Logger - constructor(sourceChain: string, destinationChain: string, isEnabled: boolean, logger: winston.Logger) { + multiClient: Multiclient + constructor( + sourceChain: string, + destinationChain: string, + isEnabled: boolean, + logger: winston.Logger, + multiClient: Multiclient, + ) { this.sourceChain = sourceChain this.destinationChain = destinationChain this.isEnabled = isEnabled this.logger = logger + this.multiClient = multiClient } - async onBlocks(blockNumbers: string[]) { + + async onBlocks(blockNumbers: bigint[]) { try { this.logger.info("AMB: Starting AMB Reporter") - const walletClient = createWalletClient({ - chain: this.sourceChain === "goerli" ? goerli : this.sourceChain === "mainnet" ? mainnet : undefined, - transport: http(process.env.SOURCE_RPC_URL), - }) - const publicClient = createPublicClient({ - chain: this.sourceChain === "goerli" ? goerli : this.sourceChain === "mainnet" ? mainnet : undefined, - transport: http(process.env.SOURCE_RPC_URL), - }) - const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) + const client = this.multiClient + .getClientByChain(this.sourceChain === "goerli" ? goerli : mainnet) + .extend(walletActions) + .extend(publicActions) const reporterAddr = this.getSourceReporterAddr() const adapterAddr = this.getDestAdapter() - - const { result, request } = await publicClient.simulateContract({ + const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) + const { result, request } = await client.simulateContract({ account, // calling from account address: reporterAddr as `0x${string}`, abi: contractABI, @@ -42,7 +46,7 @@ class AMBController { args: [blockNumbers, adapterAddr, process.env.GAS], }) - const txhash = await walletClient.writeContract(request) + const txhash = await client.writeContract(request) this.logger.info(`AMB: TxHash from AMB Controller: ${txhash}`) } catch (error) { this.logger.error(`AMB: Error from AMB Controller: ${error}`) diff --git a/packages/reporter/src/controller/SygmaController.ts b/packages/reporter/src/controller/SygmaController.ts index 7ed3ca10..b88c224c 100644 --- a/packages/reporter/src/controller/SygmaController.ts +++ b/packages/reporter/src/controller/SygmaController.ts @@ -1,42 +1,47 @@ -var cron = require("node-cron") -import { createPublicClient, http, createWalletClient, parseEther } from "viem" +import { parseEther, walletActions, publicActions } from "viem" import { mainnet, goerli, gnosis } from "viem/chains" import { privateKeyToAccount } from "viem/accounts" import "dotenv/config" import contract_address from "../utils/address.json" import contractABI from "../ABIs/SygmaReporterContractABI.json" import winston from "winston" +import Multiclient from "../MultiClient" class SygmaController { sourceChain: string destinationChain: string isEnabled: boolean = false logger: winston.Logger - constructor(sourceChain: string, destinationChain: string, isEnabled: boolean, logger: winston.Logger) { + multiClient: Multiclient + constructor( + sourceChain: string, + destinationChain: string, + isEnabled: boolean, + logger: winston.Logger, + multiClient: Multiclient, + ) { this.sourceChain = sourceChain this.destinationChain = destinationChain this.isEnabled = isEnabled this.logger = logger + this.multiClient = multiClient } async onBlocks(blockNumbers: string[]) { try { this.logger.info("Sygma: Starting Sygma Reporter") - const walletClient = createWalletClient({ - chain: this.sourceChain === "goerli" ? goerli : this.sourceChain === "mainnet" ? mainnet : undefined, - transport: http(process.env.SOURCE_RPC_URL), - }) - const publicClient = createPublicClient({ - chain: this.sourceChain === "goerli" ? goerli : this.sourceChain === "mainnet" ? mainnet : undefined, - transport: http(process.env.SOURCE_RPC_URL), - }) + const client = this.multiClient + .getClientByChain(this.sourceChain === "goerli" ? goerli : mainnet) + .extend(walletActions) + .extend(publicActions) + const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) const reporterAddr = this.getSourceReporterAddr() const adapterAddr = this.getDestAdapter() const destDomainId = this.getDomainID() - const { result, request } = await publicClient.simulateContract({ + const { result, request } = await client.simulateContract({ account, // calling from account address: reporterAddr as `0x${string}`, abi: contractABI, @@ -44,7 +49,7 @@ class SygmaController { args: [blockNumbers, adapterAddr, destDomainId, "0x"], value: parseEther("0.0001"), }) - const txhash = await walletClient.writeContract(request) + const txhash = await client.writeContract(request) this.logger.info(`Sygma: TxHash from Sygma Controller: ${txhash}`) } catch (error) { this.logger.error(`Sygma: Error from Sygma Controller: ${error}`) diff --git a/packages/reporter/src/controller/TelepathyController.ts b/packages/reporter/src/controller/TelepathyController.ts index 9ca87cb2..80379f78 100644 --- a/packages/reporter/src/controller/TelepathyController.ts +++ b/packages/reporter/src/controller/TelepathyController.ts @@ -1,43 +1,47 @@ import axios from "axios" -import { createPublicClient, http, createWalletClient, hexToNumber } from "viem" -import { gnosis } from "viem/chains" +import { hexToNumber, publicActions, walletActions } from "viem" +import { gnosis, mainnet } from "viem/chains" import { privateKeyToAccount } from "viem/accounts" import "dotenv/config" import contract_address from "../utils/address.json" import lightClientContractABI from "../ABIs/telepathyContractABI.json" import adapterContractABI from "../ABIs/telepathyAdapterABI.json" import winston from "winston" +import Multiclient from "../MultiClient" class TelepathyController { sourceChain: string destinationChain: string isEnabled: boolean = false logger: winston.Logger - constructor(sourceChain: string, destinationChain: string, isEnabled: boolean, logger: winston.Logger) { + multiClient: Multiclient + constructor( + sourceChain: string, + destinationChain: string, + isEnabled: boolean, + logger: winston.Logger, + multiClient: Multiclient, + ) { this.sourceChain = sourceChain this.destinationChain = destinationChain this.isEnabled = isEnabled this.logger = logger + this.multiClient = multiClient } - async onBlocks(blockNumbers: string[]) { try { // Telepathy on support light client on Gnosis at the moment - const walletClient = createWalletClient({ - chain: gnosis, - transport: http(process.env.DEST_RPC_URL), - }) - const publicClient = createPublicClient({ - chain: gnosis, - transport: http(process.env.DEST_RPC_URL), - }) + const client = this.multiClient + .getClientByChain(this.destinationChain === "gnosis" ? gnosis : mainnet) + .extend(publicActions) + .extend(walletActions) const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) const adapterAddr = contract_address.telepathy.gnosis_adapter const lightClientAddr = contract_address.telepathy.gnosis_light_client // Getting the latest block number from provider - const currentBlockNumber = await publicClient.getBlockNumber() + const currentBlockNumber = await client.getBlockNumber() // get contract events from latest block -500 : latest block const queryBlockLength = 1000n // the number of blocks to query @@ -45,7 +49,7 @@ class TelepathyController { const startBlock = currentBlockNumber - queryBlockLength - blockBuffer const endBlock = currentBlockNumber - blockBuffer this.logger.info(`Telepathy: Getting Contract Event from block ${startBlock} to block ${currentBlockNumber}`) - const logs = await publicClient.getContractEvents({ + const logs = await client.getContractEvents({ address: lightClientAddr as `0x${string}`, abi: lightClientContractABI, eventName: "HeadUpdate", @@ -67,7 +71,7 @@ class TelepathyController { this.logger.info(`Telepathy: Response from telepathy proof provider: ${response.data}`) const { chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof } = response.data.result this.logger.info(`Telepathy: Calling storeBlockHeader for block number ${blockNumber}`) - const { request, result } = await publicClient.simulateContract({ + const { request, result } = await client.simulateContract({ account, address: adapterAddr as `0x${string}`, abi: adapterContractABI, @@ -75,7 +79,7 @@ class TelepathyController { args: [chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof], }) - const txHash = await walletClient.writeContract(request) + const txHash = await client.writeContract(request) this.logger.info(`Telepathy: TxHash from Telepathy Controller: ${txHash} `) }) } catch (error) { diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 42d19f9b..8325968b 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -1,32 +1,45 @@ -// import logger from "winston" -import { createPublicClient, http, createWalletClient, PublicClient, Chain } from "viem" +import { gnosis, goerli, mainnet } from "viem/chains" +import Multiclient from "./MultiClient" import AMBController from "./controller/AMBController" import SygmaController from "./controller/SygmaController" import TelepathyController from "./controller/TelepathyController" import BlocksListener from "./BlockListener" import "dotenv/config" import winston from "winston" + function main() { + const goerliRPC = process.env.GOERLI_RPC_URL as string + const gnosisRPC = process.env.GNOSIS_RPC_URL as string + const sourceChain = process.env.SOURCE_CHAIN + const destChain = process.env.DEST_CHAIN + const privKey = process.env.PRIVATE_KEY as `0x${string}` + const isAMBEnabled = process.env.AMB_CONTROLLER === "true" + const isSygmaEnabled = process.env.SYGMA_CONTROLLER === "true" + const isTelepathyEnabled = process.env.TELEPATHY_CONTROLLER === "true" + const logger = winston.createLogger({ level: "info", format: winston.format.json(), transports: [new winston.transports.Console()], }) - const sourceChain = process.env.SOURCE_CHAIN - const destChain = process.env.DEST_CHAIN - const ambController = new AMBController(sourceChain!, destChain!, process.env.AMB_CONTROLLER === "true", logger) - const sygmaController = new SygmaController(sourceChain!, destChain!, process.env.SYGMA_CONTROLLER === "true", logger) - const telepathyController = new TelepathyController( - sourceChain!, - destChain!, - process.env.TELEPATHY_CONTROLLER === "true", - logger, - ) + const multiClient = new Multiclient({ + chains: [goerli, gnosis], + privateKey: privKey, + rpcUrls: { + goerli: goerliRPC, + gnosis: gnosisRPC, + }, + }) + + const ambController = new AMBController(sourceChain!, destChain!, isAMBEnabled, logger, multiClient) + const sygmaController = new SygmaController(sourceChain!, destChain!, isSygmaEnabled, logger, multiClient) + const telepathyController = new TelepathyController(sourceChain!, destChain!, isTelepathyEnabled, logger, multiClient) const blocksListener = new BlocksListener( [ambController, sygmaController, telepathyController].filter((controller) => controller.isEnabled == true), - 10 * 1000, + 5 * 60 * 1000, // every 5 minutes logger, + multiClient, ) blocksListener.start() } From 8e3656ebbeb3a0689f689db38e87e9361b654703 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Sun, 22 Oct 2023 11:13:44 +0800 Subject: [PATCH 06/81] feat: controller logic --- packages/reporter/src/BlockListener.ts | 18 +++++++++++------- packages/reporter/src/index.ts | 3 ++- packages/reporter/src/utils/address.json | 14 -------------- 3 files changed, 13 insertions(+), 22 deletions(-) diff --git a/packages/reporter/src/BlockListener.ts b/packages/reporter/src/BlockListener.ts index 1ee4545b..85299909 100644 --- a/packages/reporter/src/BlockListener.ts +++ b/packages/reporter/src/BlockListener.ts @@ -1,7 +1,7 @@ -import { createPublicClient, http, createWalletClient, PublicClient, Chain, publicActions } from "viem" +import { publicActions } from "viem" import { mainnet, goerli, gnosis } from "viem/chains" import Multiclient from "./MultiClient" -import winston from "winston" +import winston, { query } from "winston" class BlocksListener { controllers: any[] logger: winston.Logger @@ -41,14 +41,19 @@ class BlocksListener { if (this.lastProcessedBlock !== currentBlockNumber) { this.lastProcessedBlock = await client.getBlockNumber() - const queryBlockLength = 100n // the number of blocks to query + const queryBlockLength = 100n // the number of blocks to query, make sure it is less than 256 const blockBuffer = 10n // put 10 blocks before the current block in case the node provider don't sync up at the head - const startBlock = this.lastProcessedBlock - queryBlockLength - blockBuffer + if (queryBlockLength > 256n - blockBuffer) { + this.logger.error("Please choose a block length less than 256-buffer!") + } + const startBlock = this.lastProcessedBlock - queryBlockLength const endBlock = this.lastProcessedBlock - blockBuffer const blocks = await Promise.all( - Array.from({ length: Number(queryBlockLength + 1n) }, (value, index) => startBlock + BigInt(index)), + Array.from( + { length: Number(queryBlockLength - blockBuffer + 1n) }, + (value, index) => startBlock + BigInt(index), + ), ) - console.log("blocks ", blocks) this.logger.info(`Fetching block from ${startBlock} to ${endBlock}`) await Promise.all(this.controllers.map((_controller: any) => _controller.onBlocks(blocks))) @@ -60,7 +65,6 @@ class BlocksListener { // delay for 1000ms await new Promise((func) => setTimeout(func, 1000)) } catch (_err) { - // logger.error(_err) this.logger.error(`error from block listener ${_err}`) } } diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 8325968b..9072278d 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -16,6 +16,7 @@ function main() { const isAMBEnabled = process.env.AMB_CONTROLLER === "true" const isSygmaEnabled = process.env.SYGMA_CONTROLLER === "true" const isTelepathyEnabled = process.env.TELEPATHY_CONTROLLER === "true" + const timeFetchBlocksMs = 5 * 60 * 1000 const logger = winston.createLogger({ level: "info", @@ -37,7 +38,7 @@ function main() { const blocksListener = new BlocksListener( [ambController, sygmaController, telepathyController].filter((controller) => controller.isEnabled == true), - 5 * 60 * 1000, // every 5 minutes + timeFetchBlocksMs, // every 5 minutes logger, multiClient, ) diff --git a/packages/reporter/src/utils/address.json b/packages/reporter/src/utils/address.json index 1d1a9351..e9e16166 100644 --- a/packages/reporter/src/utils/address.json +++ b/packages/reporter/src/utils/address.json @@ -1,18 +1,4 @@ { - "ethereum": { - "ambReporter": "", - "sygmaReporter": "" - }, - "goerli": { - "ambReporter": "0xedc0b1d3de4496e0d917af42f29cb71eb2982319", - "sygmaReporter": "0x2f96d347c932ac73b56e9352ecc0707e25173d88" - }, - "gnosis": { - "ambAdapter": "0x01268DB05965CeAc2a89566c42CD550ED7eE5ECD", - "sygmaAdapter": "0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15", - "telepathyAdapter": "0x2f1E51a2763FB67fe09971Fd8d849716137A3357", - "telepathyLightClient": "0x34b5378DE786389a477b40dD710812c250185f83" - }, "amb": { "goerli_reporter": "0xedc0b1d3de4496e0d917af42f29cb71eb2982319", "ethereum_reporter": "", From 6f2f1e8c694b1cbdd73fa98e4f0a762a97e11ab3 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Sun, 22 Oct 2023 11:18:50 +0800 Subject: [PATCH 07/81] doc: update README.md --- packages/reporter/.env.example | 6 ------ packages/reporter/README.md | 16 +++++++++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index d468c52e..cd3b3ab9 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -15,9 +15,3 @@ SYGMA_FEE_DATA=0x TELEPATHY_CONTROLLER=false TELEPATHY_PROOF_API_URL=https://api.telepathy.xyz/api/hashi/ -GOERLI_BLOCKTIME=12 -ETHEREUM_BLOCKTIME=16 -GNOSIS_BLOCKTINE=5 -CHIADO_BLOCKTIME=5 - - diff --git a/packages/reporter/README.md b/packages/reporter/README.md index 4a378556..56b7d603 100644 --- a/packages/reporter/README.md +++ b/packages/reporter/README.md @@ -13,8 +13,14 @@ Script to call Header Reporter contracts of different oracle from source chain t Configure the mode you want to run by editing the variable in `.env` -1. `REPORTER` (true/false): to enable the reporter -2. `FREQUENCY` (cron job expression by default, seconds for telepathy reporterr): Define the frequency to run the - reporter script -3. `SOURCE_CHAIN` (string value of chain): Define the source chain to collect the block header from. `DEST_CHAIN` - (string value of chain): Define the destination chain to report the source chain's block header to. +1. `_CONTROLLER` (true/false): to enable the controller +2. `SOURCE_CHAIN` (string value of chain): Define the source chain to collect the block header from. +3. `DEST_CHAIN` (string value of chain): Define the destination chain to report the source chain's block header to. + +## Adding a new controller + +1. Add a new file under `/controller`, create the constructor and `onBlocks` function to call block header reporter + contract periodically. +2. Add the contract addresses under `utils/address.json`. +3. Add the new controller instant in `index.ts`. +4. Add the env variable in `.env.example`. From f802b1cd57853c60dad54c14f477b8756de35190 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Mon, 23 Oct 2023 19:20:49 +0800 Subject: [PATCH 08/81] fix: first review --- packages/reporter/nodemon.json | 10 +- packages/reporter/package-lock.json | 482 +- packages/reporter/package.json | 1 - .../src/ABIs/AMBReporterContractABI.json | 98 + packages/reporter/src/ABIs/PingPongABI.json | 41 - .../src/ABIs/SygmaReporterContractABI.json | 432 +- .../src/ABIs/TelepathyAdapterABI.json | 229 + .../src/ABIs/TelepathyContractABI.json | 497 +++ .../src/ABIs/WormholeReporterContractABI.json | 76 + .../src/ABIs/ambReporterContractABI.json | 98 - .../src/ABIs/telepathyAdapterABI.json | 229 - .../src/ABIs/telepathyContractABI.json | 497 --- .../src/ABIs/wormholeReporterContractABI.json | 76 - packages/reporter/src/BlockListener.ts | 69 +- packages/reporter/src/MultiClient.ts | 6 +- .../reporter/src/controller/AMBController.ts | 75 - .../src/controller/SygmaController.ts | 86 - .../src/controller/TelepathyController.ts | 91 - .../src/controllers/AMBReporterController.ts | 54 + .../controllers/SygmaReporterController.ts | 64 + .../TelepathyReporterController.ts | 90 + packages/reporter/src/index.ts | 57 +- packages/reporter/src/newIndex.ts | 34 - packages/reporter/src/utils/settings.json | 15 + packages/reporter/src/utils/type.ts | 25 + packages/reporter/tsconfig.json | 48 +- packages/reporter/yarn.lock | 3893 +++++------------ 27 files changed, 3000 insertions(+), 4373 deletions(-) create mode 100644 packages/reporter/src/ABIs/AMBReporterContractABI.json delete mode 100644 packages/reporter/src/ABIs/PingPongABI.json create mode 100644 packages/reporter/src/ABIs/TelepathyAdapterABI.json create mode 100644 packages/reporter/src/ABIs/TelepathyContractABI.json create mode 100644 packages/reporter/src/ABIs/WormholeReporterContractABI.json delete mode 100644 packages/reporter/src/ABIs/ambReporterContractABI.json delete mode 100644 packages/reporter/src/ABIs/telepathyAdapterABI.json delete mode 100644 packages/reporter/src/ABIs/telepathyContractABI.json delete mode 100644 packages/reporter/src/ABIs/wormholeReporterContractABI.json delete mode 100644 packages/reporter/src/controller/AMBController.ts delete mode 100644 packages/reporter/src/controller/SygmaController.ts delete mode 100644 packages/reporter/src/controller/TelepathyController.ts create mode 100644 packages/reporter/src/controllers/AMBReporterController.ts create mode 100644 packages/reporter/src/controllers/SygmaReporterController.ts create mode 100644 packages/reporter/src/controllers/TelepathyReporterController.ts delete mode 100644 packages/reporter/src/newIndex.ts create mode 100644 packages/reporter/src/utils/settings.json create mode 100644 packages/reporter/src/utils/type.ts diff --git a/packages/reporter/nodemon.json b/packages/reporter/nodemon.json index 84ddf673..58b690d4 100644 --- a/packages/reporter/nodemon.json +++ b/packages/reporter/nodemon.json @@ -1,6 +1,6 @@ { - "watch": ["src"], - "ext": "ts,json", - "ignore": ["src/**/*.spec.ts"], - "exec": "ts-node ./src/index.ts" - } \ No newline at end of file + "watch": ["src"], + "ext": "ts,json", + "ignore": ["src/**/*.spec.ts"], + "exec": "ts-node ./src/index.ts" +} diff --git a/packages/reporter/package-lock.json b/packages/reporter/package-lock.json index cd53e159..af58acd8 100644 --- a/packages/reporter/package-lock.json +++ b/packages/reporter/package-lock.json @@ -8,8 +8,8 @@ "dependencies": { "axios": "^1.5.1", "dotenv": "^16.3.1", - "node-cron": "^3.0.2", - "viem": "^1.16.5" + "viem": "^1.16.5", + "winston": "^3.11.0" }, "devDependencies": { "@types/node": "^20.8.6", @@ -36,6 +36,14 @@ "version": "1.9.4", "license": "MIT" }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "dev": true, @@ -47,6 +55,16 @@ "node": ">=12" } }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "dev": true, @@ -278,6 +296,11 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/triple-beam": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.4.tgz", + "integrity": "sha512-HlJjF3wxV4R2VQkFpKe0YqJLilYNgtRtsqqZtby7RkVsSs+i+vbyzjtUwpFEdUCKcrGzCiEJE7F/0mKjh0sunA==" + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.7.5", "dev": true, @@ -580,6 +603,11 @@ "node": ">=8" } }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, "node_modules/asynckit": { "version": "0.4.0", "license": "MIT" @@ -686,6 +714,15 @@ "fsevents": "~2.3.2" } }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "dev": true, @@ -699,9 +736,39 @@ }, "node_modules/color-name": { "version": "1.1.4", - "dev": true, "license": "MIT" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "license": "MIT", @@ -803,6 +870,11 @@ "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "dev": true, @@ -1007,6 +1079,11 @@ "reusify": "^1.0.4" } }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, "node_modules/file-entry-cache": { "version": "6.0.1", "dev": true, @@ -1062,6 +1139,11 @@ "dev": true, "license": "ISC" }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, "node_modules/follow-redirects": { "version": "1.15.3", "funding": [ @@ -1220,9 +1302,13 @@ }, "node_modules/inherits": { "version": "2.0.4", - "dev": true, "license": "ISC" }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/is-binary-path": { "version": "2.1.0", "dev": true, @@ -1269,6 +1355,17 @@ "node": ">=8" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isexe": { "version": "2.0.0", "dev": true, @@ -1321,6 +1418,11 @@ "json-buffer": "3.0.1" } }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, "node_modules/levn": { "version": "0.4.1", "dev": true, @@ -1352,6 +1454,22 @@ "dev": true, "license": "MIT" }, + "node_modules/logform": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", + "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "dev": true, @@ -1418,7 +1536,6 @@ }, "node_modules/ms": { "version": "2.1.2", - "dev": true, "license": "MIT" }, "node_modules/natural-compare": { @@ -1426,16 +1543,6 @@ "dev": true, "license": "MIT" }, - "node_modules/node-cron": { - "version": "3.0.2", - "license": "ISC", - "dependencies": { - "uuid": "8.3.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/nodemon": { "version": "3.0.1", "dev": true, @@ -1503,6 +1610,14 @@ "wrappy": "1" } }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, "node_modules/optionator": { "version": "0.9.3", "dev": true, @@ -1659,6 +1774,19 @@ ], "license": "MIT" }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "dev": true, @@ -1723,6 +1851,33 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" + } + }, "node_modules/semver": { "version": "7.5.4", "dev": true, @@ -1756,6 +1911,14 @@ "node": ">=8" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, "node_modules/simple-update-notifier": { "version": "2.0.0", "dev": true, @@ -1775,6 +1938,22 @@ "node": ">=8" } }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "engines": { + "node": "*" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "dev": true, @@ -1816,6 +1995,11 @@ "node": ">=4" } }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "node_modules/text-table": { "version": "0.2.0", "dev": true, @@ -1843,6 +2027,14 @@ "nodetouch": "bin/nodetouch.js" } }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/ts-api-utils": { "version": "1.0.3", "dev": true, @@ -1949,12 +2141,10 @@ "punycode": "^2.1.0" } }, - "node_modules/uuid": { - "version": "8.3.2", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", @@ -2003,6 +2193,40 @@ "node": ">= 8" } }, + "node_modules/winston": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", + "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.6.0.tgz", + "integrity": "sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "dev": true, @@ -2060,6 +2284,11 @@ "@adraffy/ens-normalize": { "version": "1.9.4" }, + "@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==" + }, "@cspotcode/source-map-support": { "version": "0.8.1", "dev": true, @@ -2067,6 +2296,16 @@ "@jridgewell/trace-mapping": "0.3.9" } }, + "@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, "@eslint-community/eslint-utils": { "version": "4.4.0", "dev": true, @@ -2216,6 +2455,11 @@ "version": "7.5.3", "dev": true }, + "@types/triple-beam": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.4.tgz", + "integrity": "sha512-HlJjF3wxV4R2VQkFpKe0YqJLilYNgtRtsqqZtby7RkVsSs+i+vbyzjtUwpFEdUCKcrGzCiEJE7F/0mKjh0sunA==" + }, "@typescript-eslint/eslint-plugin": { "version": "6.7.5", "dev": true, @@ -2362,6 +2606,11 @@ "version": "2.1.0", "dev": true }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, "asynckit": { "version": "0.4.0" }, @@ -2431,6 +2680,30 @@ "readdirp": "~3.6.0" } }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + } + } + }, "color-convert": { "version": "2.0.1", "dev": true, @@ -2439,8 +2712,25 @@ } }, "color-name": { + "version": "1.1.4" + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorspace": { "version": "1.1.4", - "dev": true + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "requires": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } }, "combined-stream": { "version": "1.0.8", @@ -2500,6 +2790,11 @@ "dotenv": { "version": "16.3.1" }, + "enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, "escape-string-regexp": { "version": "4.0.0", "dev": true @@ -2634,6 +2929,11 @@ "reusify": "^1.0.4" } }, + "fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, "file-entry-cache": { "version": "6.0.1", "dev": true, @@ -2669,6 +2969,11 @@ "version": "3.2.9", "dev": true }, + "fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, "follow-redirects": { "version": "1.15.3" }, @@ -2759,8 +3064,12 @@ } }, "inherits": { - "version": "2.0.4", - "dev": true + "version": "2.0.4" + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "is-binary-path": { "version": "2.1.0", @@ -2788,6 +3097,11 @@ "version": "3.0.3", "dev": true }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, "isexe": { "version": "2.0.0", "dev": true @@ -2822,6 +3136,11 @@ "json-buffer": "3.0.1" } }, + "kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, "levn": { "version": "0.4.1", "dev": true, @@ -2841,6 +3160,19 @@ "version": "4.6.2", "dev": true }, + "logform": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", + "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", + "requires": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + } + }, "lru-cache": { "version": "6.0.0", "dev": true, @@ -2881,19 +3213,12 @@ } }, "ms": { - "version": "2.1.2", - "dev": true + "version": "2.1.2" }, "natural-compare": { "version": "1.4.0", "dev": true }, - "node-cron": { - "version": "3.0.2", - "requires": { - "uuid": "8.3.2" - } - }, "nodemon": { "version": "3.0.1", "dev": true, @@ -2941,6 +3266,14 @@ "wrappy": "1" } }, + "one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "requires": { + "fn.name": "1.x.x" + } + }, "optionator": { "version": "0.9.3", "dev": true, @@ -3017,6 +3350,16 @@ "version": "1.2.3", "dev": true }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "readdirp": { "version": "3.6.0", "dev": true, @@ -3046,6 +3389,16 @@ "queue-microtask": "^1.2.2" } }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" + }, "semver": { "version": "7.5.4", "dev": true, @@ -3064,6 +3417,14 @@ "version": "3.0.0", "dev": true }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + } + }, "simple-update-notifier": { "version": "2.0.0", "dev": true, @@ -3075,6 +3436,19 @@ "version": "3.0.0", "dev": true }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, "strip-ansi": { "version": "6.0.1", "dev": true, @@ -3099,6 +3473,11 @@ } } }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "text-table": { "version": "0.2.0", "dev": true @@ -3117,6 +3496,11 @@ "nopt": "~1.0.10" } }, + "triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" + }, "ts-api-utils": { "version": "1.0.3", "dev": true, @@ -3173,8 +3557,10 @@ "punycode": "^2.1.0" } }, - "uuid": { - "version": "8.3.2" + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "v8-compile-cache-lib": { "version": "3.0.1", @@ -3200,6 +3586,34 @@ "isexe": "^2.0.0" } }, + "winston": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", + "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==", + "requires": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + } + }, + "winston-transport": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.6.0.tgz", + "integrity": "sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==", + "requires": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + } + }, "wrappy": { "version": "1.0.2", "dev": true diff --git a/packages/reporter/package.json b/packages/reporter/package.json index c223ddeb..9cd4848c 100644 --- a/packages/reporter/package.json +++ b/packages/reporter/package.json @@ -15,7 +15,6 @@ "dependencies": { "axios": "^1.5.1", "dotenv": "^16.3.1", - "node-cron": "^3.0.2", "viem": "^1.16.5", "winston": "^3.11.0" }, diff --git a/packages/reporter/src/ABIs/AMBReporterContractABI.json b/packages/reporter/src/ABIs/AMBReporterContractABI.json new file mode 100644 index 00000000..2601c7eb --- /dev/null +++ b/packages/reporter/src/ABIs/AMBReporterContractABI.json @@ -0,0 +1,98 @@ +[ + { + "inputs": [ + { + "internalType": "contract IAMB", + "name": "_amb", + "type": "address" + }, + { + "internalType": "contract HeaderStorage", + "name": "_headerStorage", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "emitter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "blockHeader", + "type": "bytes32" + } + ], + "name": "HeaderReported", + "type": "event" + }, + { + "inputs": [], + "name": "amb", + "outputs": [ + { + "internalType": "contract IAMB", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "headerStorage", + "outputs": [ + { + "internalType": "contract HeaderStorage", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "ambAdapter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "gas", + "type": "uint256" + } + ], + "name": "reportHeaders", + "outputs": [ + { + "internalType": "bytes32", + "name": "receipt", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/packages/reporter/src/ABIs/PingPongABI.json b/packages/reporter/src/ABIs/PingPongABI.json deleted file mode 100644 index ca7dfcd8..00000000 --- a/packages/reporter/src/ABIs/PingPongABI.json +++ /dev/null @@ -1,41 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "pong", - "type": "string" - } - ], - "name": "Pong", - "type": "event" - }, - { - "inputs": [], - "name": "count", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ping", - "outputs": [ - { - "internalType": "string", - "name": "pong", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/packages/reporter/src/ABIs/SygmaReporterContractABI.json b/packages/reporter/src/ABIs/SygmaReporterContractABI.json index 790e9b7f..b05640d1 100644 --- a/packages/reporter/src/ABIs/SygmaReporterContractABI.json +++ b/packages/reporter/src/ABIs/SygmaReporterContractABI.json @@ -1,217 +1,217 @@ [ - { - "inputs": [ - { - "internalType": "contract IBridge", - "name": "bridge", - "type": "address" - }, - { - "internalType": "contract HeaderStorage", - "name": "headerStorage", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "resourceID", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "defaultDestinationDomainID", - "type": "uint8" - }, - { - "internalType": "address", - "name": "defaultSygmaAdapter", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "emitter", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "blockHeader", - "type": "bytes32" - } - ], - "name": "HeaderReported", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "blockNumbers", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "feeData", - "type": "bytes" - } - ], - "name": "reportHeaders", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "blockNumbers", - "type": "uint256[]" - }, - { - "internalType": "address", - "name": "sygmaAdapter", - "type": "address" - }, - { - "internalType": "uint8", - "name": "destinationDomainID", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "feeData", - "type": "bytes" - } - ], - "name": "reportHeadersToDomain", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "_bridge", - "outputs": [ - { - "internalType": "contract IBridge", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_defaultDestinationDomainID", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_defaultSygmaAdapter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_headerStorage", - "outputs": [ - { - "internalType": "contract HeaderStorage", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_resourceID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "blockNumbers", - "type": "uint256[]" - }, - { - "internalType": "bytes32[]", - "name": "blockHeaders", - "type": "bytes32[]" - } - ], - "name": "prepareDepositData", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "input", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "position", - "type": "uint256" - } - ], - "name": "slice", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - } -] \ No newline at end of file + { + "inputs": [ + { + "internalType": "contract IBridge", + "name": "bridge", + "type": "address" + }, + { + "internalType": "contract HeaderStorage", + "name": "headerStorage", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "resourceID", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "defaultDestinationDomainID", + "type": "uint8" + }, + { + "internalType": "address", + "name": "defaultSygmaAdapter", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "emitter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "blockHeader", + "type": "bytes32" + } + ], + "name": "HeaderReported", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "feeData", + "type": "bytes" + } + ], + "name": "reportHeaders", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "sygmaAdapter", + "type": "address" + }, + { + "internalType": "uint8", + "name": "destinationDomainID", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "feeData", + "type": "bytes" + } + ], + "name": "reportHeadersToDomain", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "_bridge", + "outputs": [ + { + "internalType": "contract IBridge", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_defaultDestinationDomainID", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_defaultSygmaAdapter", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_headerStorage", + "outputs": [ + { + "internalType": "contract HeaderStorage", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_resourceID", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "blockHeaders", + "type": "bytes32[]" + } + ], + "name": "prepareDepositData", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "input", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "position", + "type": "uint256" + } + ], + "name": "slice", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + } +] diff --git a/packages/reporter/src/ABIs/TelepathyAdapterABI.json b/packages/reporter/src/ABIs/TelepathyAdapterABI.json new file mode 100644 index 00000000..805ab0d5 --- /dev/null +++ b/packages/reporter/src/ABIs/TelepathyAdapterABI.json @@ -0,0 +1,229 @@ +[ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "type": "address", + "name": "_telepathyRouter", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "BlockHeaderNotAvailable", + "inputs": [ + { + "type": "uint256", + "name": "slot", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ConflictingBlockHeader", + "inputs": [ + { + "type": "uint256", + "name": "blockNumber", + "internalType": "uint256" + }, + { + "type": "bytes32", + "name": "reportedBlockHash", + "internalType": "bytes32" + }, + { + "type": "bytes32", + "name": "storedBlockHash", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "InconsistentLightClient", + "inputs": [ + { + "type": "address", + "name": "lightClient", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "InvalidBlockHashProof", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidBlockHeaderLength", + "inputs": [ + { + "type": "uint256", + "name": "length", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "InvalidBlockHeaderRLP", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidBlockNumberProof", + "inputs": [] + }, + { + "type": "error", + "name": "NoLightClientOnChain", + "inputs": [ + { + "type": "uint32", + "name": "chainId", + "internalType": "uint32" + } + ] + }, + { + "type": "event", + "name": "HashStored", + "inputs": [ + { + "type": "uint256", + "name": "id", + "internalType": "uint256", + "indexed": true + }, + { + "type": "bytes32", + "name": "hashes", + "internalType": "bytes32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "bytes32", + "name": "hash", + "internalType": "bytes32" + } + ], + "name": "getHashFromOracle", + "inputs": [ + { + "type": "uint256", + "name": "domain", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "id", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "bytes32", + "name": "", + "internalType": "bytes32" + } + ], + "name": "hashes", + "inputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "proveAncestralBlockHashes", + "inputs": [ + { + "type": "uint256", + "name": "chainId", + "internalType": "uint256" + }, + { + "type": "bytes[]", + "name": "blockHeaders", + "internalType": "bytes[]" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "storeBlockHeader", + "inputs": [ + { + "type": "uint32", + "name": "_chainId", + "internalType": "uint32" + }, + { + "type": "uint64", + "name": "_slot", + "internalType": "uint64" + }, + { + "type": "uint256", + "name": "_blockNumber", + "internalType": "uint256" + }, + { + "type": "bytes32[]", + "name": "_blockNumberProof", + "internalType": "bytes32[]" + }, + { + "type": "bytes32", + "name": "_blockHash", + "internalType": "bytes32" + }, + { + "type": "bytes32[]", + "name": "_blockHashProof", + "internalType": "bytes32[]" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], + "name": "telepathyRouter", + "inputs": [] + } +] diff --git a/packages/reporter/src/ABIs/TelepathyContractABI.json b/packages/reporter/src/ABIs/TelepathyContractABI.json new file mode 100644 index 00000000..082fc596 --- /dev/null +++ b/packages/reporter/src/ABIs/TelepathyContractABI.json @@ -0,0 +1,497 @@ +[ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "genesisValidatorsRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "genesisTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "secondsPerSlot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slotsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "syncCommitteePeriod", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "syncCommitteePoseidon", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "sourceChainId", + "type": "uint32" + }, + { + "internalType": "uint16", + "name": "finalityThreshold", + "type": "uint16" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "slot", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "HeadUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "period", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "SyncCommitteeUpdate", + "type": "event" + }, + { + "inputs": [], + "name": "FINALITY_THRESHOLD", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "GENESIS_TIME", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "GENESIS_VALIDATORS_ROOT", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SECONDS_PER_SLOT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SLOTS_PER_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SOURCE_CHAIN_ID", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "consistent", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "executionStateRoots", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "head", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "headers", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint256", + "name": "attestedSlot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "finalizedSlot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "participation", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "finalizedHeaderRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "executionStateRoot", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "a", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "b", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "c", + "type": "uint256[2]" + } + ], + "internalType": "struct Groth16Proof", + "name": "proof", + "type": "tuple" + } + ], + "internalType": "struct LightClientStep", + "name": "step", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "syncCommitteeSSZ", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "syncCommitteePoseidon", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "a", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "b", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "c", + "type": "uint256[2]" + } + ], + "internalType": "struct Groth16Proof", + "name": "proof", + "type": "tuple" + } + ], + "internalType": "struct LightClientRotate", + "name": "update", + "type": "tuple" + } + ], + "name": "rotate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "attestedSlot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "finalizedSlot", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "participation", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "finalizedHeaderRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "executionStateRoot", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256[2]", + "name": "a", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "b", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "c", + "type": "uint256[2]" + } + ], + "internalType": "struct Groth16Proof", + "name": "proof", + "type": "tuple" + } + ], + "internalType": "struct LightClientStep", + "name": "update", + "type": "tuple" + } + ], + "name": "step", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "syncCommitteePoseidons", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "timestamps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[2]", + "name": "a", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "b", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "c", + "type": "uint256[2]" + }, + { + "internalType": "uint256[65]", + "name": "input", + "type": "uint256[65]" + } + ], + "name": "verifyProofRotate", + "outputs": [ + { + "internalType": "bool", + "name": "r", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[2]", + "name": "a", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "b", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "c", + "type": "uint256[2]" + }, + { + "internalType": "uint256[1]", + "name": "input", + "type": "uint256[1]" + } + ], + "name": "verifyProofStep", + "outputs": [ + { + "internalType": "bool", + "name": "r", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/packages/reporter/src/ABIs/WormholeReporterContractABI.json b/packages/reporter/src/ABIs/WormholeReporterContractABI.json new file mode 100644 index 00000000..93f84c1f --- /dev/null +++ b/packages/reporter/src/ABIs/WormholeReporterContractABI.json @@ -0,0 +1,76 @@ +[ + { + "inputs": [ + { + "internalType": "contract IWormhole", + "name": "_wormhole", + "type": "address" + }, + { + "internalType": "contract HeaderStorage", + "name": "_headerStorage", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "headerStorage", + "outputs": [ + { + "internalType": "contract HeaderStorage", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "oracleAdapter", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "reportHeader", + "outputs": [ + { + "internalType": "uint64", + "name": "sequence", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "wormhole", + "outputs": [ + { + "internalType": "contract IWormhole", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/packages/reporter/src/ABIs/ambReporterContractABI.json b/packages/reporter/src/ABIs/ambReporterContractABI.json deleted file mode 100644 index 75aa8d11..00000000 --- a/packages/reporter/src/ABIs/ambReporterContractABI.json +++ /dev/null @@ -1,98 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "contract IAMB", - "name": "_amb", - "type": "address" - }, - { - "internalType": "contract HeaderStorage", - "name": "_headerStorage", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "emitter", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "blockHeader", - "type": "bytes32" - } - ], - "name": "HeaderReported", - "type": "event" - }, - { - "inputs": [], - "name": "amb", - "outputs": [ - { - "internalType": "contract IAMB", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "headerStorage", - "outputs": [ - { - "internalType": "contract HeaderStorage", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "blockNumbers", - "type": "uint256[]" - }, - { - "internalType": "address", - "name": "ambAdapter", - "type": "address" - }, - { - "internalType": "uint256", - "name": "gas", - "type": "uint256" - } - ], - "name": "reportHeaders", - "outputs": [ - { - "internalType": "bytes32", - "name": "receipt", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ] \ No newline at end of file diff --git a/packages/reporter/src/ABIs/telepathyAdapterABI.json b/packages/reporter/src/ABIs/telepathyAdapterABI.json deleted file mode 100644 index 3fdada32..00000000 --- a/packages/reporter/src/ABIs/telepathyAdapterABI.json +++ /dev/null @@ -1,229 +0,0 @@ -[ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "type": "address", - "name": "_telepathyRouter", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "BlockHeaderNotAvailable", - "inputs": [ - { - "type": "uint256", - "name": "slot", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ConflictingBlockHeader", - "inputs": [ - { - "type": "uint256", - "name": "blockNumber", - "internalType": "uint256" - }, - { - "type": "bytes32", - "name": "reportedBlockHash", - "internalType": "bytes32" - }, - { - "type": "bytes32", - "name": "storedBlockHash", - "internalType": "bytes32" - } - ] - }, - { - "type": "error", - "name": "InconsistentLightClient", - "inputs": [ - { - "type": "address", - "name": "lightClient", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "InvalidBlockHashProof", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidBlockHeaderLength", - "inputs": [ - { - "type": "uint256", - "name": "length", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "InvalidBlockHeaderRLP", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidBlockNumberProof", - "inputs": [] - }, - { - "type": "error", - "name": "NoLightClientOnChain", - "inputs": [ - { - "type": "uint32", - "name": "chainId", - "internalType": "uint32" - } - ] - }, - { - "type": "event", - "name": "HashStored", - "inputs": [ - { - "type": "uint256", - "name": "id", - "internalType": "uint256", - "indexed": true - }, - { - "type": "bytes32", - "name": "hashes", - "internalType": "bytes32", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "function", - "stateMutability": "view", - "outputs": [ - { - "type": "bytes32", - "name": "hash", - "internalType": "bytes32" - } - ], - "name": "getHashFromOracle", - "inputs": [ - { - "type": "uint256", - "name": "domain", - "internalType": "uint256" - }, - { - "type": "uint256", - "name": "id", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "stateMutability": "view", - "outputs": [ - { - "type": "bytes32", - "name": "", - "internalType": "bytes32" - } - ], - "name": "hashes", - "inputs": [ - { - "type": "uint256", - "name": "", - "internalType": "uint256" - }, - { - "type": "uint256", - "name": "", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "stateMutability": "nonpayable", - "outputs": [], - "name": "proveAncestralBlockHashes", - "inputs": [ - { - "type": "uint256", - "name": "chainId", - "internalType": "uint256" - }, - { - "type": "bytes[]", - "name": "blockHeaders", - "internalType": "bytes[]" - } - ] - }, - { - "type": "function", - "stateMutability": "nonpayable", - "outputs": [], - "name": "storeBlockHeader", - "inputs": [ - { - "type": "uint32", - "name": "_chainId", - "internalType": "uint32" - }, - { - "type": "uint64", - "name": "_slot", - "internalType": "uint64" - }, - { - "type": "uint256", - "name": "_blockNumber", - "internalType": "uint256" - }, - { - "type": "bytes32[]", - "name": "_blockNumberProof", - "internalType": "bytes32[]" - }, - { - "type": "bytes32", - "name": "_blockHash", - "internalType": "bytes32" - }, - { - "type": "bytes32[]", - "name": "_blockHashProof", - "internalType": "bytes32[]" - } - ] - }, - { - "type": "function", - "stateMutability": "view", - "outputs": [ - { - "type": "address", - "name": "", - "internalType": "address" - } - ], - "name": "telepathyRouter", - "inputs": [] - } - ] \ No newline at end of file diff --git a/packages/reporter/src/ABIs/telepathyContractABI.json b/packages/reporter/src/ABIs/telepathyContractABI.json deleted file mode 100644 index 51b62d40..00000000 --- a/packages/reporter/src/ABIs/telepathyContractABI.json +++ /dev/null @@ -1,497 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes32", - "name": "genesisValidatorsRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "genesisTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "secondsPerSlot", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slotsPerPeriod", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "syncCommitteePeriod", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "syncCommitteePoseidon", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "sourceChainId", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "finalityThreshold", - "type": "uint16" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "slot", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "HeadUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "period", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "SyncCommitteeUpdate", - "type": "event" - }, - { - "inputs": [], - "name": "FINALITY_THRESHOLD", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "GENESIS_TIME", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "GENESIS_VALIDATORS_ROOT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SECONDS_PER_SLOT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SLOTS_PER_PERIOD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SOURCE_CHAIN_ID", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "consistent", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "executionStateRoots", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "head", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "headers", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "attestedSlot", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalizedSlot", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "participation", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "finalizedHeaderRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "executionStateRoot", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint256[2]", - "name": "a", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "b", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "c", - "type": "uint256[2]" - } - ], - "internalType": "struct Groth16Proof", - "name": "proof", - "type": "tuple" - } - ], - "internalType": "struct LightClientStep", - "name": "step", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "syncCommitteeSSZ", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "syncCommitteePoseidon", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint256[2]", - "name": "a", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "b", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "c", - "type": "uint256[2]" - } - ], - "internalType": "struct Groth16Proof", - "name": "proof", - "type": "tuple" - } - ], - "internalType": "struct LightClientRotate", - "name": "update", - "type": "tuple" - } - ], - "name": "rotate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "attestedSlot", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalizedSlot", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "participation", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "finalizedHeaderRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "executionStateRoot", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint256[2]", - "name": "a", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "b", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "c", - "type": "uint256[2]" - } - ], - "internalType": "struct Groth16Proof", - "name": "proof", - "type": "tuple" - } - ], - "internalType": "struct LightClientStep", - "name": "update", - "type": "tuple" - } - ], - "name": "step", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "syncCommitteePoseidons", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "timestamps", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[2]", - "name": "a", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "b", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "c", - "type": "uint256[2]" - }, - { - "internalType": "uint256[65]", - "name": "input", - "type": "uint256[65]" - } - ], - "name": "verifyProofRotate", - "outputs": [ - { - "internalType": "bool", - "name": "r", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[2]", - "name": "a", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "b", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "c", - "type": "uint256[2]" - }, - { - "internalType": "uint256[1]", - "name": "input", - "type": "uint256[1]" - } - ], - "name": "verifyProofStep", - "outputs": [ - { - "internalType": "bool", - "name": "r", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ] \ No newline at end of file diff --git a/packages/reporter/src/ABIs/wormholeReporterContractABI.json b/packages/reporter/src/ABIs/wormholeReporterContractABI.json deleted file mode 100644 index f7e7d5dc..00000000 --- a/packages/reporter/src/ABIs/wormholeReporterContractABI.json +++ /dev/null @@ -1,76 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "contract IWormhole", - "name": "_wormhole", - "type": "address" - }, - { - "internalType": "contract HeaderStorage", - "name": "_headerStorage", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "headerStorage", - "outputs": [ - { - "internalType": "contract HeaderStorage", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oracleAdapter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "name": "reportHeader", - "outputs": [ - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "wormhole", - "outputs": [ - { - "internalType": "contract IWormhole", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ] \ No newline at end of file diff --git a/packages/reporter/src/BlockListener.ts b/packages/reporter/src/BlockListener.ts index 85299909..fae15207 100644 --- a/packages/reporter/src/BlockListener.ts +++ b/packages/reporter/src/BlockListener.ts @@ -1,7 +1,9 @@ -import { publicActions } from "viem" -import { mainnet, goerli, gnosis } from "viem/chains" +import { Chain, publicActions } from "viem" +import winston from "winston" + import Multiclient from "./MultiClient" -import winston, { query } from "winston" +import { BlockListenerConfig } from "./utils/type" + class BlocksListener { controllers: any[] logger: winston.Logger @@ -9,19 +11,23 @@ class BlocksListener { lastProcessedBlock: bigint = 0n multiclient: Multiclient _interval: ReturnType | undefined // NodeJs.Timeout + sourceChain: Chain + queryBlockLength: number - constructor(controllers: any[], timeFetchBlocksMs: number, logger: winston.Logger, multiclient: Multiclient) { - this.controllers = controllers - this.timeFetchBlocksMs = timeFetchBlocksMs - this.logger = logger - this.multiclient = multiclient + constructor(props: BlockListenerConfig) { + this.controllers = props.controllers + this.timeFetchBlocksMs = props.timeFetchBlocksMs + this.logger = props.logger + this.multiclient = props.multiclient + this.sourceChain = props.sourceChain + this.lastProcessedBlock = props.lastProcessedBlock + this.queryBlockLength = props.queryBlockLength } start() { this._fetchBlocks() this._interval = setInterval(() => { this._fetchBlocks() - this.logger.info(`Waiting for ${this.timeFetchBlocksMs}ms...`) }, this.timeFetchBlocksMs) } @@ -31,39 +37,32 @@ class BlocksListener { async _fetchBlocks() { try { - this.logger.info("Start to fetch blocks") + const client = this.multiclient.getClientByChain(this.sourceChain) - const client = this.multiclient - .getClientByChain(process.env.SOURCE_CHAIN === "goerli" ? goerli : mainnet) - .extend(publicActions) const currentBlockNumber = await client.getBlockNumber() this.logger.info(`Current Block Number: ${currentBlockNumber} , on source chain: ${process.env.SOURCE_CHAIN}`) - if (this.lastProcessedBlock !== currentBlockNumber) { + if (!this.lastProcessedBlock) { this.lastProcessedBlock = await client.getBlockNumber() + } - const queryBlockLength = 100n // the number of blocks to query, make sure it is less than 256 - const blockBuffer = 10n // put 10 blocks before the current block in case the node provider don't sync up at the head - if (queryBlockLength > 256n - blockBuffer) { - this.logger.error("Please choose a block length less than 256-buffer!") - } - const startBlock = this.lastProcessedBlock - queryBlockLength - const endBlock = this.lastProcessedBlock - blockBuffer - const blocks = await Promise.all( - Array.from( - { length: Number(queryBlockLength - blockBuffer + 1n) }, - (value, index) => startBlock + BigInt(index), - ), - ) - this.logger.info(`Fetching block from ${startBlock} to ${endBlock}`) + const blockBuffer = 10 // put 10 blocks before the current block in case the node provider don't sync up at the head + if (this.queryBlockLength > 256 - blockBuffer) { + this.logger.error(`Please choose a block length less than ${256 - blockBuffer}!`) + } + const startBlock = this.lastProcessedBlock - BigInt(this.queryBlockLength) + const endBlock = this.lastProcessedBlock - BigInt(blockBuffer) + const blocks = await Promise.all( + Array.from( + { length: Number(this.queryBlockLength - blockBuffer + 1) }, + (_, index) => startBlock + BigInt(index), + ), + ) + this.logger.info(`Fetching block from ${startBlock} to ${endBlock}`) - await Promise.all(this.controllers.map((_controller: any) => _controller.onBlocks(blocks))) + await Promise.all(this.controllers.map((_controller: any) => _controller.onBlocks(blocks))) - this.lastProcessedBlock = endBlock - } else { - this.logger.error(`${currentBlockNumber} has already been fetched!`) - } - // delay for 1000ms - await new Promise((func) => setTimeout(func, 1000)) + this.lastProcessedBlock = endBlock + this.logger.info(`Waiting for ${this.timeFetchBlocksMs / 1000}s...`) } catch (_err) { this.logger.error(`error from block listener ${_err}`) } diff --git a/packages/reporter/src/MultiClient.ts b/packages/reporter/src/MultiClient.ts index 79669af1..8312a435 100644 --- a/packages/reporter/src/MultiClient.ts +++ b/packages/reporter/src/MultiClient.ts @@ -1,4 +1,4 @@ -import { createWalletClient, http, Chain, Client } from "viem" +import { createWalletClient, http, Chain, publicActions } from "viem" import { privateKeyToAccount } from "viem/accounts" type ContructorConfigs = { @@ -18,10 +18,10 @@ const getClient = ({ chain, privateKey, rpcUrl }: GetClientsConfigs) => account: privateKeyToAccount(privateKey), chain: chain as Chain | undefined, transport: http(rpcUrl), - }) + }).extend(publicActions) class Multiclient { - private _clients: { [chainName: string]: Client } + private _clients: { [chainName: string]: any } constructor({ chains, privateKey, rpcUrls }: ContructorConfigs) { this._clients = chains.reduce((_acc: { [chainName: string]: any }, _chain: Chain) => { diff --git a/packages/reporter/src/controller/AMBController.ts b/packages/reporter/src/controller/AMBController.ts deleted file mode 100644 index 522e5d2f..00000000 --- a/packages/reporter/src/controller/AMBController.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { publicActions, walletActions } from "viem" -import { mainnet, goerli, gnosis } from "viem/chains" -import { privateKeyToAccount } from "viem/accounts" -import "dotenv/config" -import contract_address from "../utils/address.json" -import contractABI from "../ABIs/ambReporterContractABI.json" -import winston from "winston" -import Multiclient from "../MultiClient" - -class AMBController { - sourceChain: string - destinationChain: string - isEnabled: boolean = false - logger: winston.Logger - multiClient: Multiclient - constructor( - sourceChain: string, - destinationChain: string, - isEnabled: boolean, - logger: winston.Logger, - multiClient: Multiclient, - ) { - this.sourceChain = sourceChain - this.destinationChain = destinationChain - this.isEnabled = isEnabled - this.logger = logger - this.multiClient = multiClient - } - - async onBlocks(blockNumbers: bigint[]) { - try { - this.logger.info("AMB: Starting AMB Reporter") - - const client = this.multiClient - .getClientByChain(this.sourceChain === "goerli" ? goerli : mainnet) - .extend(walletActions) - .extend(publicActions) - const reporterAddr = this.getSourceReporterAddr() - const adapterAddr = this.getDestAdapter() - const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) - const { result, request } = await client.simulateContract({ - account, // calling from account - address: reporterAddr as `0x${string}`, - abi: contractABI, - functionName: "reportHeaders", - args: [blockNumbers, adapterAddr, process.env.GAS], - }) - - const txhash = await client.writeContract(request) - this.logger.info(`AMB: TxHash from AMB Controller: ${txhash}`) - } catch (error) { - this.logger.error(`AMB: Error from AMB Controller: ${error}`) - } - } - getSourceReporterAddr() { - switch (this.sourceChain) { - case "goerli": - return contract_address.amb.goerli_reporter - case "ethereum": - return contract_address.amb.ethereum_reporter - default: - return contract_address.amb.goerli_reporter - } - } - getDestAdapter() { - switch (this.destinationChain) { - case "gnosis": - return contract_address.amb.gnosis_adapter - default: - return contract_address.amb.gnosis_adapter - } - } -} - -export default AMBController diff --git a/packages/reporter/src/controller/SygmaController.ts b/packages/reporter/src/controller/SygmaController.ts deleted file mode 100644 index b88c224c..00000000 --- a/packages/reporter/src/controller/SygmaController.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { parseEther, walletActions, publicActions } from "viem" -import { mainnet, goerli, gnosis } from "viem/chains" -import { privateKeyToAccount } from "viem/accounts" -import "dotenv/config" -import contract_address from "../utils/address.json" -import contractABI from "../ABIs/SygmaReporterContractABI.json" -import winston from "winston" -import Multiclient from "../MultiClient" - -class SygmaController { - sourceChain: string - destinationChain: string - isEnabled: boolean = false - logger: winston.Logger - multiClient: Multiclient - constructor( - sourceChain: string, - destinationChain: string, - isEnabled: boolean, - logger: winston.Logger, - multiClient: Multiclient, - ) { - this.sourceChain = sourceChain - this.destinationChain = destinationChain - this.isEnabled = isEnabled - this.logger = logger - this.multiClient = multiClient - } - - async onBlocks(blockNumbers: string[]) { - try { - this.logger.info("Sygma: Starting Sygma Reporter") - const client = this.multiClient - .getClientByChain(this.sourceChain === "goerli" ? goerli : mainnet) - .extend(walletActions) - .extend(publicActions) - - const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) - - const reporterAddr = this.getSourceReporterAddr() - const adapterAddr = this.getDestAdapter() - const destDomainId = this.getDomainID() - - const { result, request } = await client.simulateContract({ - account, // calling from account - address: reporterAddr as `0x${string}`, - abi: contractABI, - functionName: "reportHeadersToDomain", - args: [blockNumbers, adapterAddr, destDomainId, "0x"], - value: parseEther("0.0001"), - }) - const txhash = await client.writeContract(request) - this.logger.info(`Sygma: TxHash from Sygma Controller: ${txhash}`) - } catch (error) { - this.logger.error(`Sygma: Error from Sygma Controller: ${error}`) - } - } - getSourceReporterAddr() { - switch (this.sourceChain) { - case "goerli": - return contract_address.sygma.goerli_reporter - case "ethereum": - return contract_address.sygma.ethereum_reporter - default: - return contract_address.sygma.goerli_reporter - } - } - getDestAdapter() { - switch (this.destinationChain) { - case "gnosis": - return contract_address.sygma.gnosis_adapter - default: - return contract_address.sygma.gnosis_adapter - } - } - getDomainID() { - switch (this.destinationChain) { - case "gnosis": - return 101 - default: - return 101 - } - } -} - -export default SygmaController diff --git a/packages/reporter/src/controller/TelepathyController.ts b/packages/reporter/src/controller/TelepathyController.ts deleted file mode 100644 index 80379f78..00000000 --- a/packages/reporter/src/controller/TelepathyController.ts +++ /dev/null @@ -1,91 +0,0 @@ -import axios from "axios" -import { hexToNumber, publicActions, walletActions } from "viem" -import { gnosis, mainnet } from "viem/chains" -import { privateKeyToAccount } from "viem/accounts" -import "dotenv/config" -import contract_address from "../utils/address.json" -import lightClientContractABI from "../ABIs/telepathyContractABI.json" -import adapterContractABI from "../ABIs/telepathyAdapterABI.json" -import winston from "winston" -import Multiclient from "../MultiClient" - -class TelepathyController { - sourceChain: string - destinationChain: string - isEnabled: boolean = false - logger: winston.Logger - multiClient: Multiclient - constructor( - sourceChain: string, - destinationChain: string, - isEnabled: boolean, - logger: winston.Logger, - multiClient: Multiclient, - ) { - this.sourceChain = sourceChain - this.destinationChain = destinationChain - this.isEnabled = isEnabled - this.logger = logger - this.multiClient = multiClient - } - async onBlocks(blockNumbers: string[]) { - try { - // Telepathy on support light client on Gnosis at the moment - const client = this.multiClient - .getClientByChain(this.destinationChain === "gnosis" ? gnosis : mainnet) - .extend(publicActions) - .extend(walletActions) - const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) - - const adapterAddr = contract_address.telepathy.gnosis_adapter - const lightClientAddr = contract_address.telepathy.gnosis_light_client - - // Getting the latest block number from provider - const currentBlockNumber = await client.getBlockNumber() - - // get contract events from latest block -500 : latest block - const queryBlockLength = 1000n // the number of blocks to query - const blockBuffer = 10n // put 10 blocks before the current block in case the node provider don't sync up at the head - const startBlock = currentBlockNumber - queryBlockLength - blockBuffer - const endBlock = currentBlockNumber - blockBuffer - this.logger.info(`Telepathy: Getting Contract Event from block ${startBlock} to block ${currentBlockNumber}`) - const logs = await client.getContractEvents({ - address: lightClientAddr as `0x${string}`, - abi: lightClientContractABI, - eventName: "HeadUpdate", - fromBlock: startBlock, - toBlock: endBlock, - }) - - if (logs.length == 0) { - this.logger.error("No event is found!") - return - } - - logs.forEach(async (event) => { - // get slot value from first indexed - const slotValue = event.topics[1] - this.logger.info(`Fetching proof for slot ${slotValue}`) - const postUrl = process.env.TELEPATHY_PROOF_API_URL + "5" + "/" + hexToNumber(slotValue!) - const response = await axios.post(postUrl) - this.logger.info(`Telepathy: Response from telepathy proof provider: ${response.data}`) - const { chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof } = response.data.result - this.logger.info(`Telepathy: Calling storeBlockHeader for block number ${blockNumber}`) - const { request, result } = await client.simulateContract({ - account, - address: adapterAddr as `0x${string}`, - abi: adapterContractABI, - functionName: "storeBlockHeader", - args: [chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof], - }) - - const txHash = await client.writeContract(request) - this.logger.info(`Telepathy: TxHash from Telepathy Controller: ${txHash} `) - }) - } catch (error) { - this.logger.error(`Telepathy: Error from Telepathy Controller: ${error}`) - } - } -} - -export default TelepathyController diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts new file mode 100644 index 00000000..c1f4a9fe --- /dev/null +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -0,0 +1,54 @@ +import { Chain } from "viem" +import { privateKeyToAccount } from "viem/accounts" +import winston from "winston" +import "dotenv/config" + +import contractABI from "../ABIs/AMBReporterContractABI.json" +import Multiclient from "../MultiClient" +import { ControllerConfig } from "../utils/type" + +class AMBReporterController { + sourceChain: Chain + destinationChains: Chain[] + isEnabled: boolean = false + logger: winston.Logger + multiClient: Multiclient + reporterAddr: string + adapterAddr: { [chainName: string]: string } + constructor(props: ControllerConfig) { + this.sourceChain = props.sourceChain + this.destinationChains = props.destinationChains + this.isEnabled = props.isEnabled + this.logger = props.logger + this.multiClient = props.multiClient + this.reporterAddr = props.reporterAddress + this.adapterAddr = props.adapterAddress + } + + async onBlocks(blockNumbers: bigint[]) { + try { + this.logger.info("AMB: Starting AMB Reporter") + + const client = this.multiClient.getClientByChain(this.sourceChain) + + const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) + + for (const chain of this.destinationChains) { + const { result, request } = await client.simulateContract({ + account, // calling from account + address: this.reporterAddr as `0x${string}`, + abi: contractABI, + functionName: "reportHeaders", + args: [blockNumbers, this.adapterAddr[chain.name.toLocaleLowerCase()], process.env.GAS], + }) + + const txhash = await client.writeContract(request) + this.logger.info(`AMB: TxHash from AMB Controller: ${txhash}`) + } + } catch (error) { + this.logger.error(`AMB: Error from AMB Controller: ${error}`) + } + } +} + +export default AMBReporterController diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts new file mode 100644 index 00000000..f1e9f937 --- /dev/null +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -0,0 +1,64 @@ +import { parseEther, Chain } from "viem" +import { gnosis } from "viem/chains" +import { privateKeyToAccount } from "viem/accounts" +import winston from "winston" +import "dotenv/config" + +import contractABI from "../ABIs/SygmaReporterContractABI.json" +import Multiclient from "../MultiClient" +import { ControllerConfig } from "../utils/type" + +class SygmaReporterController { + sourceChain: Chain + destinationChains: Chain[] + isEnabled: boolean = false + logger: winston.Logger + multiClient: Multiclient + reporterAddr: string + adapterAddr: { [chainName: string]: string } + constructor(props: ControllerConfig) { + this.sourceChain = props.sourceChain + this.destinationChains = props.destinationChains + this.isEnabled = props.isEnabled + this.logger = props.logger + this.multiClient = props.multiClient + this.reporterAddr = props.reporterAddress + this.adapterAddr = props.adapterAddress + } + + async onBlocks(blockNumbers: string[]) { + try { + this.logger.info("Sygma: Starting Sygma Reporter") + const client = this.multiClient.getClientByChain(this.sourceChain) + + const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) + + for (const chain of this.destinationChains) { + const destDomainId = this.getDomainID(chain) + const { result, request } = await client.simulateContract({ + account, // calling from account + address: this.reporterAddr as `0x${string}`, + abi: contractABI, + functionName: "reportHeadersToDomain", + args: [blockNumbers, this.adapterAddr[chain.name.toLocaleLowerCase()], destDomainId, "0x"], + value: parseEther("0.0001"), + }) + const txhash = await client.writeContract(request) + this.logger.info(`Sygma: TxHash from Sygma Controller: ${txhash}`) + } + } catch (error) { + this.logger.error(`Sygma: Error from Sygma Controller: ${error}`) + } + } + + getDomainID(destinationChain: Chain) { + switch (destinationChain) { + case gnosis: + return 101 + default: + return 101 + } + } +} + +export default SygmaReporterController diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts new file mode 100644 index 00000000..245d7c4d --- /dev/null +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -0,0 +1,90 @@ +import axios from "axios" +import { hexToNumber, Chain } from "viem" +import { privateKeyToAccount } from "viem/accounts" +import winston from "winston" +import "dotenv/config" + +import lightClientContractABI from "../ABIs/TelepathyContractABI.json" +import adapterContractABI from "../ABIs/TelepathyAdapterABI.json" +import Multiclient from "../MultiClient" +import { ControllerConfig } from "../utils/type" +import settings from "../utils/settings.json" + +class TelepathyReporterController { + sourceChain: Chain + destinationChains: Chain[] + isEnabled: boolean = false + logger: winston.Logger + multiClient: Multiclient + reporterAddr: string + adapterAddr: { [chainName: string]: string } + constructor(props: ControllerConfig) { + this.sourceChain = props.sourceChain + this.destinationChains = props.destinationChains + this.isEnabled = props.isEnabled + this.logger = props.logger + this.multiClient = props.multiClient + this.reporterAddr = props.reporterAddress + this.adapterAddr = props.adapterAddress + } + async onBlocks(blockNumbers: string[]) { + try { + // Telepathy on support light client on Gnosis at the moment + + for (const chain of this.destinationChains) { + const client = this.multiClient.getClientByChain(chain) + const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) + + const adapterAddr = this.adapterAddr[chain.name.toLocaleLowerCase()] + const lightClientAddr = settings.contractAddresses.gnosis.TelepathyLightClient + + // Getting the latest block number from provider + const currentBlockNumber = await client.getBlockNumber() + + // get contract events from latest block - 1000 : latest block - 10 + const queryBlockLength = 1000n // the number of blocks to query + const blockBuffer = 10n // put 10 blocks before the current block in case the node provider don't sync up at the head + const startBlock = currentBlockNumber - queryBlockLength + const endBlock = currentBlockNumber - blockBuffer + this.logger.info(`Telepathy: Getting Contract Event from block ${startBlock} to block ${currentBlockNumber}`) + const logs = await client.getContractEvents({ + address: lightClientAddr as `0x${string}`, + abi: lightClientContractABI, + eventName: "HeadUpdate", + fromBlock: startBlock, + toBlock: endBlock, + }) + + if (logs.length == 0) { + this.logger.error("No event is found!") + return + } + + logs.forEach(async (event: any) => { + // get slot value from first indexed + const slotValue = event.topics[1] + this.logger.info(`Fetching proof for slot ${slotValue}`) + const postUrl = process.env.TELEPATHY_PROOF_API_URL + "5" + "/" + hexToNumber(slotValue!) + const response = await axios.post(postUrl) + this.logger.info(`Telepathy: Response from telepathy proof provider: ${response.data}`) + const { chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof } = response.data.result + this.logger.info(`Telepathy: Calling storeBlockHeader for block number ${blockNumber}`) + const { request, result } = await client.simulateContract({ + account, + address: adapterAddr as `0x${string}`, + abi: adapterContractABI, + functionName: "storeBlockHeader", + args: [chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof], + }) + + const txHash = await client.writeContract(request) + this.logger.info(`Telepathy: TxHash from Telepathy Controller: ${txHash} `) + }) + } + } catch (error) { + this.logger.error(`Telepathy: Error from Telepathy Controller: ${error}`) + } + } +} + +export default TelepathyReporterController diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 9072278d..89e7d40b 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -1,12 +1,12 @@ import { gnosis, goerli, mainnet } from "viem/chains" import Multiclient from "./MultiClient" -import AMBController from "./controller/AMBController" -import SygmaController from "./controller/SygmaController" -import TelepathyController from "./controller/TelepathyController" +import AMBReporterController from "./controllers/AMBReporterController" +import SygmaReporterController from "./controllers/SygmaReporterController" +import TelepathyReporterController from "./controllers/TelepathyReporterController" import BlocksListener from "./BlockListener" import "dotenv/config" import winston from "winston" - +import settings from "./utils/settings.json" function main() { const goerliRPC = process.env.GOERLI_RPC_URL as string const gnosisRPC = process.env.GNOSIS_RPC_URL as string @@ -16,7 +16,7 @@ function main() { const isAMBEnabled = process.env.AMB_CONTROLLER === "true" const isSygmaEnabled = process.env.SYGMA_CONTROLLER === "true" const isTelepathyEnabled = process.env.TELEPATHY_CONTROLLER === "true" - const timeFetchBlocksMs = 5 * 60 * 1000 + const timeFetchBlocksMs = 10 * 1000 const logger = winston.createLogger({ level: "info", @@ -32,16 +32,45 @@ function main() { }, }) - const ambController = new AMBController(sourceChain!, destChain!, isAMBEnabled, logger, multiClient) - const sygmaController = new SygmaController(sourceChain!, destChain!, isSygmaEnabled, logger, multiClient) - const telepathyController = new TelepathyController(sourceChain!, destChain!, isTelepathyEnabled, logger, multiClient) + const ambReporterController = new AMBReporterController({ + sourceChain: goerli, + destinationChains: [gnosis], + isEnabled: isAMBEnabled, + logger: logger, + multiClient: multiClient, + reporterAddress: settings.contractAddresses.goerli.AMBReporter, + adapterAddress: { gnosis: settings.contractAddresses.gnosis.AMBAdapter }, + }) + const sygmaReporterController = new SygmaReporterController({ + sourceChain: goerli, + destinationChains: [gnosis], + isEnabled: isSygmaEnabled, + logger: logger, + multiClient: multiClient, + reporterAddress: settings.contractAddresses.goerli.SygmaReporter, + adapterAddress: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter }, + }) + const telepathyReporterController = new TelepathyReporterController({ + sourceChain: goerli, + destinationChains: [gnosis], + isEnabled: isTelepathyEnabled, + logger: logger, + multiClient: multiClient, + reporterAddress: "", + adapterAddress: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter }, + }) - const blocksListener = new BlocksListener( - [ambController, sygmaController, telepathyController].filter((controller) => controller.isEnabled == true), - timeFetchBlocksMs, // every 5 minutes - logger, - multiClient, - ) + const blocksListener = new BlocksListener({ + controllers: [ambReporterController, sygmaReporterController, telepathyReporterController].filter( + (controller) => controller.isEnabled == true, + ), + timeFetchBlocksMs: timeFetchBlocksMs, + logger: logger, + multiclient: multiClient, + sourceChain: goerli, + queryBlockLength: 100, + lastProcessedBlock: 0n, + }) blocksListener.start() } diff --git a/packages/reporter/src/newIndex.ts b/packages/reporter/src/newIndex.ts deleted file mode 100644 index 42d19f9b..00000000 --- a/packages/reporter/src/newIndex.ts +++ /dev/null @@ -1,34 +0,0 @@ -// import logger from "winston" -import { createPublicClient, http, createWalletClient, PublicClient, Chain } from "viem" -import AMBController from "./controller/AMBController" -import SygmaController from "./controller/SygmaController" -import TelepathyController from "./controller/TelepathyController" -import BlocksListener from "./BlockListener" -import "dotenv/config" -import winston from "winston" -function main() { - const logger = winston.createLogger({ - level: "info", - format: winston.format.json(), - transports: [new winston.transports.Console()], - }) - const sourceChain = process.env.SOURCE_CHAIN - const destChain = process.env.DEST_CHAIN - const ambController = new AMBController(sourceChain!, destChain!, process.env.AMB_CONTROLLER === "true", logger) - const sygmaController = new SygmaController(sourceChain!, destChain!, process.env.SYGMA_CONTROLLER === "true", logger) - const telepathyController = new TelepathyController( - sourceChain!, - destChain!, - process.env.TELEPATHY_CONTROLLER === "true", - logger, - ) - - const blocksListener = new BlocksListener( - [ambController, sygmaController, telepathyController].filter((controller) => controller.isEnabled == true), - 10 * 1000, - logger, - ) - blocksListener.start() -} - -main() diff --git a/packages/reporter/src/utils/settings.json b/packages/reporter/src/utils/settings.json new file mode 100644 index 00000000..acb189f2 --- /dev/null +++ b/packages/reporter/src/utils/settings.json @@ -0,0 +1,15 @@ +{ + "contractAddresses": { + "goerli": { + "AMBReporter": "0xedc0b1d3de4496e0d917af42f29cb71eb2982319", + "SygmaReporter": "0x2f96d347c932ac73b56e9352ecc0707e25173d88" + }, + "mainnet": {}, + "gnosis": { + "AMBAdapter": "0x01268DB05965CeAc2a89566c42CD550ED7eE5ECD", + "SygmaAdapter": "0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15", + "TelepathyLightClient": "0x34b5378DE786389a477b40dD710812c250185f83", + "TelapathyAdapter": "0x2f1E51a2763FB67fe09971Fd8d849716137A3357" + } + } +} diff --git a/packages/reporter/src/utils/type.ts b/packages/reporter/src/utils/type.ts new file mode 100644 index 00000000..00e7848b --- /dev/null +++ b/packages/reporter/src/utils/type.ts @@ -0,0 +1,25 @@ +import { Chain } from "viem" +import winston = require("winston") +import Multiclient from "../MultiClient" + +type ControllerConfig = { + sourceChain: Chain + destinationChains: Chain[] + reporterAddress: string + adapterAddress: { [chainName: string]: string } + logger: winston.Logger + multiClient: Multiclient + isEnabled: boolean +} + +type BlockListenerConfig = { + controllers: any[] + logger: winston.Logger + timeFetchBlocksMs: number + multiclient: Multiclient + sourceChain: Chain + queryBlockLength: number + lastProcessedBlock: bigint +} + +export { ControllerConfig, BlockListenerConfig } diff --git a/packages/reporter/tsconfig.json b/packages/reporter/tsconfig.json index 3550a7f9..acfb993d 100644 --- a/packages/reporter/tsconfig.json +++ b/packages/reporter/tsconfig.json @@ -1,28 +1,22 @@ { - "compilerOptions": { - "declaration": true, - "declarationMap": true, - "emitDecoratorMetadata": true, - "esModuleInterop": true, - "experimentalDecorators": true, - "forceConsistentCasingInFileNames": true, - "lib": [ - "es6","ESNext" - ], - "module": "commonjs", - "moduleResolution": "node", - "noImplicitAny": true, - "outDir": "./dist", - "removeComments": true, - "resolveJsonModule": true, - "sourceMap": true, - "strict": true, - "target": "ESNext" - }, - "exclude": [ - "node_modules" - ], - "include": [ - "./src/**/*" - ] -} \ No newline at end of file + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDecoratorMetadata": true, + "esModuleInterop": true, + "experimentalDecorators": true, + "forceConsistentCasingInFileNames": true, + "lib": ["es6", "ESNext"], + "module": "commonjs", + "moduleResolution": "node", + "noImplicitAny": true, + "outDir": "./dist", + "removeComments": true, + "resolveJsonModule": true, + "sourceMap": true, + "strict": true, + "target": "ESNext" + }, + "exclude": ["node_modules"], + "include": ["./src/**/*"] +} diff --git a/packages/reporter/yarn.lock b/packages/reporter/yarn.lock index 0e59c872..898adfbb 100644 --- a/packages/reporter/yarn.lock +++ b/packages/reporter/yarn.lock @@ -1,2811 +1,1082 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 6 - cacheKey: 8 - -"@aashutoshrathi/word-wrap@npm:^1.2.3": - version: 1.2.6 - resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" - checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd - languageName: node - linkType: hard - -"@adraffy/ens-normalize@npm:1.9.4": - version: 1.9.4 - resolution: "@adraffy/ens-normalize@npm:1.9.4" - checksum: 7d7fff58ebe2c4961f7e5e61dad123aa6a63fec0df5c84af1fa41079dc05d398599690be4427b3a94d2baa94084544bcfdf2d51cbed7504b9b0583b0960ad550 - languageName: node - linkType: hard - -"@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0": - version: 1.6.0 - resolution: "@colors/colors@npm:1.6.0" - checksum: aa209963e0c3218e80a4a20553ba8c0fbb6fa13140540b4e5f97923790be06801fc90172c1114fc8b7e888b3d012b67298cde6b9e81521361becfaee400c662f - languageName: node - linkType: hard - -"@cspotcode/source-map-support@npm:^0.8.0": - version: 0.8.1 - resolution: "@cspotcode/source-map-support@npm:0.8.1" - dependencies: - "@jridgewell/trace-mapping": 0.3.9 - checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa - languageName: node - linkType: hard - -"@dabh/diagnostics@npm:^2.0.2": - version: 2.0.3 - resolution: "@dabh/diagnostics@npm:2.0.3" - dependencies: - colorspace: 1.1.x - enabled: 2.0.x - kuler: ^2.0.0 - checksum: 4879600c55c8315a0fb85fbb19057bad1adc08f0a080a8cb4e2b63f723c379bfc4283b68123a2b078d367b327dd8df12fcb27464efe791addc0a48b9df6d79a1 - languageName: node - linkType: hard - -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": - version: 4.4.0 - resolution: "@eslint-community/eslint-utils@npm:4.4.0" - dependencies: - eslint-visitor-keys: ^3.3.0 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 - languageName: node - linkType: hard - -"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": - version: 4.9.1 - resolution: "@eslint-community/regexpp@npm:4.9.1" - checksum: 06fb839e9c756f6375cc545c2f2e05a0a64576bd6370e8e3c07983fd29a3d6e164ef4aa48a361f7d27e6713ab79c83053ff6a2ccb78748bc955e344279c4a3b6 - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^2.1.2": - version: 2.1.2 - resolution: "@eslint/eslintrc@npm:2.1.2" - dependencies: - ajv: ^6.12.4 - debug: ^4.3.2 - espree: ^9.6.0 - globals: ^13.19.0 - ignore: ^5.2.0 - import-fresh: ^3.2.1 - js-yaml: ^4.1.0 - minimatch: ^3.1.2 - strip-json-comments: ^3.1.1 - checksum: bc742a1e3b361f06fedb4afb6bf32cbd27171292ef7924f61c62f2aed73048367bcc7ac68f98c06d4245cd3fabc43270f844e3c1699936d4734b3ac5398814a7 - languageName: node - linkType: hard - -"@eslint/js@npm:8.51.0": - version: 8.51.0 - resolution: "@eslint/js@npm:8.51.0" - checksum: 0228bf1e1e0414843e56d9ff362a2a72d579c078f93174666f29315690e9e30a8633ad72c923297f7fd7182381b5a476805ff04dac8debe638953eb1ded3ac73 - languageName: node - linkType: hard - -"@humanwhocodes/config-array@npm:^0.11.11": - version: 0.11.12 - resolution: "@humanwhocodes/config-array@npm:0.11.12" - dependencies: - "@humanwhocodes/object-schema": ^2.0.0 - debug: ^4.1.1 - minimatch: ^3.0.5 - checksum: 8eab5a7c7e4948aa07cf26d0b6cca103298ab9bbb70f897c7cfbb3ee5fd5431a0d9f2ff5efd4d712dae7fd8fa941f09b1b22da842b9d87367ccb75b86bbd715b - languageName: node - linkType: hard - -"@humanwhocodes/module-importer@npm:^1.0.1": - version: 1.0.1 - resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 - languageName: node - linkType: hard - -"@humanwhocodes/object-schema@npm:^2.0.0": - version: 2.0.0 - resolution: "@humanwhocodes/object-schema@npm:2.0.0" - checksum: e0558acd035198a69adfa3edce33ec385bb664c92478a08a91b3e8082acd2d96ef7bf43189d848e4b0bdd75092f9d494a55a4efaf5bed45101c9e83d28379d83 - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: ^5.1.2 - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: ^7.0.1 - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: ^8.1.0 - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.0.3": - version: 3.1.1 - resolution: "@jridgewell/resolve-uri@npm:3.1.1" - checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:0.3.9": - version: 0.3.9 - resolution: "@jridgewell/trace-mapping@npm:0.3.9" - dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef - languageName: node - linkType: hard - -"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": - version: 1.2.0 - resolution: "@noble/curves@npm:1.2.0" - dependencies: - "@noble/hashes": 1.3.2 - checksum: bb798d7a66d8e43789e93bc3c2ddff91a1e19fdb79a99b86cd98f1e5eff0ee2024a2672902c2576ef3577b6f282f3b5c778bebd55761ddbb30e36bf275e83dd0 - languageName: node - linkType: hard - -"@noble/hashes@npm:1.3.2, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.2": - version: 1.3.2 - resolution: "@noble/hashes@npm:1.3.2" - checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": 2.0.5 - run-parallel: ^1.1.9 - checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": 2.1.5 - fastq: ^1.6.0 - checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/fs@npm:3.1.0" - dependencies: - semver: ^7.3.5 - checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f - languageName: node - linkType: hard - -"@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2": - version: 1.1.3 - resolution: "@scure/base@npm:1.1.3" - checksum: 1606ab8a4db898cb3a1ada16c15437c3bce4e25854fadc8eb03ae93cbbbac1ed90655af4b0be3da37e12056fef11c0374499f69b9e658c9e5b7b3e06353c630c - languageName: node - linkType: hard - -"@scure/bip32@npm:1.3.2": - version: 1.3.2 - resolution: "@scure/bip32@npm:1.3.2" - dependencies: - "@noble/curves": ~1.2.0 - "@noble/hashes": ~1.3.2 - "@scure/base": ~1.1.2 - checksum: c5ae84fae43490853693b481531132b89e056d45c945fc8b92b9d032577f753dfd79c5a7bbcbf0a7f035951006ff0311b6cf7a389e26c9ec6335e42b20c53157 - languageName: node - linkType: hard - -"@scure/bip39@npm:1.2.1": - version: 1.2.1 - resolution: "@scure/bip39@npm:1.2.1" - dependencies: - "@noble/hashes": ~1.3.0 - "@scure/base": ~1.1.0 - checksum: c5bd6f1328fdbeae2dcdd891825b1610225310e5e62a4942714db51066866e4f7bef242c7b06a1b9dcc8043a4a13412cf5c5df76d3b10aa9e36b82e9b6e3eeaa - languageName: node - linkType: hard - -"@tootallnate/once@npm:2": - version: 2.0.0 - resolution: "@tootallnate/once@npm:2.0.0" - checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 - languageName: node - linkType: hard - -"@tsconfig/node10@npm:^1.0.7": - version: 1.0.9 - resolution: "@tsconfig/node10@npm:1.0.9" - checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df - languageName: node - linkType: hard - -"@tsconfig/node12@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node12@npm:1.0.11" - checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a - languageName: node - linkType: hard - -"@tsconfig/node14@npm:^1.0.0": - version: 1.0.3 - resolution: "@tsconfig/node14@npm:1.0.3" - checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d - languageName: node - linkType: hard - -"@tsconfig/node16@npm:^1.0.2": - version: 1.0.4 - resolution: "@tsconfig/node16@npm:1.0.4" - checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff - languageName: node - linkType: hard - -"@types/json-schema@npm:^7.0.12": - version: 7.0.14 - resolution: "@types/json-schema@npm:7.0.14" - checksum: 4b3dd99616c7c808201c56f6c7f6552eb67b5c0c753ab3fa03a6cb549aae950da537e9558e53fa65fba23d1be624a1e4e8d20c15027efbe41e03ca56f2b04fb0 - languageName: node - linkType: hard - -"@types/node-cron@npm:^3.0.9": - version: 3.0.9 - resolution: "@types/node-cron@npm:3.0.9" - checksum: 8335eb0a453b956cc2da5431269e4732e0063c6cca0763cf779c7c242d0dfe3eea1929951a0b11fb9e7a2eee838836ee8cda79e9d6098b1bee91d5a17dce1e73 - languageName: node - linkType: hard - -"@types/node@npm:^20.8.6": - version: 20.8.6 - resolution: "@types/node@npm:20.8.6" - dependencies: - undici-types: ~5.25.1 - checksum: ccfb7ac482c5a96edeb239893c5c099f5257fcc2ed9ae62fefdfbc782b79e16dbc2af9a85b379665237bf759904b44ca2be68e75d239e0297882aad42f61905c - languageName: node - linkType: hard - -"@types/semver@npm:^7.5.0": - version: 7.5.4 - resolution: "@types/semver@npm:7.5.4" - checksum: 120c0189f6fec5f2d12d0d71ac8a4cfa952dc17fa3d842e8afddb82bba8828a4052f8799c1653e2b47ae1977435f38e8985658fde971905ce5afb8e23ee97ecf - languageName: node - linkType: hard - -"@types/triple-beam@npm:^1.3.2": - version: 1.3.4 - resolution: "@types/triple-beam@npm:1.3.4" - checksum: 869641358164a9b87aec710e046c11a65803b7dc3545f33c3365df9590d1059c70592bb35a7fc4099fa746f112ab5a207881ba9fb570e9b1dea4ffd89761d804 - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:^6.7.5": - version: 6.8.0 - resolution: "@typescript-eslint/eslint-plugin@npm:6.8.0" - dependencies: - "@eslint-community/regexpp": ^4.5.1 - "@typescript-eslint/scope-manager": 6.8.0 - "@typescript-eslint/type-utils": 6.8.0 - "@typescript-eslint/utils": 6.8.0 - "@typescript-eslint/visitor-keys": 6.8.0 - debug: ^4.3.4 - graphemer: ^1.4.0 - ignore: ^5.2.4 - natural-compare: ^1.4.0 - semver: ^7.5.4 - ts-api-utils: ^1.0.1 - peerDependencies: - "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: c36ccf606ebcaff8263c4ffa3b4cda58c6f93474b9eea9906e51be2fef8596977a245cc13770b21c6bfd38ccf45a3cf3613d5f4499429f62ec80afe15ae345bd - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:^6.7.5": - version: 6.8.0 - resolution: "@typescript-eslint/parser@npm:6.8.0" - dependencies: - "@typescript-eslint/scope-manager": 6.8.0 - "@typescript-eslint/types": 6.8.0 - "@typescript-eslint/typescript-estree": 6.8.0 - "@typescript-eslint/visitor-keys": 6.8.0 - debug: ^4.3.4 - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10d7a3ae383fee5a5cba9541c72e23d6ab01cca6b414a62b44dacb5ebc15c80b80aa6c105b6469d3795f2f8514ae2499c069cd2d9dcac61f3db9ef6c7a75e080 - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:6.8.0": - version: 6.8.0 - resolution: "@typescript-eslint/scope-manager@npm:6.8.0" - dependencies: - "@typescript-eslint/types": 6.8.0 - "@typescript-eslint/visitor-keys": 6.8.0 - checksum: b6cf2803531d1c14b56c30fd3cd807b80e17fe48d0da8e5aa9ae50915407ed732c7e2a7ac8030b7cf8ed07b8e481a1138d76bf05b727837a0e016280c2f6873b - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:6.8.0": - version: 6.8.0 - resolution: "@typescript-eslint/type-utils@npm:6.8.0" - dependencies: - "@typescript-eslint/typescript-estree": 6.8.0 - "@typescript-eslint/utils": 6.8.0 - debug: ^4.3.4 - ts-api-utils: ^1.0.1 - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 9b7d56904dc1a5719ef79eb1b7989d6fad10c71fb07ec3e66cf69b8c8dc5383d644ab122d4701bc4960fb7c99cc08aee4e645db3e4675d488d5779197e15dfda - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:6.8.0": - version: 6.8.0 - resolution: "@typescript-eslint/types@npm:6.8.0" - checksum: 1fcd85f6d575116d51c6ee757ed37610ae5e7e4296a29f93c9c6949f6cd16d24550eb7fc5bae7a43119cc08e13836f69a7ae7c54ebba6c95aef96b34d3bfb7f7 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:6.8.0": - version: 6.8.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.8.0" - dependencies: - "@typescript-eslint/types": 6.8.0 - "@typescript-eslint/visitor-keys": 6.8.0 - debug: ^4.3.4 - globby: ^11.1.0 - is-glob: ^4.0.3 - semver: ^7.5.4 - ts-api-utils: ^1.0.1 - peerDependenciesMeta: - typescript: - optional: true - checksum: 388db7f33ef1bc0e7b960c0bce9c744c2e32c66c7ab8dfae73d8533958202ad6f31663b0010f79c45b5ff93159c67f45b00693d73b9da2472b17156dfd26b4a8 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:6.8.0": - version: 6.8.0 - resolution: "@typescript-eslint/utils@npm:6.8.0" - dependencies: - "@eslint-community/eslint-utils": ^4.4.0 - "@types/json-schema": ^7.0.12 - "@types/semver": ^7.5.0 - "@typescript-eslint/scope-manager": 6.8.0 - "@typescript-eslint/types": 6.8.0 - "@typescript-eslint/typescript-estree": 6.8.0 - semver: ^7.5.4 - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - checksum: 6d9f90db504502a9aa10e834830c3ffa25483757414670acc6141a3ebef9171a57688a3a179febf35a0e1e0b322f37228d9537bf1b279f1af7fc97888b873bc3 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:6.8.0": - version: 6.8.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.8.0" - dependencies: - "@typescript-eslint/types": 6.8.0 - eslint-visitor-keys: ^3.4.1 - checksum: 710d9067b85d7715a400ae625c083c41733abb891d7b35108de083913980f9642e79d27689599fa39915f0fecae16dbfc30367007fccc838ccd917943660de22 - languageName: node - linkType: hard - -"abbrev@npm:1, abbrev@npm:^1.0.0": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 - languageName: node - linkType: hard - -"abitype@npm:0.9.8": - version: 0.9.8 - resolution: "abitype@npm:0.9.8" - peerDependencies: - typescript: ">=5.0.4" - zod: ^3 >=3.19.1 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true - checksum: d7d887f29d6821e3f7a400de9620511b80ead3f85c5c87308aaec97965d3493e6687ed816e88722b4f512249bd66dee9e69231b49af0e1db8f69400a62c87cf6 - languageName: node - linkType: hard - -"acorn-jsx@npm:^5.3.2": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 - languageName: node - linkType: hard - -"acorn-walk@npm:^8.1.1": - version: 8.2.0 - resolution: "acorn-walk@npm:8.2.0" - checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 - languageName: node - linkType: hard - -"acorn@npm:^8.4.1, acorn@npm:^8.9.0": - version: 8.10.0 - resolution: "acorn@npm:8.10.0" - bin: - acorn: bin/acorn - checksum: 538ba38af0cc9e5ef983aee196c4b8b4d87c0c94532334fa7e065b2c8a1f85863467bb774231aae91613fcda5e68740c15d97b1967ae3394d20faddddd8af61d - languageName: node - linkType: hard - -"agent-base@npm:6, agent-base@npm:^6.0.2": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: 4 - checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d - languageName: node - linkType: hard - -"agentkeepalive@npm:^4.2.1": - version: 4.5.0 - resolution: "agentkeepalive@npm:4.5.0" - dependencies: - humanize-ms: ^1.2.1 - checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: ^2.0.0 - indent-string: ^4.0.0 - checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 - languageName: node - linkType: hard - -"ajv@npm:^6.12.4": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: ^3.1.1 - fast-json-stable-stringify: ^2.0.0 - json-schema-traverse: ^0.4.1 - uri-js: ^4.2.2 - checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: ^2.0.1 - checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 - languageName: node - linkType: hard - -"ansi-styles@npm:^6.1.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 - languageName: node - linkType: hard - -"anymatch@npm:~3.1.2": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: ^3.0.0 - picomatch: ^2.0.4 - checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 - languageName: node - linkType: hard - -"aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^3.0.0": - version: 3.0.1 - resolution: "are-we-there-yet@npm:3.0.1" - dependencies: - delegates: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 - languageName: node - linkType: hard - -"arg@npm:^4.1.0": - version: 4.1.3 - resolution: "arg@npm:4.1.3" - checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 - languageName: node - linkType: hard - -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d - languageName: node - linkType: hard - -"async@npm:^3.2.3": - version: 3.2.4 - resolution: "async@npm:3.2.4" - checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be - languageName: node - linkType: hard - -"axios@npm:^1.5.1": - version: 1.5.1 - resolution: "axios@npm:1.5.1" - dependencies: - follow-redirects: ^1.15.0 - form-data: ^4.0.0 - proxy-from-env: ^1.1.0 - checksum: 4444f06601f4ede154183767863d2b8e472b4a6bfc5253597ed6d21899887e1fd0ee2b3de792ac4f8459fe2e359d2aa07c216e45fd8b9e4e0688a6ebf48a5a8d - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 - languageName: node - linkType: hard - -"binary-extensions@npm:^2.0.0": - version: 2.2.0 - resolution: "binary-extensions@npm:2.2.0" - checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: ^1.0.0 - concat-map: 0.0.1 - checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: ^1.0.0 - checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 - languageName: node - linkType: hard - -"braces@npm:^3.0.2, braces@npm:~3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" - dependencies: - fill-range: ^7.0.1 - checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 - languageName: node - linkType: hard - -"cacache@npm:^17.0.0": - version: 17.1.4 - resolution: "cacache@npm:17.1.4" - dependencies: - "@npmcli/fs": ^3.1.0 - fs-minipass: ^3.0.0 - glob: ^10.2.2 - lru-cache: ^7.7.1 - minipass: ^7.0.3 - minipass-collect: ^1.0.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - p-map: ^4.0.0 - ssri: ^10.0.0 - tar: ^6.1.11 - unique-filename: ^3.0.0 - checksum: b7751df756656954a51201335addced8f63fc53266fa56392c9f5ae83c8d27debffb4458ac2d168a744a4517ec3f2163af05c20097f93d17bdc2dc8a385e14a6 - languageName: node - linkType: hard - -"callsites@npm:^3.0.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 - languageName: node - linkType: hard - -"chalk@npm:^4.0.0": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: ^4.1.0 - supports-color: ^7.1.0 - checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc - languageName: node - linkType: hard - -"chokidar@npm:^3.5.2": - version: 3.5.3 - resolution: "chokidar@npm:3.5.3" - dependencies: - anymatch: ~3.1.2 - braces: ~3.0.2 - fsevents: ~2.3.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 - dependenciesMeta: - fsevents: - optional: true - checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.3": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: 1.1.3 - checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: ~1.1.4 - checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d - languageName: node - linkType: hard - -"color-name@npm:^1.0.0, color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 - languageName: node - linkType: hard - -"color-string@npm:^1.6.0": - version: 1.9.1 - resolution: "color-string@npm:1.9.1" - dependencies: - color-name: ^1.0.0 - simple-swizzle: ^0.2.2 - checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 - languageName: node - linkType: hard - -"color-support@npm:^1.1.3": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b - languageName: node - linkType: hard - -"color@npm:^3.1.3": - version: 3.2.1 - resolution: "color@npm:3.2.1" - dependencies: - color-convert: ^1.9.3 - color-string: ^1.6.0 - checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 - languageName: node - linkType: hard - -"colorspace@npm:1.1.x": - version: 1.1.4 - resolution: "colorspace@npm:1.1.4" - dependencies: - color: ^3.1.3 - text-hex: 1.0.x - checksum: bb3934ef3c417e961e6d03d7ca60ea6e175947029bfadfcdb65109b01881a1c0ecf9c2b0b59abcd0ee4a0d7c1eae93beed01b0e65848936472270a0b341ebce8 - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: ~1.0.0 - checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af - languageName: node - linkType: hard - -"console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed - languageName: node - linkType: hard - -"create-require@npm:^1.1.0": - version: 1.1.1 - resolution: "create-require@npm:1.1.1" - checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" - dependencies: - path-key: ^3.1.0 - shebang-command: ^2.0.0 - which: ^2.0.1 - checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": - version: 4.3.4 - resolution: "debug@npm:4.3.4" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 - languageName: node - linkType: hard - -"debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: ^2.1.1 - checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c - languageName: node - linkType: hard - -"deep-is@npm:^0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 - languageName: node - linkType: hard - -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd - languageName: node - linkType: hard - -"diff@npm:^4.0.1": - version: 4.0.2 - resolution: "diff@npm:4.0.2" - checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: ^4.0.0 - checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 - languageName: node - linkType: hard - -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: ^2.0.2 - checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce - languageName: node - linkType: hard - -"dotenv@npm:^16.3.1": - version: 16.3.1 - resolution: "dotenv@npm:16.3.1" - checksum: 15d75e7279018f4bafd0ee9706593dd14455ddb71b3bcba9c52574460b7ccaf67d5cf8b2c08a5af1a9da6db36c956a04a1192b101ee102a3e0cf8817bbcf3dfd - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 - languageName: node - linkType: hard - -"enabled@npm:2.0.x": - version: 2.0.0 - resolution: "enabled@npm:2.0.0" - checksum: 9d256d89f4e8a46ff988c6a79b22fa814b4ffd82826c4fdacd9b42e9b9465709d3b748866d0ab4d442dfc6002d81de7f7b384146ccd1681f6a7f868d2acca063 - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: ^0.6.2 - checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 - languageName: node - linkType: hard - -"eslint-config-prettier@npm:^9.0.0": - version: 9.0.0 - resolution: "eslint-config-prettier@npm:9.0.0" - peerDependencies: - eslint: ">=7.0.0" - bin: - eslint-config-prettier: bin/cli.js - checksum: 362e991b6cb343f79362bada2d97c202e5303e6865888918a7445c555fb75e4c078b01278e90be98aa98ae22f8597d8e93d48314bec6824f540f7efcab3ce451 - languageName: node - linkType: hard - -"eslint-scope@npm:^7.2.2": - version: 7.2.2 - resolution: "eslint-scope@npm:7.2.2" - dependencies: - esrecurse: ^4.3.0 - estraverse: ^5.2.0 - checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": - version: 3.4.3 - resolution: "eslint-visitor-keys@npm:3.4.3" - checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 - languageName: node - linkType: hard - -"eslint@npm:^8.51.0": - version: 8.51.0 - resolution: "eslint@npm:8.51.0" - dependencies: - "@eslint-community/eslint-utils": ^4.2.0 - "@eslint-community/regexpp": ^4.6.1 - "@eslint/eslintrc": ^2.1.2 - "@eslint/js": 8.51.0 - "@humanwhocodes/config-array": ^0.11.11 - "@humanwhocodes/module-importer": ^1.0.1 - "@nodelib/fs.walk": ^1.2.8 - ajv: ^6.12.4 - chalk: ^4.0.0 - cross-spawn: ^7.0.2 - debug: ^4.3.2 - doctrine: ^3.0.0 - escape-string-regexp: ^4.0.0 - eslint-scope: ^7.2.2 - eslint-visitor-keys: ^3.4.3 - espree: ^9.6.1 - esquery: ^1.4.2 - esutils: ^2.0.2 - fast-deep-equal: ^3.1.3 - file-entry-cache: ^6.0.1 - find-up: ^5.0.0 - glob-parent: ^6.0.2 - globals: ^13.19.0 - graphemer: ^1.4.0 - ignore: ^5.2.0 - imurmurhash: ^0.1.4 - is-glob: ^4.0.0 - is-path-inside: ^3.0.3 - js-yaml: ^4.1.0 - json-stable-stringify-without-jsonify: ^1.0.1 - levn: ^0.4.1 - lodash.merge: ^4.6.2 - minimatch: ^3.1.2 - natural-compare: ^1.4.0 - optionator: ^0.9.3 - strip-ansi: ^6.0.1 - text-table: ^0.2.0 - bin: - eslint: bin/eslint.js - checksum: 214fa5d1fcb67af1b8992ce9584ccd85e1aa7a482f8b8ea5b96edc28fa838a18a3b69456db45fc1ed3ef95f1e9efa9714f737292dc681e572d471d02fda9649c - languageName: node - linkType: hard - -"espree@npm:^9.6.0, espree@npm:^9.6.1": - version: 9.6.1 - resolution: "espree@npm:9.6.1" - dependencies: - acorn: ^8.9.0 - acorn-jsx: ^5.3.2 - eslint-visitor-keys: ^3.4.1 - checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 - languageName: node - linkType: hard - -"esquery@npm:^1.4.2": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" - dependencies: - estraverse: ^5.1.0 - checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: ^5.2.0 - checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 - languageName: node - linkType: hard - -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.9": - version: 3.3.1 - resolution: "fast-glob@npm:3.3.1" - dependencies: - "@nodelib/fs.stat": ^2.0.2 - "@nodelib/fs.walk": ^1.2.3 - glob-parent: ^5.1.2 - merge2: ^1.3.0 - micromatch: ^4.0.4 - checksum: b6f3add6403e02cf3a798bfbb1183d0f6da2afd368f27456010c0bc1f9640aea308243d4cb2c0ab142f618276e65ecb8be1661d7c62a7b4e5ba774b9ce5432e5 - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb - languageName: node - linkType: hard - -"fast-levenshtein@npm:^2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.15.0 - resolution: "fastq@npm:1.15.0" - dependencies: - reusify: ^1.0.4 - checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a - languageName: node - linkType: hard - -"fecha@npm:^4.2.0": - version: 4.2.3 - resolution: "fecha@npm:4.2.3" - checksum: f94e2fb3acf5a7754165d04549460d3ae6c34830394d20c552197e3e000035d69732d74af04b9bed3283bf29fe2a9ebdcc0085e640b0be3cc3658b9726265e31 - languageName: node - linkType: hard - -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" - dependencies: - flat-cache: ^3.0.4 - checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 - languageName: node - linkType: hard - -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" - dependencies: - to-regex-range: ^5.0.1 - checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 - languageName: node - linkType: hard - -"find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" - dependencies: - locate-path: ^6.0.0 - path-exists: ^4.0.0 - checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 - languageName: node - linkType: hard - -"flat-cache@npm:^3.0.4": - version: 3.1.1 - resolution: "flat-cache@npm:3.1.1" - dependencies: - flatted: ^3.2.9 - keyv: ^4.5.3 - rimraf: ^3.0.2 - checksum: 4958cfe0f46acf84953d4e16676ef5f0d38eab3a92d532a1e8d5f88f11eea8b36d5d598070ff2aeae15f1fde18f8d7d089eefaf9db10b5a587cc1c9072325c7a - languageName: node - linkType: hard - -"flatted@npm:^3.2.9": - version: 3.2.9 - resolution: "flatted@npm:3.2.9" - checksum: f14167fbe26a9d20f6fca8d998e8f1f41df72c8e81f9f2c9d61ed2bea058248f5e1cbd05e7f88c0e5087a6a0b822a1e5e2b446e879f3cfbe0b07ba2d7f80b026 - languageName: node - linkType: hard - -"fn.name@npm:1.x.x": - version: 1.1.0 - resolution: "fn.name@npm:1.1.0" - checksum: e357144f48cfc9a7f52a82bbc6c23df7c8de639fce049cac41d41d62cabb740cdb9f14eddc6485e29c933104455bdd7a69bb14a9012cef9cd4fa252a4d0cf293 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.15.0": - version: 1.15.3 - resolution: "follow-redirects@npm:1.15.3" - peerDependenciesMeta: - debug: - optional: true - checksum: 584da22ec5420c837bd096559ebfb8fe69d82512d5585004e36a3b4a6ef6d5905780e0c74508c7b72f907d1fa2b7bd339e613859e9c304d0dc96af2027fd0231 - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.1.1 - resolution: "foreground-child@npm:3.1.1" - dependencies: - cross-spawn: ^7.0.0 - signal-exit: ^4.0.1 - checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 - languageName: node - linkType: hard - -"form-data@npm:^4.0.0": - version: 4.0.0 - resolution: "form-data@npm:4.0.0" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.8 - mime-types: ^2.1.12 - checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c - languageName: node - linkType: hard - -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: ^3.0.0 - checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: ^7.0.3 - checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 - languageName: node - linkType: hard - -"fsevents@npm:~2.3.2": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: latest - checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@~2.3.2#~builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" - dependencies: - node-gyp: latest - conditions: os=darwin - languageName: node - linkType: hard - -"gauge@npm:^4.0.3": - version: 4.0.4 - resolution: "gauge@npm:4.0.4" - dependencies: - aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.3 - console-control-strings: ^1.1.0 - has-unicode: ^2.0.1 - signal-exit: ^3.0.7 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - wide-align: ^1.1.5 - checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: ^4.0.1 - checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e - languageName: node - linkType: hard - -"glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: ^4.0.3 - checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 - languageName: node - linkType: hard - -"glob@npm:^10.2.2": - version: 10.3.10 - resolution: "glob@npm:10.3.10" - dependencies: - foreground-child: ^3.1.0 - jackspeak: ^2.3.5 - minimatch: ^9.0.1 - minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 - path-scurry: ^1.10.1 - bin: - glob: dist/esm/bin.mjs - checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 - languageName: node - linkType: hard - -"glob@npm:^7.1.3, glob@npm:^7.1.4": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - 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 - checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 - languageName: node - linkType: hard - -"globals@npm:^13.19.0": - version: 13.23.0 - resolution: "globals@npm:13.23.0" - dependencies: - type-fest: ^0.20.2 - checksum: 194c97cf8d1ef6ba59417234c2386549c4103b6e5f24b1ff1952de61a4753e5d2069435ba629de711a6480b1b1d114a98e2ab27f85e966d5a10c319c3bbd3dc3 - languageName: node - linkType: hard - -"globby@npm:^11.1.0": - version: 11.1.0 - resolution: "globby@npm:11.1.0" - dependencies: - array-union: ^2.1.0 - dir-glob: ^3.0.1 - fast-glob: ^3.2.9 - ignore: ^5.2.0 - merge2: ^1.4.1 - slash: ^3.0.0 - checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.2.6": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 - languageName: node - linkType: hard - -"graphemer@npm:^1.4.0": - version: 1.4.0 - resolution: "graphemer@npm:1.4.0" - checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad - languageName: node - linkType: hard - -"has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "http-proxy-agent@npm:5.0.0" - dependencies: - "@tootallnate/once": 2 - agent-base: 6 - debug: 4 - checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: 6 - debug: 4 - checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 - languageName: node - linkType: hard - -"humanize-ms@npm:^1.2.1": - version: 1.2.1 - resolution: "humanize-ms@npm:1.2.1" - dependencies: - ms: ^2.0.0 - checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: ">= 2.1.2 < 3.0.0" - checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf - languageName: node - linkType: hard - -"ignore-by-default@npm:^1.0.1": - version: 1.0.1 - resolution: "ignore-by-default@npm:1.0.1" - checksum: 441509147b3615e0365e407a3c18e189f78c07af08564176c680be1fabc94b6c789cad1342ad887175d4ecd5225de86f73d376cec8e06b42fd9b429505ffcf8a - languageName: node - linkType: hard - -"ignore@npm:^5.2.0, ignore@npm:^5.2.4": - version: 5.2.4 - resolution: "ignore@npm:5.2.4" - checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef - languageName: node - linkType: hard - -"import-fresh@npm:^3.2.1": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" - dependencies: - parent-module: ^1.0.0 - resolve-from: ^4.0.0 - checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: ^1.3.0 - wrappy: 1 - checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:^2.0.3": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 - languageName: node - linkType: hard - -"ip@npm:^2.0.0": - version: 2.0.0 - resolution: "ip@npm:2.0.0" - checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 - languageName: node - linkType: hard - -"is-arrayish@npm:^0.3.1": - version: 0.3.2 - resolution: "is-arrayish@npm:0.3.2" - checksum: 977e64f54d91c8f169b59afcd80ff19227e9f5c791fa28fa2e5bce355cbaf6c2c356711b734656e80c9dd4a854dd7efcf7894402f1031dfc5de5d620775b4d5f - languageName: node - linkType: hard - -"is-binary-path@npm:~2.1.0": - version: 2.1.0 - resolution: "is-binary-path@npm:2.1.0" - dependencies: - binary-extensions: ^2.0.0 - checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 - languageName: node - linkType: hard - -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: ^2.1.1 - checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a - languageName: node - linkType: hard - -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 - languageName: node - linkType: hard - -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 - languageName: node - linkType: hard - -"isows@npm:1.0.3": - version: 1.0.3 - resolution: "isows@npm:1.0.3" - peerDependencies: - ws: "*" - checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 - languageName: node - linkType: hard - -"jackspeak@npm:^2.3.5": - version: 2.3.6 - resolution: "jackspeak@npm:2.3.6" - dependencies: - "@isaacs/cliui": ^8.0.2 - "@pkgjs/parseargs": ^0.11.0 - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 - languageName: node - linkType: hard - -"js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" - dependencies: - argparse: ^2.0.1 - bin: - js-yaml: bin/js-yaml.js - checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a - languageName: node - linkType: hard - -"json-buffer@npm:3.0.1": - version: 3.0.1 - resolution: "json-buffer@npm:3.0.1" - checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b - languageName: node - linkType: hard - -"json-stable-stringify-without-jsonify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 - languageName: node - linkType: hard - -"keyv@npm:^4.5.3": - version: 4.5.4 - resolution: "keyv@npm:4.5.4" - dependencies: - json-buffer: 3.0.1 - checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 - languageName: node - linkType: hard - -"kuler@npm:^2.0.0": - version: 2.0.0 - resolution: "kuler@npm:2.0.0" - checksum: 9e10b5a1659f9ed8761d38df3c35effabffbd19fc6107324095238e4ef0ff044392cae9ac64a1c2dda26e532426485342226b93806bd97504b174b0dcf04ed81 - languageName: node - linkType: hard - -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" - dependencies: - prelude-ls: ^1.2.1 - type-check: ~0.4.0 - checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 - languageName: node - linkType: hard - -"locate-path@npm:^6.0.0": - version: 6.0.0 - resolution: "locate-path@npm:6.0.0" - dependencies: - p-locate: ^5.0.0 - checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a - languageName: node - linkType: hard - -"lodash.merge@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.merge@npm:4.6.2" - checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 - languageName: node - linkType: hard - -"logform@npm:^2.3.2, logform@npm:^2.4.0": - version: 2.6.0 - resolution: "logform@npm:2.6.0" - dependencies: - "@colors/colors": 1.6.0 - "@types/triple-beam": ^1.3.2 - fecha: ^4.2.0 - ms: ^2.1.1 - safe-stable-stringify: ^2.3.1 - triple-beam: ^1.3.0 - checksum: b9ea74bb75e55379ad0eb3e4d65ae6e8d02bc45b431c218162878bf663997ab9258a73104c2b30e09dd2db288bb83c8bf8748e46689d75f5e7e34cf69378d6df - languageName: node - linkType: hard - -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: ^4.0.0 - checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 - languageName: node - linkType: hard - -"lru-cache@npm:^7.7.1": - version: 7.18.3 - resolution: "lru-cache@npm:7.18.3" - checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 - languageName: node - linkType: hard - -"lru-cache@npm:^9.1.1 || ^10.0.0": - version: 10.0.1 - resolution: "lru-cache@npm:10.0.1" - checksum: 06f8d0e1ceabd76bb6f644a26dbb0b4c471b79c7b514c13c6856113879b3bf369eb7b497dad4ff2b7e2636db202412394865b33c332100876d838ad1372f0181 - languageName: node - linkType: hard - -"make-error@npm:^1.1.1": - version: 1.3.6 - resolution: "make-error@npm:1.3.6" - checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^11.0.3": - version: 11.1.1 - resolution: "make-fetch-happen@npm:11.1.1" - dependencies: - agentkeepalive: ^4.2.1 - cacache: ^17.0.0 - http-cache-semantics: ^4.1.1 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^7.7.1 - minipass: ^5.0.0 - minipass-fetch: ^3.0.0 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - promise-retry: ^2.0.1 - socks-proxy-agent: ^7.0.0 - ssri: ^10.0.0 - checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 - languageName: node - linkType: hard - -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 - languageName: node - linkType: hard - -"micromatch@npm:^4.0.4": - version: 4.0.5 - resolution: "micromatch@npm:4.0.5" - dependencies: - braces: ^3.0.2 - picomatch: ^2.3.1 - checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: 1.52.0 - checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 - languageName: node - linkType: hard - -"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: ^1.1.7 - checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a - languageName: node - linkType: hard - -"minimatch@npm:^9.0.1": - version: 9.0.3 - resolution: "minimatch@npm:9.0.3" - dependencies: - brace-expansion: ^2.0.1 - checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 - languageName: node - linkType: hard - -"minipass-collect@npm:^1.0.2": - version: 1.0.2 - resolution: "minipass-collect@npm:1.0.2" - dependencies: - minipass: ^3.0.0 - checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 - languageName: node - linkType: hard - -"minipass-fetch@npm:^3.0.0": - version: 3.0.4 - resolution: "minipass-fetch@npm:3.0.4" - dependencies: - encoding: ^0.1.13 - minipass: ^7.0.3 - minipass-sized: ^1.0.3 - minizlib: ^2.1.2 - dependenciesMeta: - encoding: - optional: true - checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: ^3.0.0 - checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: ^3.0.0 - checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: ^3.0.0 - checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: ^4.0.0 - checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 - languageName: node - linkType: hard - -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.3": - version: 7.0.4 - resolution: "minipass@npm:7.0.4" - checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 - languageName: node - linkType: hard - -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: ^3.0.0 - yallist: ^4.0.0 - checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 - languageName: node - linkType: hard - -"mkdirp@npm:^1.0.3": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f - languageName: node - linkType: hard - -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f - languageName: node - linkType: hard - -"ms@npm:^2.0.0, ms@npm:^2.1.1": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d - languageName: node - linkType: hard - -"natural-compare@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare@npm:1.4.0" - checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d - languageName: node - linkType: hard - -"negotiator@npm:^0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 - languageName: node - linkType: hard - -"node-cron@npm:^3.0.2": - version: 3.0.2 - resolution: "node-cron@npm:3.0.2" - dependencies: - uuid: 8.3.2 - checksum: dd21585c0d4069a0752022dad9b8380a4393c4783ec78355ffa99ff32b018c3743a35d4ebf9d7c7863949e94e302b440f58c884eb4960e71c7260d817e2d3f25 - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 9.4.0 - resolution: "node-gyp@npm:9.4.0" - dependencies: - env-paths: ^2.2.0 - exponential-backoff: ^3.1.1 - glob: ^7.1.4 - graceful-fs: ^4.2.6 - make-fetch-happen: ^11.0.3 - nopt: ^6.0.0 - npmlog: ^6.0.0 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^2.0.2 - bin: - node-gyp: bin/node-gyp.js - checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 - languageName: node - linkType: hard - -"nodemon@npm:^3.0.1": - version: 3.0.1 - resolution: "nodemon@npm:3.0.1" - dependencies: - chokidar: ^3.5.2 - debug: ^3.2.7 - ignore-by-default: ^1.0.1 - minimatch: ^3.1.2 - pstree.remy: ^1.1.8 - semver: ^7.5.3 - simple-update-notifier: ^2.0.0 - supports-color: ^5.5.0 - touch: ^3.1.0 - undefsafe: ^2.0.5 - bin: - nodemon: bin/nodemon.js - checksum: 6a5d81855760d6617049eccce10ccf02bddb482dab13ceea5280ae595ec7004eee13e7b934368e3f46c37fe4d970342a8c38c99cae7e93e4d7a3ed1c1ecb6acf - languageName: node - linkType: hard - -"nopt@npm:^6.0.0": - version: 6.0.0 - resolution: "nopt@npm:6.0.0" - dependencies: - abbrev: ^1.0.0 - bin: - nopt: bin/nopt.js - checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac - languageName: node - linkType: hard - -"nopt@npm:~1.0.10": - version: 1.0.10 - resolution: "nopt@npm:1.0.10" - dependencies: - abbrev: 1 - bin: - nopt: ./bin/nopt.js - checksum: f62575aceaa3be43f365bf37a596b89bbac2e796b001b6d2e2a85c2140a4e378ff919e2753ccba959c4fd344776fc88c29b393bc167fa939fb1513f126f4cd45 - languageName: node - linkType: hard - -"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 - languageName: node - linkType: hard - -"npmlog@npm:^6.0.0": - version: 6.0.2 - resolution: "npmlog@npm:6.0.2" - dependencies: - are-we-there-yet: ^3.0.0 - console-control-strings: ^1.1.0 - gauge: ^4.0.3 - set-blocking: ^2.0.0 - checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a - languageName: node - linkType: hard - -"once@npm:^1.3.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: 1 - checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 - languageName: node - linkType: hard - -"one-time@npm:^1.0.0": - version: 1.0.0 - resolution: "one-time@npm:1.0.0" - dependencies: - fn.name: 1.x.x - checksum: fd008d7e992bdec1c67f53a2f9b46381ee12a9b8c309f88b21f0223546003fb47e8ad7c1fd5843751920a8d276c63bd4b45670ef80c61fb3e07dbccc962b5c7d - languageName: node - linkType: hard - -"optionator@npm:^0.9.3": - version: 0.9.3 - resolution: "optionator@npm:0.9.3" - dependencies: - "@aashutoshrathi/word-wrap": ^1.2.3 - deep-is: ^0.1.3 - fast-levenshtein: ^2.0.6 - levn: ^0.4.1 - prelude-ls: ^1.2.1 - type-check: ^0.4.0 - checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a - languageName: node - linkType: hard - -"p-limit@npm:^3.0.2": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: ^0.1.0 - checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 - languageName: node - linkType: hard - -"p-locate@npm:^5.0.0": - version: 5.0.0 - resolution: "p-locate@npm:5.0.0" - dependencies: - p-limit: ^3.0.2 - checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 - languageName: node - linkType: hard - -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: ^3.0.0 - checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c - languageName: node - linkType: hard - -"parent-module@npm:^1.0.0": - version: 1.0.1 - resolution: "parent-module@npm:1.0.1" - dependencies: - callsites: ^3.0.0 - checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 - languageName: node - linkType: hard - -"path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 - languageName: node - linkType: hard - -"path-scurry@npm:^1.10.1": - version: 1.10.1 - resolution: "path-scurry@npm:1.10.1" - dependencies: - lru-cache: ^9.1.1 || ^10.0.0 - minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 - checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 - languageName: node - linkType: hard - -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf - languageName: node - linkType: hard - -"prelude-ls@npm:^1.2.1": - version: 1.2.1 - resolution: "prelude-ls@npm:1.2.1" - checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a - languageName: node - linkType: hard - -"prettier@npm:^3.0.3": - version: 3.0.3 - resolution: "prettier@npm:3.0.3" - bin: - prettier: bin/prettier.cjs - checksum: e10b9af02b281f6c617362ebd2571b1d7fc9fb8a3bd17e371754428cda992e5e8d8b7a046e8f7d3e2da1dcd21aa001e2e3c797402ebb6111b5cd19609dd228e0 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: ^2.0.2 - retry: ^0.12.0 - checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 - languageName: node - linkType: hard - -"pstree.remy@npm:^1.1.8": - version: 1.1.8 - resolution: "pstree.remy@npm:1.1.8" - checksum: 5cb53698d6bb34dfb278c8a26957964aecfff3e161af5fbf7cee00bbe9d8547c7aced4bd9cb193bce15fb56e9e4220fc02a5bf9c14345ffb13a36b858701ec2d - languageName: node - linkType: hard - -"punycode@npm:^2.1.0": - version: 2.3.0 - resolution: "punycode@npm:2.3.0" - checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 - languageName: node - linkType: hard - -"readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" - dependencies: - inherits: ^2.0.3 - string_decoder: ^1.1.1 - util-deprecate: ^1.0.1 - checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d - languageName: node - linkType: hard - -"readdirp@npm:~3.6.0": - version: 3.6.0 - resolution: "readdirp@npm:3.6.0" - dependencies: - picomatch: ^2.2.1 - checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 - languageName: node - linkType: hard - -"reporter@workspace:.": - version: 0.0.0-use.local - resolution: "reporter@workspace:." - dependencies: - "@types/node": ^20.8.6 - "@types/node-cron": ^3.0.9 - "@typescript-eslint/eslint-plugin": ^6.7.5 - "@typescript-eslint/parser": ^6.7.5 - axios: ^1.5.1 - dotenv: ^16.3.1 - eslint: ^8.51.0 - eslint-config-prettier: ^9.0.0 - node-cron: ^3.0.2 - nodemon: ^3.0.1 - prettier: ^3.0.3 - ts-node: ^10.9.1 - typescript: ^5.2.2 - viem: ^1.16.5 - winston: ^3.11.0 - languageName: unknown - linkType: soft - -"resolve-from@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc - languageName: node - linkType: hard - -"rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: ^7.1.3 - bin: - rimraf: bin.js - checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: ^1.2.2 - checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d - languageName: node - linkType: hard - -"safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 - languageName: node - linkType: hard - -"safe-stable-stringify@npm:^2.3.1": - version: 2.4.3 - resolution: "safe-stable-stringify@npm:2.4.3" - checksum: 3aeb64449706ee1f5ad2459fc99648b131d48e7a1fbb608d7c628020177512dc9d94108a5cb61bbc953985d313d0afea6566d243237743e02870490afef04b43 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 - languageName: node - linkType: hard - -"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4": - version: 7.5.4 - resolution: "semver@npm:7.5.4" - dependencies: - lru-cache: ^6.0.0 - bin: - semver: bin/semver.js - checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: ^3.0.0 - checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.7": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 - languageName: node - linkType: hard - -"signal-exit@npm:^4.0.1": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 - languageName: node - linkType: hard - -"simple-swizzle@npm:^0.2.2": - version: 0.2.2 - resolution: "simple-swizzle@npm:0.2.2" - dependencies: - is-arrayish: ^0.3.1 - checksum: a7f3f2ab5c76c4472d5c578df892e857323e452d9f392e1b5cf74b74db66e6294a1e1b8b390b519fa1b96b5b613f2a37db6cffef52c3f1f8f3c5ea64eb2d54c0 - languageName: node - linkType: hard - -"simple-update-notifier@npm:^2.0.0": - version: 2.0.0 - resolution: "simple-update-notifier@npm:2.0.0" - dependencies: - semver: ^7.5.3 - checksum: 9ba00d38ce6a29682f64a46213834e4eb01634c2f52c813a9a7b8873ca49cdbb703696f3290f3b27dc067de6d9418b0b84bef22c3eb074acf352529b2d6c27fd - languageName: node - linkType: hard - -"slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^7.0.0": - version: 7.0.0 - resolution: "socks-proxy-agent@npm:7.0.0" - dependencies: - agent-base: ^6.0.2 - debug: ^4.3.3 - socks: ^2.6.2 - checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 - languageName: node - linkType: hard - -"socks@npm:^2.6.2": - version: 2.7.1 - resolution: "socks@npm:2.7.1" - dependencies: - ip: ^2.0.0 - smart-buffer: ^4.2.0 - checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 - languageName: node - linkType: hard - -"ssri@npm:^10.0.0": - version: 10.0.5 - resolution: "ssri@npm:10.0.5" - dependencies: - minipass: ^7.0.3 - checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 - languageName: node - linkType: hard - -"stack-trace@npm:0.0.x": - version: 0.0.10 - resolution: "stack-trace@npm:0.0.10" - checksum: 473036ad32f8c00e889613153d6454f9be0536d430eb2358ca51cad6b95cea08a3cc33cc0e34de66b0dad221582b08ed2e61ef8e13f4087ab690f388362d6610 - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.3": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: ^8.0.0 - is-fullwidth-code-point: ^3.0.0 - strip-ansi: ^6.0.1 - checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb - languageName: node - linkType: hard - -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: ^0.2.0 - emoji-regex: ^9.2.2 - strip-ansi: ^7.0.1 - checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 - languageName: node - linkType: hard - -"string_decoder@npm:^1.1.1": - version: 1.3.0 - resolution: "string_decoder@npm:1.3.0" - dependencies: - safe-buffer: ~5.2.0 - checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 - languageName: node - linkType: hard - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: ^5.0.1 - checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1": - version: 7.1.0 - resolution: "strip-ansi@npm:7.1.0" - dependencies: - ansi-regex: ^6.0.1 - checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d - languageName: node - linkType: hard - -"strip-json-comments@npm:^3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 - languageName: node - linkType: hard - -"supports-color@npm:^5.5.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: ^3.0.0 - checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac - languageName: node - linkType: hard - -"supports-color@npm:^7.1.0": - version: 7.2.0 - resolution: "supports-color@npm:7.2.0" - dependencies: - has-flag: ^4.0.0 - checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a - languageName: node - linkType: hard - -"tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.2.0 - resolution: "tar@npm:6.2.0" - dependencies: - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - minipass: ^5.0.0 - minizlib: ^2.1.1 - mkdirp: ^1.0.3 - yallist: ^4.0.0 - checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c - languageName: node - linkType: hard - -"text-hex@npm:1.0.x": - version: 1.0.0 - resolution: "text-hex@npm:1.0.0" - checksum: 1138f68adc97bf4381a302a24e2352f04992b7b1316c5003767e9b0d3367ffd0dc73d65001ea02b07cd0ecc2a9d186de0cf02f3c2d880b8a522d4ccb9342244a - languageName: node - linkType: hard - -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: ^7.0.0 - checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed - languageName: node - linkType: hard - -"touch@npm:^3.1.0": - version: 3.1.0 - resolution: "touch@npm:3.1.0" - dependencies: - nopt: ~1.0.10 - bin: - nodetouch: ./bin/nodetouch.js - checksum: e0be589cb5b0e6dbfce6e7e077d4a0d5f0aba558ef769c6d9c33f635e00d73d5be49da6f8631db302ee073919d82b5b7f56da2987feb28765c95a7673af68647 - languageName: node - linkType: hard - -"triple-beam@npm:^1.3.0": - version: 1.4.1 - resolution: "triple-beam@npm:1.4.1" - checksum: 2e881a3e8e076b6f2b85b9ec9dd4a900d3f5016e6d21183ed98e78f9abcc0149e7d54d79a3f432b23afde46b0885bdcdcbff789f39bc75de796316961ec07f61 - languageName: node - linkType: hard - -"ts-api-utils@npm:^1.0.1": - version: 1.0.3 - resolution: "ts-api-utils@npm:1.0.3" - peerDependencies: - typescript: ">=4.2.0" - checksum: 441cc4489d65fd515ae6b0f4eb8690057add6f3b6a63a36073753547fb6ce0c9ea0e0530220a0b282b0eec535f52c4dfc315d35f8a4c9a91c0def0707a714ca6 - languageName: node - linkType: hard - -"ts-node@npm:^10.9.1": - version: 10.9.1 - resolution: "ts-node@npm:10.9.1" - dependencies: - "@cspotcode/source-map-support": ^0.8.0 - "@tsconfig/node10": ^1.0.7 - "@tsconfig/node12": ^1.0.7 - "@tsconfig/node14": ^1.0.0 - "@tsconfig/node16": ^1.0.2 - acorn: ^8.4.1 - acorn-walk: ^8.1.1 - arg: ^4.1.0 - create-require: ^1.1.0 - diff: ^4.0.1 - make-error: ^1.1.1 - v8-compile-cache-lib: ^3.0.1 - yn: 3.1.1 - peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" - peerDependenciesMeta: - "@swc/core": - optional: true - "@swc/wasm": - optional: true - bin: - ts-node: dist/bin.js - ts-node-cwd: dist/bin-cwd.js - ts-node-esm: dist/bin-esm.js - ts-node-script: dist/bin-script.js - ts-node-transpile-only: dist/bin-transpile.js - ts-script: dist/bin-script-deprecated.js - checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 - languageName: node - linkType: hard - -"type-check@npm:^0.4.0, type-check@npm:~0.4.0": - version: 0.4.0 - resolution: "type-check@npm:0.4.0" - dependencies: - prelude-ls: ^1.2.1 - checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a - languageName: node - linkType: hard - -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 - languageName: node - linkType: hard - -"typescript@npm:^5.2.2": - version: 5.2.2 - resolution: "typescript@npm:5.2.2" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 7912821dac4d962d315c36800fe387cdc0a6298dba7ec171b350b4a6e988b51d7b8f051317786db1094bd7431d526b648aba7da8236607febb26cf5b871d2d3c - languageName: node - linkType: hard - -"typescript@patch:typescript@^5.2.2#~builtin": - version: 5.2.2 - resolution: "typescript@patch:typescript@npm%3A5.2.2#~builtin::version=5.2.2&hash=7ad353" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 07106822b4305de3f22835cbba949a2b35451cad50888759b6818421290ff95d522b38ef7919e70fb381c5fe9c1c643d7dea22c8b31652a717ddbd57b7f4d554 - languageName: node - linkType: hard - -"undefsafe@npm:^2.0.5": - version: 2.0.5 - resolution: "undefsafe@npm:2.0.5" - checksum: f42ab3b5770fedd4ada175fc1b2eb775b78f609156f7c389106aafd231bfc210813ee49f54483d7191d7b76e483bc7f537b5d92d19ded27156baf57592eb02cc - languageName: node - linkType: hard - -"undici-types@npm:~5.25.1": - version: 5.25.3 - resolution: "undici-types@npm:5.25.3" - checksum: ec9d2cc36520cbd9fbe3b3b6c682a87fe5be214699e1f57d1e3d9a2cb5be422e62735f06e0067dc325fd3dd7404c697e4d479f9147dc8a804e049e29f357f2ff - languageName: node - linkType: hard - -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" - dependencies: - unique-slug: ^4.0.0 - checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df - languageName: node - linkType: hard - -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" - dependencies: - imurmurhash: ^0.1.4 - checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: ^2.1.0 - checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.1": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 - languageName: node - linkType: hard - -"uuid@npm:8.3.2": - version: 8.3.2 - resolution: "uuid@npm:8.3.2" - bin: - uuid: dist/bin/uuid - checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df - languageName: node - linkType: hard - -"v8-compile-cache-lib@npm:^3.0.1": - version: 3.0.1 - resolution: "v8-compile-cache-lib@npm:3.0.1" - checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 - languageName: node - linkType: hard - -"viem@npm:^1.16.5": - version: 1.16.6 - resolution: "viem@npm:1.16.6" - dependencies: - "@adraffy/ens-normalize": 1.9.4 - "@noble/curves": 1.2.0 - "@noble/hashes": 1.3.2 - "@scure/bip32": 1.3.2 - "@scure/bip39": 1.2.1 - abitype: 0.9.8 - isows: 1.0.3 - ws: 8.13.0 - peerDependencies: - typescript: ">=5.0.4" - peerDependenciesMeta: - typescript: - optional: true - checksum: 2f116cad184cfc7a9584073451549edfb23c3847b1784f092b80a279b848fe011a054bc4141c923b5bcce1d8493db98284db65416ce72e8ba522225d02786a9a - languageName: node - linkType: hard - -"which@npm:^2.0.1, which@npm:^2.0.2": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: ^2.0.0 - bin: - node-which: ./bin/node-which - checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 - languageName: node - linkType: hard - -"wide-align@npm:^1.1.5": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: ^1.0.2 || 2 || 3 || 4 - checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 - languageName: node - linkType: hard - -"winston-transport@npm:^4.5.0": - version: 4.6.0 - resolution: "winston-transport@npm:4.6.0" - dependencies: - logform: ^2.3.2 - readable-stream: ^3.6.0 - triple-beam: ^1.3.0 - checksum: 19f06ebdbb57cb14cdd48a23145d418d3bbe538851053303f84f04a8a849bb530b78b1495a175059c1299f92945dc61d5421c4914fee32d9a41bc397d84f26d7 - languageName: node - linkType: hard - -"winston@npm:^3.11.0": - version: 3.11.0 - resolution: "winston@npm:3.11.0" - dependencies: - "@colors/colors": ^1.6.0 - "@dabh/diagnostics": ^2.0.2 - async: ^3.2.3 - is-stream: ^2.0.0 - logform: ^2.4.0 - one-time: ^1.0.0 - readable-stream: ^3.4.0 - safe-stable-stringify: ^2.3.1 - stack-trace: 0.0.x - triple-beam: ^1.3.0 - winston-transport: ^4.5.0 - checksum: ca4454070f7a71b19f53c8c1765c59a013dab220edb49161b2e81917751d3e9edc3382430e4fb050feda04fb8463290ecab7cbc9240ec8d3d3b32a121849bbb0 - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: ^6.1.0 - string-width: ^5.0.1 - strip-ansi: ^7.0.1 - checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 - languageName: node - linkType: hard - -"ws@npm:8.13.0": - version: 8.13.0 - resolution: "ws@npm:8.13.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 - languageName: node - linkType: hard - -"yn@npm:3.1.1": - version: 3.1.1 - resolution: "yn@npm:3.1.1" - checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 - languageName: node - linkType: hard +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aashutoshrathi/word-wrap@^1.2.3": + "version" "1.2.6" + +"@adraffy/ens-normalize@1.9.4": + "version" "1.9.4" + +"@colors/colors@^1.6.0", "@colors/colors@1.6.0": + "integrity" "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==" + "resolved" "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz" + "version" "1.6.0" + +"@cspotcode/source-map-support@^0.8.0": + "version" "0.8.1" + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@dabh/diagnostics@^2.0.2": + "integrity" "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==" + "resolved" "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz" + "version" "2.0.3" + dependencies: + "colorspace" "1.1.x" + "enabled" "2.0.x" + "kuler" "^2.0.0" + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + "version" "4.4.0" + dependencies: + "eslint-visitor-keys" "^3.3.0" + +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + "version" "4.9.1" + +"@eslint/eslintrc@^2.1.2": + "version" "2.1.2" + dependencies: + "ajv" "^6.12.4" + "debug" "^4.3.2" + "espree" "^9.6.0" + "globals" "^13.19.0" + "ignore" "^5.2.0" + "import-fresh" "^3.2.1" + "js-yaml" "^4.1.0" + "minimatch" "^3.1.2" + "strip-json-comments" "^3.1.1" + +"@eslint/js@8.51.0": + "version" "8.51.0" + +"@humanwhocodes/config-array@^0.11.11": + "version" "0.11.11" + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + "debug" "^4.1.1" + "minimatch" "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + "version" "1.0.1" + +"@humanwhocodes/object-schema@^1.2.1": + "version" "1.2.1" + +"@jridgewell/resolve-uri@^3.0.3": + "version" "3.1.1" + +"@jridgewell/sourcemap-codec@^1.4.10": + "version" "1.4.15" + +"@jridgewell/trace-mapping@0.3.9": + "version" "0.3.9" + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@noble/curves@~1.2.0", "@noble/curves@1.2.0": + "version" "1.2.0" + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2", "@noble/hashes@1.3.2": + "version" "1.3.2" + +"@nodelib/fs.scandir@2.1.5": + "version" "2.1.5" + dependencies: + "@nodelib/fs.stat" "2.0.5" + "run-parallel" "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "version" "2.0.5" + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + "version" "1.2.8" + dependencies: + "@nodelib/fs.scandir" "2.1.5" + "fastq" "^1.6.0" + +"@scure/base@~1.1.0", "@scure/base@~1.1.2": + "version" "1.1.3" + +"@scure/bip32@1.3.2": + "version" "1.3.2" + dependencies: + "@noble/curves" "~1.2.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.2" + +"@scure/bip39@1.2.1": + "version" "1.2.1" + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + +"@tsconfig/node10@^1.0.7": + "version" "1.0.9" + +"@tsconfig/node12@^1.0.7": + "version" "1.0.11" + +"@tsconfig/node14@^1.0.0": + "version" "1.0.3" + +"@tsconfig/node16@^1.0.2": + "version" "1.0.4" + +"@types/json-schema@^7.0.12": + "version" "7.0.13" + +"@types/node-cron@^3.0.9": + "integrity" "sha512-P10Vf+oagnMbefD31nqjS/dpBM34qzfdpvIgVZwtwsNb0Hg2lDaPFeGcyGUJIqh3zHlDMwYXGeunGgMnswgnPg==" + "resolved" "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.9.tgz" + "version" "3.0.9" + +"@types/node@*", "@types/node@^20.8.6": + "integrity" "sha512-eWO4K2Ji70QzKUqRy6oyJWUeB7+g2cRagT3T/nxYibYcT4y2BDL8lqolRXjTHmkZCdJfIPaY73KbJAZmcryxTQ==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-20.8.6.tgz" + "version" "20.8.6" + dependencies: + "undici-types" "~5.25.1" + +"@types/semver@^7.5.0": + "version" "7.5.3" + +"@types/triple-beam@^1.3.2": + "integrity" "sha512-HlJjF3wxV4R2VQkFpKe0YqJLilYNgtRtsqqZtby7RkVsSs+i+vbyzjtUwpFEdUCKcrGzCiEJE7F/0mKjh0sunA==" + "resolved" "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.4.tgz" + "version" "1.3.4" + +"@typescript-eslint/eslint-plugin@^6.7.5": + "version" "6.7.5" + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.7.5" + "@typescript-eslint/type-utils" "6.7.5" + "@typescript-eslint/utils" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" + "debug" "^4.3.4" + "graphemer" "^1.4.0" + "ignore" "^5.2.4" + "natural-compare" "^1.4.0" + "semver" "^7.5.4" + "ts-api-utils" "^1.0.1" + +"@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@^6.7.5": + "version" "6.7.5" + dependencies: + "@typescript-eslint/scope-manager" "6.7.5" + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/typescript-estree" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" + "debug" "^4.3.4" + +"@typescript-eslint/scope-manager@6.7.5": + "version" "6.7.5" + dependencies: + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" + +"@typescript-eslint/type-utils@6.7.5": + "version" "6.7.5" + dependencies: + "@typescript-eslint/typescript-estree" "6.7.5" + "@typescript-eslint/utils" "6.7.5" + "debug" "^4.3.4" + "ts-api-utils" "^1.0.1" + +"@typescript-eslint/types@6.7.5": + "version" "6.7.5" + +"@typescript-eslint/typescript-estree@6.7.5": + "version" "6.7.5" + dependencies: + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" + "debug" "^4.3.4" + "globby" "^11.1.0" + "is-glob" "^4.0.3" + "semver" "^7.5.4" + "ts-api-utils" "^1.0.1" + +"@typescript-eslint/utils@6.7.5": + "version" "6.7.5" + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.7.5" + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/typescript-estree" "6.7.5" + "semver" "^7.5.4" + +"@typescript-eslint/visitor-keys@6.7.5": + "version" "6.7.5" + dependencies: + "@typescript-eslint/types" "6.7.5" + "eslint-visitor-keys" "^3.4.1" + +"abbrev@1": + "version" "1.1.1" + +"abitype@0.9.8": + "version" "0.9.8" + +"acorn-jsx@^5.3.2": + "version" "5.3.2" + +"acorn-walk@^8.1.1": + "version" "8.2.0" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8.4.1", "acorn@^8.9.0": + "version" "8.10.0" + +"ajv@^6.12.4": + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ansi-regex@^5.0.1": + "version" "5.0.1" + +"ansi-styles@^4.1.0": + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"anymatch@~3.1.2": + "version" "3.1.3" + dependencies: + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" + +"arg@^4.1.0": + "version" "4.1.3" + +"argparse@^2.0.1": + "version" "2.0.1" + +"array-union@^2.1.0": + "version" "2.1.0" + +"async@^3.2.3": + "integrity" "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + "version" "3.2.4" + +"asynckit@^0.4.0": + "version" "0.4.0" + +"axios@^1.5.1": + "version" "1.5.1" + dependencies: + "follow-redirects" "^1.15.0" + "form-data" "^4.0.0" + "proxy-from-env" "^1.1.0" + +"balanced-match@^1.0.0": + "version" "1.0.2" + +"binary-extensions@^2.0.0": + "version" "2.2.0" + +"brace-expansion@^1.1.7": + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"braces@^3.0.2", "braces@~3.0.2": + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"callsites@^3.0.0": + "version" "3.1.0" + +"chalk@^4.0.0": + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chokidar@^3.5.2": + "version" "3.5.3" + 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@^1.9.3": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-convert@^2.0.1": + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" + +"color-name@^1.0.0", "color-name@~1.1.4": + "version" "1.1.4" + +"color-name@1.1.3": + "integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"color-string@^1.6.0": + "integrity" "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==" + "resolved" "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" + "version" "1.9.1" + dependencies: + "color-name" "^1.0.0" + "simple-swizzle" "^0.2.2" + +"color@^3.1.3": + "integrity" "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==" + "resolved" "https://registry.npmjs.org/color/-/color-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.3" + "color-string" "^1.6.0" + +"colorspace@1.1.x": + "integrity" "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==" + "resolved" "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz" + "version" "1.1.4" + dependencies: + "color" "^3.1.3" + "text-hex" "1.0.x" + +"combined-stream@^1.0.8": + "version" "1.0.8" + dependencies: + "delayed-stream" "~1.0.0" + +"concat-map@0.0.1": + "version" "0.0.1" + +"create-require@^1.1.0": + "version" "1.1.1" + +"cross-spawn@^7.0.2": + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" + +"debug@^3.2.7": + "version" "3.2.7" + dependencies: + "ms" "^2.1.1" + +"debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.4": + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + +"deep-is@^0.1.3": + "version" "0.1.4" + +"delayed-stream@~1.0.0": + "version" "1.0.0" + +"diff@^4.0.1": + "version" "4.0.2" + +"dir-glob@^3.0.1": + "version" "3.0.1" + dependencies: + "path-type" "^4.0.0" + +"doctrine@^3.0.0": + "version" "3.0.0" + dependencies: + "esutils" "^2.0.2" + +"dotenv@^16.3.1": + "version" "16.3.1" + +"enabled@2.0.x": + "integrity" "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + "resolved" "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz" + "version" "2.0.0" + +"escape-string-regexp@^4.0.0": + "version" "4.0.0" + +"eslint-config-prettier@^9.0.0": + "version" "9.0.0" + +"eslint-scope@^7.2.2": + "version" "7.2.2" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^5.2.0" + +"eslint-visitor-keys@^3.3.0", "eslint-visitor-keys@^3.4.1", "eslint-visitor-keys@^3.4.3": + "version" "3.4.3" + +"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^8.51.0", "eslint@>=7.0.0": + "version" "8.51.0" + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.51.0" + "@humanwhocodes/config-array" "^0.11.11" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "ajv" "^6.12.4" + "chalk" "^4.0.0" + "cross-spawn" "^7.0.2" + "debug" "^4.3.2" + "doctrine" "^3.0.0" + "escape-string-regexp" "^4.0.0" + "eslint-scope" "^7.2.2" + "eslint-visitor-keys" "^3.4.3" + "espree" "^9.6.1" + "esquery" "^1.4.2" + "esutils" "^2.0.2" + "fast-deep-equal" "^3.1.3" + "file-entry-cache" "^6.0.1" + "find-up" "^5.0.0" + "glob-parent" "^6.0.2" + "globals" "^13.19.0" + "graphemer" "^1.4.0" + "ignore" "^5.2.0" + "imurmurhash" "^0.1.4" + "is-glob" "^4.0.0" + "is-path-inside" "^3.0.3" + "js-yaml" "^4.1.0" + "json-stable-stringify-without-jsonify" "^1.0.1" + "levn" "^0.4.1" + "lodash.merge" "^4.6.2" + "minimatch" "^3.1.2" + "natural-compare" "^1.4.0" + "optionator" "^0.9.3" + "strip-ansi" "^6.0.1" + "text-table" "^0.2.0" + +"espree@^9.6.0", "espree@^9.6.1": + "version" "9.6.1" + dependencies: + "acorn" "^8.9.0" + "acorn-jsx" "^5.3.2" + "eslint-visitor-keys" "^3.4.1" + +"esquery@^1.4.2": + "version" "1.5.0" + dependencies: + "estraverse" "^5.1.0" + +"esrecurse@^4.3.0": + "version" "4.3.0" + dependencies: + "estraverse" "^5.2.0" + +"estraverse@^5.1.0", "estraverse@^5.2.0": + "version" "5.3.0" + +"esutils@^2.0.2": + "version" "2.0.3" + +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": + "version" "3.1.3" + +"fast-glob@^3.2.9": + "version" "3.3.1" + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" + +"fast-json-stable-stringify@^2.0.0": + "version" "2.1.0" + +"fast-levenshtein@^2.0.6": + "version" "2.0.6" + +"fastq@^1.6.0": + "version" "1.15.0" + dependencies: + "reusify" "^1.0.4" + +"fecha@^4.2.0": + "integrity" "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + "resolved" "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz" + "version" "4.2.3" + +"file-entry-cache@^6.0.1": + "version" "6.0.1" + dependencies: + "flat-cache" "^3.0.4" + +"fill-range@^7.0.1": + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"find-up@^5.0.0": + "version" "5.0.0" + dependencies: + "locate-path" "^6.0.0" + "path-exists" "^4.0.0" + +"flat-cache@^3.0.4": + "version" "3.1.1" + dependencies: + "flatted" "^3.2.9" + "keyv" "^4.5.3" + "rimraf" "^3.0.2" + +"flatted@^3.2.9": + "version" "3.2.9" + +"fn.name@1.x.x": + "integrity" "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + "resolved" "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz" + "version" "1.1.0" + +"follow-redirects@^1.15.0": + "version" "1.15.3" + +"form-data@^4.0.0": + "version" "4.0.0" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" + +"fs.realpath@^1.0.0": + "version" "1.0.0" + +"glob-parent@^5.1.2", "glob-parent@~5.1.2": + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob-parent@^6.0.2": + "version" "6.0.2" + dependencies: + "is-glob" "^4.0.3" + +"glob@^7.1.3": + "version" "7.2.3" + 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" + +"globals@^13.19.0": + "version" "13.23.0" + dependencies: + "type-fest" "^0.20.2" + +"globby@^11.1.0": + "version" "11.1.0" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.2.9" + "ignore" "^5.2.0" + "merge2" "^1.4.1" + "slash" "^3.0.0" + +"graphemer@^1.4.0": + "version" "1.4.0" + +"has-flag@^3.0.0": + "version" "3.0.0" + +"has-flag@^4.0.0": + "version" "4.0.0" + +"ignore-by-default@^1.0.1": + "version" "1.0.1" + +"ignore@^5.2.0", "ignore@^5.2.4": + "version" "5.2.4" + +"import-fresh@^3.2.1": + "version" "3.3.0" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"imurmurhash@^0.1.4": + "version" "0.1.4" + +"inflight@^1.0.4": + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@^2.0.3", "inherits@2": + "version" "2.0.4" + +"is-arrayish@^0.3.1": + "integrity" "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + "version" "0.3.2" + +"is-binary-path@~2.1.0": + "version" "2.1.0" + dependencies: + "binary-extensions" "^2.0.0" + +"is-extglob@^2.1.1": + "version" "2.1.1" + +"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3", "is-glob@~4.0.1": + "version" "4.0.3" + dependencies: + "is-extglob" "^2.1.1" + +"is-number@^7.0.0": + "version" "7.0.0" + +"is-path-inside@^3.0.3": + "version" "3.0.3" + +"is-stream@^2.0.0": + "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + "version" "2.0.1" + +"isexe@^2.0.0": + "version" "2.0.0" + +"isows@1.0.3": + "version" "1.0.3" + +"js-yaml@^4.1.0": + "version" "4.1.0" + dependencies: + "argparse" "^2.0.1" + +"json-buffer@3.0.1": + "version" "3.0.1" + +"json-schema-traverse@^0.4.1": + "version" "0.4.1" + +"json-stable-stringify-without-jsonify@^1.0.1": + "version" "1.0.1" + +"keyv@^4.5.3": + "version" "4.5.4" + dependencies: + "json-buffer" "3.0.1" + +"kuler@^2.0.0": + "integrity" "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + "resolved" "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz" + "version" "2.0.0" + +"levn@^0.4.1": + "version" "0.4.1" + dependencies: + "prelude-ls" "^1.2.1" + "type-check" "~0.4.0" + +"locate-path@^6.0.0": + "version" "6.0.0" + dependencies: + "p-locate" "^5.0.0" + +"lodash.merge@^4.6.2": + "version" "4.6.2" + +"logform@^2.3.2", "logform@^2.4.0": + "integrity" "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==" + "resolved" "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz" + "version" "2.6.0" + dependencies: + "@colors/colors" "1.6.0" + "@types/triple-beam" "^1.3.2" + "fecha" "^4.2.0" + "ms" "^2.1.1" + "safe-stable-stringify" "^2.3.1" + "triple-beam" "^1.3.0" + +"lru-cache@^6.0.0": + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"make-error@^1.1.1": + "version" "1.3.6" + +"merge2@^1.3.0", "merge2@^1.4.1": + "version" "1.4.1" + +"micromatch@^4.0.4": + "version" "4.0.5" + dependencies: + "braces" "^3.0.2" + "picomatch" "^2.3.1" + +"mime-db@1.52.0": + "version" "1.52.0" + +"mime-types@^2.1.12": + "version" "2.1.35" + dependencies: + "mime-db" "1.52.0" + +"minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@^3.1.2": + "version" "3.1.2" + dependencies: + "brace-expansion" "^1.1.7" + +"ms@^2.1.1", "ms@2.1.2": + "version" "2.1.2" + +"natural-compare@^1.4.0": + "version" "1.4.0" + +"nodemon@^3.0.1": + "version" "3.0.1" + dependencies: + "chokidar" "^3.5.2" + "debug" "^3.2.7" + "ignore-by-default" "^1.0.1" + "minimatch" "^3.1.2" + "pstree.remy" "^1.1.8" + "semver" "^7.5.3" + "simple-update-notifier" "^2.0.0" + "supports-color" "^5.5.0" + "touch" "^3.1.0" + "undefsafe" "^2.0.5" + +"nopt@~1.0.10": + "version" "1.0.10" + dependencies: + "abbrev" "1" + +"normalize-path@^3.0.0", "normalize-path@~3.0.0": + "version" "3.0.0" + +"once@^1.3.0": + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"one-time@^1.0.0": + "integrity" "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==" + "resolved" "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "fn.name" "1.x.x" + +"optionator@^0.9.3": + "version" "0.9.3" + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + "deep-is" "^0.1.3" + "fast-levenshtein" "^2.0.6" + "levn" "^0.4.1" + "prelude-ls" "^1.2.1" + "type-check" "^0.4.0" + +"p-limit@^3.0.2": + "version" "3.1.0" + dependencies: + "yocto-queue" "^0.1.0" + +"p-locate@^5.0.0": + "version" "5.0.0" + dependencies: + "p-limit" "^3.0.2" + +"parent-module@^1.0.0": + "version" "1.0.1" + dependencies: + "callsites" "^3.0.0" + +"path-exists@^4.0.0": + "version" "4.0.0" + +"path-is-absolute@^1.0.0": + "version" "1.0.1" + +"path-key@^3.1.0": + "version" "3.1.1" + +"path-type@^4.0.0": + "version" "4.0.0" + +"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.3.1": + "version" "2.3.1" + +"prelude-ls@^1.2.1": + "version" "1.2.1" + +"prettier@^3.0.3": + "version" "3.0.3" + +"proxy-from-env@^1.1.0": + "version" "1.1.0" + +"pstree.remy@^1.1.8": + "version" "1.1.8" + +"punycode@^2.1.0": + "version" "2.3.0" + +"queue-microtask@^1.2.2": + "version" "1.2.3" + +"readable-stream@^3.4.0", "readable-stream@^3.6.0": + "integrity" "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + "version" "3.6.2" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readdirp@~3.6.0": + "version" "3.6.0" + dependencies: + "picomatch" "^2.2.1" + +"resolve-from@^4.0.0": + "version" "4.0.0" + +"reusify@^1.0.4": + "version" "1.0.4" + +"rimraf@^3.0.2": + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"run-parallel@^1.1.9": + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + +"safe-buffer@~5.2.0": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" + +"safe-stable-stringify@^2.3.1": + "integrity" "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" + "resolved" "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" + "version" "2.4.3" + +"semver@^7.5.3", "semver@^7.5.4": + "version" "7.5.4" + dependencies: + "lru-cache" "^6.0.0" + +"shebang-command@^2.0.0": + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + +"shebang-regex@^3.0.0": + "version" "3.0.0" + +"simple-swizzle@^0.2.2": + "integrity" "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==" + "resolved" "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" + "version" "0.2.2" + dependencies: + "is-arrayish" "^0.3.1" + +"simple-update-notifier@^2.0.0": + "version" "2.0.0" + dependencies: + "semver" "^7.5.3" + +"slash@^3.0.0": + "version" "3.0.0" + +"stack-trace@0.0.x": + "integrity" "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==" + "resolved" "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" + "version" "0.0.10" + +"string_decoder@^1.1.1": + "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "safe-buffer" "~5.2.0" + +"strip-ansi@^6.0.1": + "version" "6.0.1" + dependencies: + "ansi-regex" "^5.0.1" + +"strip-json-comments@^3.1.1": + "version" "3.1.1" + +"supports-color@^5.5.0": + "version" "5.5.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@^7.1.0": + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"text-hex@1.0.x": + "integrity" "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + "resolved" "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz" + "version" "1.0.0" + +"text-table@^0.2.0": + "version" "0.2.0" + +"to-regex-range@^5.0.1": + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"touch@^3.1.0": + "version" "3.1.0" + dependencies: + "nopt" "~1.0.10" + +"triple-beam@^1.3.0": + "integrity" "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" + "resolved" "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz" + "version" "1.4.1" + +"ts-api-utils@^1.0.1": + "version" "1.0.3" + +"ts-node@^10.9.1": + "version" "10.9.1" + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + "acorn" "^8.4.1" + "acorn-walk" "^8.1.1" + "arg" "^4.1.0" + "create-require" "^1.1.0" + "diff" "^4.0.1" + "make-error" "^1.1.1" + "v8-compile-cache-lib" "^3.0.1" + "yn" "3.1.1" + +"type-check@^0.4.0", "type-check@~0.4.0": + "version" "0.4.0" + dependencies: + "prelude-ls" "^1.2.1" + +"type-fest@^0.20.2": + "version" "0.20.2" + +"typescript@^5.2.2", "typescript@>=2.7", "typescript@>=4.2.0", "typescript@>=5.0.4": + "version" "5.2.2" + +"undefsafe@^2.0.5": + "version" "2.0.5" + +"undici-types@~5.25.1": + "integrity" "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==" + "resolved" "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz" + "version" "5.25.3" + +"uri-js@^4.2.2": + "version" "4.4.1" + dependencies: + "punycode" "^2.1.0" + +"util-deprecate@^1.0.1": + "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"v8-compile-cache-lib@^3.0.1": + "version" "3.0.1" + +"viem@^1.16.5": + "version" "1.16.5" + dependencies: + "@adraffy/ens-normalize" "1.9.4" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@scure/bip32" "1.3.2" + "@scure/bip39" "1.2.1" + "abitype" "0.9.8" + "isows" "1.0.3" + "ws" "8.13.0" + +"which@^2.0.1": + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"winston-transport@^4.5.0": + "integrity" "sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==" + "resolved" "https://registry.npmjs.org/winston-transport/-/winston-transport-4.6.0.tgz" + "version" "4.6.0" + dependencies: + "logform" "^2.3.2" + "readable-stream" "^3.6.0" + "triple-beam" "^1.3.0" + +"winston@^3.11.0": + "integrity" "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==" + "resolved" "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz" + "version" "3.11.0" + dependencies: + "@colors/colors" "^1.6.0" + "@dabh/diagnostics" "^2.0.2" + "async" "^3.2.3" + "is-stream" "^2.0.0" + "logform" "^2.4.0" + "one-time" "^1.0.0" + "readable-stream" "^3.4.0" + "safe-stable-stringify" "^2.3.1" + "stack-trace" "0.0.x" + "triple-beam" "^1.3.0" + "winston-transport" "^4.5.0" + +"wrappy@1": + "version" "1.0.2" + +"ws@*", "ws@8.13.0": + "version" "8.13.0" + +"yallist@^4.0.0": + "version" "4.0.0" + +"yn@3.1.1": + "version" "3.1.1" + +"yocto-queue@^0.1.0": + "version" "0.1.0" From bf7dd35e58ee37277b8536fc7ae3b099e36c2602 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Tue, 24 Oct 2023 11:43:08 +0800 Subject: [PATCH 09/81] fix: second review --- packages/reporter/.env.example | 6 +- .../src/ABIs/WormholeReporterContractABI.json | 76 ------------------- packages/reporter/src/BlockListener.ts | 2 +- packages/reporter/src/MultiClient.ts | 4 +- .../src/controllers/AMBReporterController.ts | 8 +- .../controllers/SygmaReporterController.ts | 35 ++++----- .../TelepathyReporterController.ts | 9 ++- packages/reporter/src/index.ts | 23 +++--- packages/reporter/src/settings/index.ts | 19 +++++ packages/reporter/src/utils/address.json | 16 ---- packages/reporter/src/utils/settings.json | 15 ---- packages/reporter/src/utils/type.ts | 25 ------ 12 files changed, 57 insertions(+), 181 deletions(-) delete mode 100644 packages/reporter/src/ABIs/WormholeReporterContractABI.json create mode 100644 packages/reporter/src/settings/index.ts delete mode 100644 packages/reporter/src/utils/address.json delete mode 100644 packages/reporter/src/utils/settings.json delete mode 100644 packages/reporter/src/utils/type.ts diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index cd3b3ab9..8a9debe3 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -1,17 +1,15 @@ PRIVATE_KEY= +REPORTERS_ENABLED=amb,sygma + GOERLI_RPC_URL= GNOSIS_RPC_URL= SOURCE_CHAIN=goerli DEST_CHAIN=gnosis - -AMB_CONTROLLER=false GAS=30000 -SYGMA_CONTROLLER=false SYGMA_FEE_DATA=0x -TELEPATHY_CONTROLLER=false TELEPATHY_PROOF_API_URL=https://api.telepathy.xyz/api/hashi/ diff --git a/packages/reporter/src/ABIs/WormholeReporterContractABI.json b/packages/reporter/src/ABIs/WormholeReporterContractABI.json deleted file mode 100644 index 93f84c1f..00000000 --- a/packages/reporter/src/ABIs/WormholeReporterContractABI.json +++ /dev/null @@ -1,76 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "contract IWormhole", - "name": "_wormhole", - "type": "address" - }, - { - "internalType": "contract HeaderStorage", - "name": "_headerStorage", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "headerStorage", - "outputs": [ - { - "internalType": "contract HeaderStorage", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oracleAdapter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "name": "reportHeader", - "outputs": [ - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "wormhole", - "outputs": [ - { - "internalType": "contract IWormhole", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/packages/reporter/src/BlockListener.ts b/packages/reporter/src/BlockListener.ts index fae15207..e027f075 100644 --- a/packages/reporter/src/BlockListener.ts +++ b/packages/reporter/src/BlockListener.ts @@ -2,7 +2,7 @@ import { Chain, publicActions } from "viem" import winston from "winston" import Multiclient from "./MultiClient" -import { BlockListenerConfig } from "./utils/type" +import { BlockListenerConfig } from "./types/index" class BlocksListener { controllers: any[] diff --git a/packages/reporter/src/MultiClient.ts b/packages/reporter/src/MultiClient.ts index 8312a435..6413d584 100644 --- a/packages/reporter/src/MultiClient.ts +++ b/packages/reporter/src/MultiClient.ts @@ -1,4 +1,4 @@ -import { createWalletClient, http, Chain, publicActions } from "viem" +import { createWalletClient, http, Chain, publicActions, WalletClient, PublicClient } from "viem" import { privateKeyToAccount } from "viem/accounts" type ContructorConfigs = { @@ -21,7 +21,7 @@ const getClient = ({ chain, privateKey, rpcUrl }: GetClientsConfigs) => }).extend(publicActions) class Multiclient { - private _clients: { [chainName: string]: any } + private _clients: { [chainName: string]: PublicClient & WalletClient } constructor({ chains, privateKey, rpcUrls }: ContructorConfigs) { this._clients = chains.reduce((_acc: { [chainName: string]: any }, _chain: Chain) => { diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts index c1f4a9fe..5f6426a3 100644 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -5,12 +5,12 @@ import "dotenv/config" import contractABI from "../ABIs/AMBReporterContractABI.json" import Multiclient from "../MultiClient" -import { ControllerConfig } from "../utils/type" +import { ControllerConfig } from "../types/index" class AMBReporterController { sourceChain: Chain destinationChains: Chain[] - isEnabled: boolean = false + name: string = "amb" logger: winston.Logger multiClient: Multiclient reporterAddr: string @@ -18,7 +18,6 @@ class AMBReporterController { constructor(props: ControllerConfig) { this.sourceChain = props.sourceChain this.destinationChains = props.destinationChains - this.isEnabled = props.isEnabled this.logger = props.logger this.multiClient = props.multiClient this.reporterAddr = props.reporterAddress @@ -34,12 +33,13 @@ class AMBReporterController { const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) for (const chain of this.destinationChains) { + let chainName = chain.name.toLocaleLowerCase() const { result, request } = await client.simulateContract({ account, // calling from account address: this.reporterAddr as `0x${string}`, abi: contractABI, functionName: "reportHeaders", - args: [blockNumbers, this.adapterAddr[chain.name.toLocaleLowerCase()], process.env.GAS], + args: [blockNumbers, this.adapterAddr[chainName], process.env.GAS], }) const txhash = await client.writeContract(request) diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index f1e9f937..9b5eda19 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -1,29 +1,28 @@ import { parseEther, Chain } from "viem" -import { gnosis } from "viem/chains" import { privateKeyToAccount } from "viem/accounts" import winston from "winston" import "dotenv/config" import contractABI from "../ABIs/SygmaReporterContractABI.json" import Multiclient from "../MultiClient" -import { ControllerConfig } from "../utils/type" +import { ControllerConfig } from "../types/index" +import { settings } from "../settings" class SygmaReporterController { sourceChain: Chain destinationChains: Chain[] - isEnabled: boolean = false + name: string = "sygma" logger: winston.Logger multiClient: Multiclient - reporterAddr: string - adapterAddr: { [chainName: string]: string } + reporterAddress: string + adapterAddress: { [chainName: string]: string } constructor(props: ControllerConfig) { this.sourceChain = props.sourceChain this.destinationChains = props.destinationChains - this.isEnabled = props.isEnabled this.logger = props.logger this.multiClient = props.multiClient - this.reporterAddr = props.reporterAddress - this.adapterAddr = props.adapterAddress + this.reporterAddress = props.reporterAddress + this.adapterAddress = props.adapterAddress } async onBlocks(blockNumbers: string[]) { @@ -34,13 +33,18 @@ class SygmaReporterController { const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) for (const chain of this.destinationChains) { - const destDomainId = this.getDomainID(chain) + const chainName = chain.name.toLocaleLowerCase() const { result, request } = await client.simulateContract({ account, // calling from account - address: this.reporterAddr as `0x${string}`, + address: this.reporterAddress as `0x${string}`, abi: contractABI, functionName: "reportHeadersToDomain", - args: [blockNumbers, this.adapterAddr[chain.name.toLocaleLowerCase()], destDomainId, "0x"], + args: [ + blockNumbers, + this.adapterAddress[chainName], + settings.sygmaDomainID[chainName as keyof typeof settings.sygmaDomainID], + "0x", + ], value: parseEther("0.0001"), }) const txhash = await client.writeContract(request) @@ -50,15 +54,6 @@ class SygmaReporterController { this.logger.error(`Sygma: Error from Sygma Controller: ${error}`) } } - - getDomainID(destinationChain: Chain) { - switch (destinationChain) { - case gnosis: - return 101 - default: - return 101 - } - } } export default SygmaReporterController diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index 245d7c4d..9f5bf4db 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -7,13 +7,13 @@ import "dotenv/config" import lightClientContractABI from "../ABIs/TelepathyContractABI.json" import adapterContractABI from "../ABIs/TelepathyAdapterABI.json" import Multiclient from "../MultiClient" -import { ControllerConfig } from "../utils/type" -import settings from "../utils/settings.json" +import { ControllerConfig } from "../types/index" +import { settings } from "../settings" class TelepathyReporterController { sourceChain: Chain destinationChains: Chain[] - isEnabled: boolean = false + name: string = "telepathy" logger: winston.Logger multiClient: Multiclient reporterAddr: string @@ -21,7 +21,6 @@ class TelepathyReporterController { constructor(props: ControllerConfig) { this.sourceChain = props.sourceChain this.destinationChains = props.destinationChains - this.isEnabled = props.isEnabled this.logger = props.logger this.multiClient = props.multiClient this.reporterAddr = props.reporterAddress @@ -46,7 +45,9 @@ class TelepathyReporterController { const blockBuffer = 10n // put 10 blocks before the current block in case the node provider don't sync up at the head const startBlock = currentBlockNumber - queryBlockLength const endBlock = currentBlockNumber - blockBuffer + this.logger.info(`Telepathy: Getting Contract Event from block ${startBlock} to block ${currentBlockNumber}`) + const logs = await client.getContractEvents({ address: lightClientAddr as `0x${string}`, abi: lightClientContractABI, diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 89e7d40b..6107a119 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -1,22 +1,19 @@ import { gnosis, goerli, mainnet } from "viem/chains" +import winston from "winston" +import "dotenv/config" + import Multiclient from "./MultiClient" import AMBReporterController from "./controllers/AMBReporterController" import SygmaReporterController from "./controllers/SygmaReporterController" import TelepathyReporterController from "./controllers/TelepathyReporterController" import BlocksListener from "./BlockListener" -import "dotenv/config" -import winston from "winston" -import settings from "./utils/settings.json" +import { settings } from "./settings/index" + function main() { const goerliRPC = process.env.GOERLI_RPC_URL as string const gnosisRPC = process.env.GNOSIS_RPC_URL as string - const sourceChain = process.env.SOURCE_CHAIN - const destChain = process.env.DEST_CHAIN const privKey = process.env.PRIVATE_KEY as `0x${string}` - const isAMBEnabled = process.env.AMB_CONTROLLER === "true" - const isSygmaEnabled = process.env.SYGMA_CONTROLLER === "true" - const isTelepathyEnabled = process.env.TELEPATHY_CONTROLLER === "true" - const timeFetchBlocksMs = 10 * 1000 + const timeFetchBlocksMs = 5 * 60 * 1000 // modify the frequency here const logger = winston.createLogger({ level: "info", @@ -35,7 +32,6 @@ function main() { const ambReporterController = new AMBReporterController({ sourceChain: goerli, destinationChains: [gnosis], - isEnabled: isAMBEnabled, logger: logger, multiClient: multiClient, reporterAddress: settings.contractAddresses.goerli.AMBReporter, @@ -44,7 +40,6 @@ function main() { const sygmaReporterController = new SygmaReporterController({ sourceChain: goerli, destinationChains: [gnosis], - isEnabled: isSygmaEnabled, logger: logger, multiClient: multiClient, reporterAddress: settings.contractAddresses.goerli.SygmaReporter, @@ -53,22 +48,22 @@ function main() { const telepathyReporterController = new TelepathyReporterController({ sourceChain: goerli, destinationChains: [gnosis], - isEnabled: isTelepathyEnabled, logger: logger, multiClient: multiClient, reporterAddress: "", adapterAddress: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter }, }) + const controllersEnabled = process.env.REPORTERS_ENABLED?.split(",") const blocksListener = new BlocksListener({ controllers: [ambReporterController, sygmaReporterController, telepathyReporterController].filter( - (controller) => controller.isEnabled == true, + (controller) => controllersEnabled?.includes(controller.name), ), timeFetchBlocksMs: timeFetchBlocksMs, logger: logger, multiclient: multiClient, sourceChain: goerli, - queryBlockLength: 100, + queryBlockLength: 100, // modify the query block length here, <256 lastProcessedBlock: 0n, }) blocksListener.start() diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts new file mode 100644 index 00000000..fb6c68d9 --- /dev/null +++ b/packages/reporter/src/settings/index.ts @@ -0,0 +1,19 @@ +export const settings = { + contractAddresses: { + goerli: { + AMBReporter: "0xedc0b1d3de4496e0d917af42f29cb71eb2982319", + SygmaReporter: "0x2f96d347c932ac73b56e9352ecc0707e25173d88", + }, + mainnet: {}, + gnosis: { + AMBAdapter: "0x01268DB05965CeAc2a89566c42CD550ED7eE5ECD", + SygmaAdapter: "0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15", + TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83", + TelapathyAdapter: "0x2f1E51a2763FB67fe09971Fd8d849716137A3357", + }, + }, + sygmaDomainID: { + gnosis: "101", + goerli: "1", + }, +} diff --git a/packages/reporter/src/utils/address.json b/packages/reporter/src/utils/address.json deleted file mode 100644 index e9e16166..00000000 --- a/packages/reporter/src/utils/address.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "amb": { - "goerli_reporter": "0xedc0b1d3de4496e0d917af42f29cb71eb2982319", - "ethereum_reporter": "", - "gnosis_adapter": "0x01268DB05965CeAc2a89566c42CD550ED7eE5ECD" - }, - "sygma": { - "goerli_reporter": "0x2f96d347c932ac73b56e9352ecc0707e25173d88", - "ethereum_reporter": "", - "gnosis_adapter": "0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15" - }, - "telepathy": { - "gnosis_adapter": "0x2f1E51a2763FB67fe09971Fd8d849716137A3357", - "gnosis_light_client": "0x34b5378DE786389a477b40dD710812c250185f83" - } -} diff --git a/packages/reporter/src/utils/settings.json b/packages/reporter/src/utils/settings.json deleted file mode 100644 index acb189f2..00000000 --- a/packages/reporter/src/utils/settings.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "contractAddresses": { - "goerli": { - "AMBReporter": "0xedc0b1d3de4496e0d917af42f29cb71eb2982319", - "SygmaReporter": "0x2f96d347c932ac73b56e9352ecc0707e25173d88" - }, - "mainnet": {}, - "gnosis": { - "AMBAdapter": "0x01268DB05965CeAc2a89566c42CD550ED7eE5ECD", - "SygmaAdapter": "0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15", - "TelepathyLightClient": "0x34b5378DE786389a477b40dD710812c250185f83", - "TelapathyAdapter": "0x2f1E51a2763FB67fe09971Fd8d849716137A3357" - } - } -} diff --git a/packages/reporter/src/utils/type.ts b/packages/reporter/src/utils/type.ts deleted file mode 100644 index 00e7848b..00000000 --- a/packages/reporter/src/utils/type.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Chain } from "viem" -import winston = require("winston") -import Multiclient from "../MultiClient" - -type ControllerConfig = { - sourceChain: Chain - destinationChains: Chain[] - reporterAddress: string - adapterAddress: { [chainName: string]: string } - logger: winston.Logger - multiClient: Multiclient - isEnabled: boolean -} - -type BlockListenerConfig = { - controllers: any[] - logger: winston.Logger - timeFetchBlocksMs: number - multiclient: Multiclient - sourceChain: Chain - queryBlockLength: number - lastProcessedBlock: bigint -} - -export { ControllerConfig, BlockListenerConfig } From 79883e088e2fc427a84a1ab4eacb4bb97375d05c Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Tue, 24 Oct 2023 11:44:47 +0800 Subject: [PATCH 10/81] remove unused code --- packages/reporter/src/BlockListener.ts | 2 +- packages/reporter/src/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/reporter/src/BlockListener.ts b/packages/reporter/src/BlockListener.ts index e027f075..4aec356e 100644 --- a/packages/reporter/src/BlockListener.ts +++ b/packages/reporter/src/BlockListener.ts @@ -1,4 +1,4 @@ -import { Chain, publicActions } from "viem" +import { Chain } from "viem" import winston from "winston" import Multiclient from "./MultiClient" diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 6107a119..5489d301 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -1,4 +1,4 @@ -import { gnosis, goerli, mainnet } from "viem/chains" +import { gnosis, goerli } from "viem/chains" import winston from "winston" import "dotenv/config" From a7fe83ecba6b330b4b50e3ab4cb94b39d7a5cabe Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Tue, 24 Oct 2023 13:44:14 +0800 Subject: [PATCH 11/81] remove process.env in class and add data field as constructor parameter --- .../reporter/src/controllers/AMBReporterController.ts | 9 ++++----- .../src/controllers/SygmaReporterController.ts | 8 +++----- .../src/controllers/TelepathyReporterController.ts | 10 +++++----- packages/reporter/src/index.ts | 5 ++++- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts index 5f6426a3..1e7ddebc 100644 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -1,5 +1,4 @@ import { Chain } from "viem" -import { privateKeyToAccount } from "viem/accounts" import winston from "winston" import "dotenv/config" @@ -15,6 +14,8 @@ class AMBReporterController { multiClient: Multiclient reporterAddr: string adapterAddr: { [chainName: string]: string } + gas: string + constructor(props: ControllerConfig) { this.sourceChain = props.sourceChain this.destinationChains = props.destinationChains @@ -22,6 +23,7 @@ class AMBReporterController { this.multiClient = props.multiClient this.reporterAddr = props.reporterAddress this.adapterAddr = props.adapterAddress + this.gas = props.data } async onBlocks(blockNumbers: bigint[]) { @@ -30,16 +32,13 @@ class AMBReporterController { const client = this.multiClient.getClientByChain(this.sourceChain) - const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) - for (const chain of this.destinationChains) { let chainName = chain.name.toLocaleLowerCase() const { result, request } = await client.simulateContract({ - account, // calling from account address: this.reporterAddr as `0x${string}`, abi: contractABI, functionName: "reportHeaders", - args: [blockNumbers, this.adapterAddr[chainName], process.env.GAS], + args: [blockNumbers, this.adapterAddr[chainName], this.gas], }) const txhash = await client.writeContract(request) diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index 9b5eda19..fd5a1d92 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -1,5 +1,4 @@ import { parseEther, Chain } from "viem" -import { privateKeyToAccount } from "viem/accounts" import winston from "winston" import "dotenv/config" @@ -16,6 +15,7 @@ class SygmaReporterController { multiClient: Multiclient reporterAddress: string adapterAddress: { [chainName: string]: string } + gas: string constructor(props: ControllerConfig) { this.sourceChain = props.sourceChain this.destinationChains = props.destinationChains @@ -23,6 +23,7 @@ class SygmaReporterController { this.multiClient = props.multiClient this.reporterAddress = props.reporterAddress this.adapterAddress = props.adapterAddress + this.gas = props.data } async onBlocks(blockNumbers: string[]) { @@ -30,12 +31,9 @@ class SygmaReporterController { this.logger.info("Sygma: Starting Sygma Reporter") const client = this.multiClient.getClientByChain(this.sourceChain) - const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) - for (const chain of this.destinationChains) { const chainName = chain.name.toLocaleLowerCase() const { result, request } = await client.simulateContract({ - account, // calling from account address: this.reporterAddress as `0x${string}`, abi: contractABI, functionName: "reportHeadersToDomain", @@ -45,7 +43,7 @@ class SygmaReporterController { settings.sygmaDomainID[chainName as keyof typeof settings.sygmaDomainID], "0x", ], - value: parseEther("0.0001"), + value: parseEther(this.gas), }) const txhash = await client.writeContract(request) this.logger.info(`Sygma: TxHash from Sygma Controller: ${txhash}`) diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index 9f5bf4db..d703bd15 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -1,6 +1,5 @@ import axios from "axios" import { hexToNumber, Chain } from "viem" -import { privateKeyToAccount } from "viem/accounts" import winston from "winston" import "dotenv/config" @@ -18,6 +17,7 @@ class TelepathyReporterController { multiClient: Multiclient reporterAddr: string adapterAddr: { [chainName: string]: string } + data: any constructor(props: ControllerConfig) { this.sourceChain = props.sourceChain this.destinationChains = props.destinationChains @@ -25,6 +25,7 @@ class TelepathyReporterController { this.multiClient = props.multiClient this.reporterAddr = props.reporterAddress this.adapterAddr = props.adapterAddress + this.data = props.data } async onBlocks(blockNumbers: string[]) { try { @@ -32,7 +33,6 @@ class TelepathyReporterController { for (const chain of this.destinationChains) { const client = this.multiClient.getClientByChain(chain) - const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) const adapterAddr = this.adapterAddr[chain.name.toLocaleLowerCase()] const lightClientAddr = settings.contractAddresses.gnosis.TelepathyLightClient @@ -65,13 +65,13 @@ class TelepathyReporterController { // get slot value from first indexed const slotValue = event.topics[1] this.logger.info(`Fetching proof for slot ${slotValue}`) - const postUrl = process.env.TELEPATHY_PROOF_API_URL + "5" + "/" + hexToNumber(slotValue!) + const postUrl = this.data + "5" + "/" + hexToNumber(slotValue!) + const response = await axios.post(postUrl) - this.logger.info(`Telepathy: Response from telepathy proof provider: ${response.data}`) const { chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof } = response.data.result this.logger.info(`Telepathy: Calling storeBlockHeader for block number ${blockNumber}`) + const { request, result } = await client.simulateContract({ - account, address: adapterAddr as `0x${string}`, abi: adapterContractABI, functionName: "storeBlockHeader", diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 5489d301..5d034bbb 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -36,6 +36,7 @@ function main() { multiClient: multiClient, reporterAddress: settings.contractAddresses.goerli.AMBReporter, adapterAddress: { gnosis: settings.contractAddresses.gnosis.AMBAdapter }, + data: process.env.GAS, // gas to call amb }) const sygmaReporterController = new SygmaReporterController({ sourceChain: goerli, @@ -44,14 +45,16 @@ function main() { multiClient: multiClient, reporterAddress: settings.contractAddresses.goerli.SygmaReporter, adapterAddress: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter }, + data: "0.0001", // msg.value in ether }) const telepathyReporterController = new TelepathyReporterController({ sourceChain: goerli, destinationChains: [gnosis], logger: logger, multiClient: multiClient, - reporterAddress: "", + reporterAddress: "", // reporter address is not required in telepathy adapterAddress: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter }, + data: process.env.TELEPATHY_PROOF_API_URL, }) const controllersEnabled = process.env.REPORTERS_ENABLED?.split(",") From afb0e587ed39999dde051b315902fd9b8958866b Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Tue, 24 Oct 2023 14:35:27 +0800 Subject: [PATCH 12/81] fix: naming of variables --- packages/reporter/src/BlockListener.ts | 1 - .../src/controllers/AMBReporterController.ts | 26 ++++++------- .../controllers/SygmaReporterController.ts | 22 +++++------ .../TelepathyReporterController.ts | 37 +++++++++---------- packages/reporter/src/index.ts | 27 ++++++++------ 5 files changed, 58 insertions(+), 55 deletions(-) diff --git a/packages/reporter/src/BlockListener.ts b/packages/reporter/src/BlockListener.ts index 4aec356e..7d3bf649 100644 --- a/packages/reporter/src/BlockListener.ts +++ b/packages/reporter/src/BlockListener.ts @@ -40,7 +40,6 @@ class BlocksListener { const client = this.multiclient.getClientByChain(this.sourceChain) const currentBlockNumber = await client.getBlockNumber() - this.logger.info(`Current Block Number: ${currentBlockNumber} , on source chain: ${process.env.SOURCE_CHAIN}`) if (!this.lastProcessedBlock) { this.lastProcessedBlock = await client.getBlockNumber() } diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts index 1e7ddebc..d3de5fde 100644 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -12,18 +12,18 @@ class AMBReporterController { name: string = "amb" logger: winston.Logger multiClient: Multiclient - reporterAddr: string - adapterAddr: { [chainName: string]: string } + reporterAddress: string + adapterAddresses: { [chainName: string]: `0x${string}` } gas: string - constructor(props: ControllerConfig) { - this.sourceChain = props.sourceChain - this.destinationChains = props.destinationChains - this.logger = props.logger - this.multiClient = props.multiClient - this.reporterAddr = props.reporterAddress - this.adapterAddr = props.adapterAddress - this.gas = props.data + constructor(configs: ControllerConfig) { + this.sourceChain = configs.sourceChain + this.destinationChains = configs.destinationChains + this.logger = configs.logger + this.multiClient = configs.multiClient + this.reporterAddress = configs.reporterAddress + this.adapterAddresses = configs.adapterAddresses + this.gas = configs.data } async onBlocks(blockNumbers: bigint[]) { @@ -34,11 +34,11 @@ class AMBReporterController { for (const chain of this.destinationChains) { let chainName = chain.name.toLocaleLowerCase() - const { result, request } = await client.simulateContract({ - address: this.reporterAddr as `0x${string}`, + const { request } = await client.simulateContract({ + address: this.reporterAddress as `0x${string}`, abi: contractABI, functionName: "reportHeaders", - args: [blockNumbers, this.adapterAddr[chainName], this.gas], + args: [blockNumbers, this.adapterAddresses[chainName], this.gas], }) const txhash = await client.writeContract(request) diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index fd5a1d92..55a5ab3c 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -14,16 +14,16 @@ class SygmaReporterController { logger: winston.Logger multiClient: Multiclient reporterAddress: string - adapterAddress: { [chainName: string]: string } + adapterAddresses: { [chainName: string]: `0x${string}` } gas: string - constructor(props: ControllerConfig) { - this.sourceChain = props.sourceChain - this.destinationChains = props.destinationChains - this.logger = props.logger - this.multiClient = props.multiClient - this.reporterAddress = props.reporterAddress - this.adapterAddress = props.adapterAddress - this.gas = props.data + constructor(configs: ControllerConfig) { + this.sourceChain = configs.sourceChain + this.destinationChains = configs.destinationChains + this.logger = configs.logger + this.multiClient = configs.multiClient + this.reporterAddress = configs.reporterAddress + this.adapterAddresses = configs.adapterAddresses + this.gas = configs.data } async onBlocks(blockNumbers: string[]) { @@ -33,13 +33,13 @@ class SygmaReporterController { for (const chain of this.destinationChains) { const chainName = chain.name.toLocaleLowerCase() - const { result, request } = await client.simulateContract({ + const { request } = await client.simulateContract({ address: this.reporterAddress as `0x${string}`, abi: contractABI, functionName: "reportHeadersToDomain", args: [ blockNumbers, - this.adapterAddress[chainName], + this.adapterAddresses[chainName], settings.sygmaDomainID[chainName as keyof typeof settings.sygmaDomainID], "0x", ], diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index d703bd15..b5146b9b 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -7,7 +7,6 @@ import lightClientContractABI from "../ABIs/TelepathyContractABI.json" import adapterContractABI from "../ABIs/TelepathyAdapterABI.json" import Multiclient from "../MultiClient" import { ControllerConfig } from "../types/index" -import { settings } from "../settings" class TelepathyReporterController { sourceChain: Chain @@ -15,34 +14,34 @@ class TelepathyReporterController { name: string = "telepathy" logger: winston.Logger multiClient: Multiclient - reporterAddr: string - adapterAddr: { [chainName: string]: string } + reporterAddress: string + adapterAddresses: { [chainName: string]: `0x${string}` } data: any - constructor(props: ControllerConfig) { - this.sourceChain = props.sourceChain - this.destinationChains = props.destinationChains - this.logger = props.logger - this.multiClient = props.multiClient - this.reporterAddr = props.reporterAddress - this.adapterAddr = props.adapterAddress - this.data = props.data + constructor(configs: ControllerConfig) { + this.sourceChain = configs.sourceChain + this.destinationChains = configs.destinationChains + this.logger = configs.logger + this.multiClient = configs.multiClient + this.reporterAddress = configs.reporterAddress + this.adapterAddresses = configs.adapterAddresses + this.data = configs.data } async onBlocks(blockNumbers: string[]) { try { - // Telepathy on support light client on Gnosis at the moment + // Telepathy only support light client on Gnosis at the moment for (const chain of this.destinationChains) { const client = this.multiClient.getClientByChain(chain) - const adapterAddr = this.adapterAddr[chain.name.toLocaleLowerCase()] - const lightClientAddr = settings.contractAddresses.gnosis.TelepathyLightClient + const adapterAddr = this.adapterAddresses[chain.name.toLocaleLowerCase()] + const lightClientAddr = this.data.lightClientAddress // Getting the latest block number from provider const currentBlockNumber = await client.getBlockNumber() - // get contract events from latest block - 1000 : latest block - 10 - const queryBlockLength = 1000n // the number of blocks to query - const blockBuffer = 10n // put 10 blocks before the current block in case the node provider don't sync up at the head + // get contract events from latest block - queryBlockLength : latest block - blockBuffer + const queryBlockLength = BigInt(this.data.queryBlockLength) // the number of blocks to query + const blockBuffer = BigInt(this.data.blockBuffer) // put ${buffer} blocks before the current block in case the node provider don't sync up at the head const startBlock = currentBlockNumber - queryBlockLength const endBlock = currentBlockNumber - blockBuffer @@ -65,13 +64,13 @@ class TelepathyReporterController { // get slot value from first indexed const slotValue = event.topics[1] this.logger.info(`Fetching proof for slot ${slotValue}`) - const postUrl = this.data + "5" + "/" + hexToNumber(slotValue!) + const postUrl = this.data.proofURL + "5" + "/" + hexToNumber(slotValue!) const response = await axios.post(postUrl) const { chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof } = response.data.result this.logger.info(`Telepathy: Calling storeBlockHeader for block number ${blockNumber}`) - const { request, result } = await client.simulateContract({ + const { request } = await client.simulateContract({ address: adapterAddr as `0x${string}`, abi: adapterContractABI, functionName: "storeBlockHeader", diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 5d034bbb..2ed27d3d 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -32,29 +32,34 @@ function main() { const ambReporterController = new AMBReporterController({ sourceChain: goerli, destinationChains: [gnosis], - logger: logger, - multiClient: multiClient, + logger, + multiClient, reporterAddress: settings.contractAddresses.goerli.AMBReporter, - adapterAddress: { gnosis: settings.contractAddresses.gnosis.AMBAdapter }, + adapterAddresses: { gnosis: settings.contractAddresses.gnosis.AMBAdapter as `0x${string}` }, data: process.env.GAS, // gas to call amb }) const sygmaReporterController = new SygmaReporterController({ sourceChain: goerli, destinationChains: [gnosis], - logger: logger, - multiClient: multiClient, + logger, + multiClient, reporterAddress: settings.contractAddresses.goerli.SygmaReporter, - adapterAddress: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter }, + adapterAddresses: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter as `0x${string}` }, data: "0.0001", // msg.value in ether }) const telepathyReporterController = new TelepathyReporterController({ sourceChain: goerli, destinationChains: [gnosis], - logger: logger, - multiClient: multiClient, + logger, + multiClient, reporterAddress: "", // reporter address is not required in telepathy - adapterAddress: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter }, - data: process.env.TELEPATHY_PROOF_API_URL, + adapterAddresses: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter as `0x${string}` }, + data: { + proofURL: process.env.TELEPATHY_PROOF_API_URL, + lightClientAddress: settings.contractAddresses.gnosis.TelepathyLightClient, + queryBlockLength: 1000, + blockBuffer: 10, + }, }) const controllersEnabled = process.env.REPORTERS_ENABLED?.split(",") @@ -63,7 +68,7 @@ function main() { (controller) => controllersEnabled?.includes(controller.name), ), timeFetchBlocksMs: timeFetchBlocksMs, - logger: logger, + logger, multiclient: multiClient, sourceChain: goerli, queryBlockLength: 100, // modify the query block length here, <256 From 1fb6f5638be9646c57b407a1aa27586e24cc584d Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Tue, 24 Oct 2023 20:22:45 +0800 Subject: [PATCH 13/81] fix: change BlockListener constructur to config --- packages/reporter/.env.example | 1 - packages/reporter/src/BlockListener.ts | 34 +++++++++---------- .../controllers/SygmaReporterController.ts | 1 + .../TelepathyReporterController.ts | 1 + packages/reporter/src/index.ts | 2 +- 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index 8a9debe3..0f87811f 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -9,7 +9,6 @@ DEST_CHAIN=gnosis GAS=30000 -SYGMA_FEE_DATA=0x TELEPATHY_PROOF_API_URL=https://api.telepathy.xyz/api/hashi/ diff --git a/packages/reporter/src/BlockListener.ts b/packages/reporter/src/BlockListener.ts index 7d3bf649..611ca2c2 100644 --- a/packages/reporter/src/BlockListener.ts +++ b/packages/reporter/src/BlockListener.ts @@ -13,15 +13,16 @@ class BlocksListener { _interval: ReturnType | undefined // NodeJs.Timeout sourceChain: Chain queryBlockLength: number + blockBuffer: number - constructor(props: BlockListenerConfig) { - this.controllers = props.controllers - this.timeFetchBlocksMs = props.timeFetchBlocksMs - this.logger = props.logger - this.multiclient = props.multiclient - this.sourceChain = props.sourceChain - this.lastProcessedBlock = props.lastProcessedBlock - this.queryBlockLength = props.queryBlockLength + constructor(configs: BlockListenerConfig) { + this.controllers = configs.controllers + this.timeFetchBlocksMs = configs.timeFetchBlocksMs + this.logger = configs.logger + this.multiclient = configs.multiclient + this.sourceChain = configs.sourceChain + this.queryBlockLength = configs.queryBlockLength + this.blockBuffer = configs.blockBuffer } start() { @@ -39,20 +40,17 @@ class BlocksListener { try { const client = this.multiclient.getClientByChain(this.sourceChain) - const currentBlockNumber = await client.getBlockNumber() - if (!this.lastProcessedBlock) { - this.lastProcessedBlock = await client.getBlockNumber() - } + let currentBlockNumber = await client.getBlockNumber() - const blockBuffer = 10 // put 10 blocks before the current block in case the node provider don't sync up at the head - if (this.queryBlockLength > 256 - blockBuffer) { - this.logger.error(`Please choose a block length less than ${256 - blockBuffer}!`) + if (this.queryBlockLength > 256 - this.blockBuffer) { + this.logger.error(`Please choose a block length less than ${256 - this.blockBuffer}!`) } - const startBlock = this.lastProcessedBlock - BigInt(this.queryBlockLength) - const endBlock = this.lastProcessedBlock - BigInt(blockBuffer) + + const startBlock = currentBlockNumber - BigInt(this.queryBlockLength) + const endBlock = currentBlockNumber - BigInt(this.blockBuffer) const blocks = await Promise.all( Array.from( - { length: Number(this.queryBlockLength - blockBuffer + 1) }, + { length: Number(this.queryBlockLength - this.blockBuffer + 1) }, (_, index) => startBlock + BigInt(index), ), ) diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index 55a5ab3c..75ef9137 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -16,6 +16,7 @@ class SygmaReporterController { reporterAddress: string adapterAddresses: { [chainName: string]: `0x${string}` } gas: string + constructor(configs: ControllerConfig) { this.sourceChain = configs.sourceChain this.destinationChains = configs.destinationChains diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index b5146b9b..bac6ba2c 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -17,6 +17,7 @@ class TelepathyReporterController { reporterAddress: string adapterAddresses: { [chainName: string]: `0x${string}` } data: any + constructor(configs: ControllerConfig) { this.sourceChain = configs.sourceChain this.destinationChains = configs.destinationChains diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 2ed27d3d..32d3a781 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -72,7 +72,7 @@ function main() { multiclient: multiClient, sourceChain: goerli, queryBlockLength: 100, // modify the query block length here, <256 - lastProcessedBlock: 0n, + blockBuffer: 10, }) blocksListener.start() } From 4422cda2164d8dfe434cbbe68c3205aaeb865006 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Wed, 25 Oct 2023 14:09:57 +0800 Subject: [PATCH 14/81] refactor: putting all configurable variables under settings/index.ts --- packages/reporter/.env.example | 12 ++++++--- packages/reporter/README.md | 22 +++++++++++---- packages/reporter/src/BlockListener.ts | 1 + .../src/controllers/AMBReporterController.ts | 4 +-- .../controllers/SygmaReporterController.ts | 13 ++++----- .../TelepathyReporterController.ts | 20 ++++++++------ packages/reporter/src/index.ts | 23 ++++++++-------- packages/reporter/src/settings/index.ts | 27 ++++++++++++++++--- 8 files changed, 84 insertions(+), 38 deletions(-) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index 0f87811f..cb95d258 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -4,11 +4,17 @@ REPORTERS_ENABLED=amb,sygma GOERLI_RPC_URL= GNOSIS_RPC_URL= -SOURCE_CHAIN=goerli -DEST_CHAIN=gnosis -GAS=30000 +AMB_GAS=30000 + +SYGMA_MSG_VALUE=0.0001 TELEPATHY_PROOF_API_URL=https://api.telepathy.xyz/api/hashi/ +TELEPATHY_QUERY_BLOCK_LENGTH=1000 +TELEPATHY_BLOCK_BUFFER=10 + +TIME_FETCH_BLOCKS_MS=60000 #in ms +BLOCK_BUFFER=10 +QUERY_BLOCK_LENGTH=200 diff --git a/packages/reporter/README.md b/packages/reporter/README.md index 56b7d603..b20f445d 100644 --- a/packages/reporter/README.md +++ b/packages/reporter/README.md @@ -13,14 +13,26 @@ Script to call Header Reporter contracts of different oracle from source chain t Configure the mode you want to run by editing the variable in `.env` -1. `_CONTROLLER` (true/false): to enable the controller -2. `SOURCE_CHAIN` (string value of chain): Define the source chain to collect the block header from. -3. `DEST_CHAIN` (string value of chain): Define the destination chain to report the source chain's block header to. +1. `REPORTERS_ENABLED` (name of reporter,separated by ',', with no space between): to enable the controller, i.e. + amb,sygma +2. `AMB_GAS` (number): gas used in AMB reporter to pass block header. +3. `SYGMA_MSG_VALUE` (number): amount of ethers sent when bridging block header from sygma, similar to gas fee, i.e. + 0.001 (ethers). +4. `TIME_FETCH_BLOCKS_MS` (number): block reporter restart period (in ms), i.e. 60000 (ms). +5. `BLOCK_BUFFER` (number): amount of blocks away from the latest block, in case the node provider is not sync up with + the latest block, i.e. 10 (blocks). +6. `QUERY_BLOCK_LENGTH` (number): the amount of block headers from source chain to send to destination chain, should be + less than 256 due to the limitation of Solidity + [blockhash()](https://docs.soliditylang.org/en/v0.8.21/units-and-global-variables.html#block-and-transaction-properties). +7. `TELEPATHY_PROOF_API_URL` (string): url of telepathy proof api +8. `TELEPATHY_QUERY_BLOCK_LENGTH` (number): block range to query on `HeadUpdate` event, i.e. 1000 (blocks) +9. `TELEPATHY_BLOCK_BUFFER` (number): amount of blocks away from the latest block in destination chain, in case the node + provider is not sync up with the latest block, i.e. 10 (blocks). ## Adding a new controller -1. Add a new file under `/controller`, create the constructor and `onBlocks` function to call block header reporter +1. Add a new file under `/controllers`, create the constructor and `onBlocks` function to call block header reporter contract periodically. -2. Add the contract addresses under `utils/address.json`. +2. Configure the settings under `settings/index.ts`. 3. Add the new controller instant in `index.ts`. 4. Add the env variable in `.env.example`. diff --git a/packages/reporter/src/BlockListener.ts b/packages/reporter/src/BlockListener.ts index 611ca2c2..53f67dcf 100644 --- a/packages/reporter/src/BlockListener.ts +++ b/packages/reporter/src/BlockListener.ts @@ -23,6 +23,7 @@ class BlocksListener { this.sourceChain = configs.sourceChain this.queryBlockLength = configs.queryBlockLength this.blockBuffer = configs.blockBuffer + this.timeFetchBlocksMs = configs.timeFetchBlocksMs } start() { diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts index d3de5fde..611de302 100644 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -21,9 +21,9 @@ class AMBReporterController { this.destinationChains = configs.destinationChains this.logger = configs.logger this.multiClient = configs.multiClient - this.reporterAddress = configs.reporterAddress + this.reporterAddress = configs.reporterAddress !== undefined ? configs.reporterAddress : "" this.adapterAddresses = configs.adapterAddresses - this.gas = configs.data + this.gas = configs.data.gas } async onBlocks(blockNumbers: bigint[]) { diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index 75ef9137..4508f750 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -5,7 +5,6 @@ import "dotenv/config" import contractABI from "../ABIs/SygmaReporterContractABI.json" import Multiclient from "../MultiClient" import { ControllerConfig } from "../types/index" -import { settings } from "../settings" class SygmaReporterController { sourceChain: Chain @@ -15,16 +14,18 @@ class SygmaReporterController { multiClient: Multiclient reporterAddress: string adapterAddresses: { [chainName: string]: `0x${string}` } - gas: string + destinationDomainID: string + fee: string constructor(configs: ControllerConfig) { this.sourceChain = configs.sourceChain this.destinationChains = configs.destinationChains this.logger = configs.logger this.multiClient = configs.multiClient - this.reporterAddress = configs.reporterAddress + this.reporterAddress = configs.reporterAddress !== undefined ? configs.reporterAddress : "" this.adapterAddresses = configs.adapterAddresses - this.gas = configs.data + this.destinationDomainID = configs.data.destDomainID + this.fee = configs.data.fee } async onBlocks(blockNumbers: string[]) { @@ -41,10 +42,10 @@ class SygmaReporterController { args: [ blockNumbers, this.adapterAddresses[chainName], - settings.sygmaDomainID[chainName as keyof typeof settings.sygmaDomainID], + this.destinationDomainID[chainName as keyof typeof this.destinationDomainID], "0x", ], - value: parseEther(this.gas), + value: parseEther(this.fee), }) const txhash = await client.writeContract(request) this.logger.info(`Sygma: TxHash from Sygma Controller: ${txhash}`) diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index bac6ba2c..9d5fceba 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -14,18 +14,22 @@ class TelepathyReporterController { name: string = "telepathy" logger: winston.Logger multiClient: Multiclient - reporterAddress: string adapterAddresses: { [chainName: string]: `0x${string}` } - data: any + lightClientAddresses: { [chainName: string]: `0x${string}` } + proofURL: string + queryBlockLength: string + blockBuffer: string constructor(configs: ControllerConfig) { this.sourceChain = configs.sourceChain this.destinationChains = configs.destinationChains this.logger = configs.logger this.multiClient = configs.multiClient - this.reporterAddress = configs.reporterAddress this.adapterAddresses = configs.adapterAddresses - this.data = configs.data + this.lightClientAddresses = configs.data.lightClientAddresses + this.proofURL = configs.data.proofURL + this.queryBlockLength = configs.data.queryBlockLength + this.blockBuffer = configs.data.blockBuffer } async onBlocks(blockNumbers: string[]) { try { @@ -35,14 +39,14 @@ class TelepathyReporterController { const client = this.multiClient.getClientByChain(chain) const adapterAddr = this.adapterAddresses[chain.name.toLocaleLowerCase()] - const lightClientAddr = this.data.lightClientAddress + const lightClientAddr = this.lightClientAddresses[chain.name.toLocaleLowerCase()] // Getting the latest block number from provider const currentBlockNumber = await client.getBlockNumber() // get contract events from latest block - queryBlockLength : latest block - blockBuffer - const queryBlockLength = BigInt(this.data.queryBlockLength) // the number of blocks to query - const blockBuffer = BigInt(this.data.blockBuffer) // put ${buffer} blocks before the current block in case the node provider don't sync up at the head + const queryBlockLength = BigInt(this.queryBlockLength) // the number of blocks to query + const blockBuffer = BigInt(this.blockBuffer) // put ${buffer} blocks before the current block in case the node provider don't sync up at the head const startBlock = currentBlockNumber - queryBlockLength const endBlock = currentBlockNumber - blockBuffer @@ -65,7 +69,7 @@ class TelepathyReporterController { // get slot value from first indexed const slotValue = event.topics[1] this.logger.info(`Fetching proof for slot ${slotValue}`) - const postUrl = this.data.proofURL + "5" + "/" + hexToNumber(slotValue!) + const postUrl = this.proofURL + "5" + "/" + hexToNumber(slotValue!) // 5 is chainID for Goerli const response = await axios.post(postUrl) const { chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof } = response.data.result diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 32d3a781..854e7a1f 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -13,7 +13,6 @@ function main() { const goerliRPC = process.env.GOERLI_RPC_URL as string const gnosisRPC = process.env.GNOSIS_RPC_URL as string const privKey = process.env.PRIVATE_KEY as `0x${string}` - const timeFetchBlocksMs = 5 * 60 * 1000 // modify the frequency here const logger = winston.createLogger({ level: "info", @@ -36,7 +35,7 @@ function main() { multiClient, reporterAddress: settings.contractAddresses.goerli.AMBReporter, adapterAddresses: { gnosis: settings.contractAddresses.gnosis.AMBAdapter as `0x${string}` }, - data: process.env.GAS, // gas to call amb + data: { gas: settings.reporterController.ambReporterController.gas }, }) const sygmaReporterController = new SygmaReporterController({ sourceChain: goerli, @@ -45,20 +44,22 @@ function main() { multiClient, reporterAddress: settings.contractAddresses.goerli.SygmaReporter, adapterAddresses: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter as `0x${string}` }, - data: "0.0001", // msg.value in ether + data: { + fee: settings.reporterController.sygmaReporterController.data, + destDomainID: settings.reporterController.sygmaReporterController.domainID, + }, }) const telepathyReporterController = new TelepathyReporterController({ sourceChain: goerli, destinationChains: [gnosis], logger, multiClient, - reporterAddress: "", // reporter address is not required in telepathy adapterAddresses: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter as `0x${string}` }, data: { - proofURL: process.env.TELEPATHY_PROOF_API_URL, - lightClientAddress: settings.contractAddresses.gnosis.TelepathyLightClient, - queryBlockLength: 1000, - blockBuffer: 10, + proofURL: settings.reporterController.telepathyReporterController.proofURL, + lightClientAddresses: { gnosis: settings.contractAddresses.gnosis.TelepathyLightClient }, + queryBlockLength: settings.reporterController.telepathyReporterController.queryBlockLength, + blockBuffer: settings.reporterController.telepathyReporterController.blockBuffer, }, }) @@ -67,12 +68,12 @@ function main() { controllers: [ambReporterController, sygmaReporterController, telepathyReporterController].filter( (controller) => controllersEnabled?.includes(controller.name), ), - timeFetchBlocksMs: timeFetchBlocksMs, + timeFetchBlocksMs: Number(settings.blockListener.timeFetchBlocksMs), logger, multiclient: multiClient, sourceChain: goerli, - queryBlockLength: 100, // modify the query block length here, <256 - blockBuffer: 10, + queryBlockLength: Number(settings.blockListener.queryBlockLength), // modify the query block length here, <256 + blockBuffer: Number(settings.blockListener.blockBuffer), }) blocksListener.start() } diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index fb6c68d9..c7d3ded7 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -1,3 +1,5 @@ +import "dotenv/config" + export const settings = { contractAddresses: { goerli: { @@ -12,8 +14,27 @@ export const settings = { TelapathyAdapter: "0x2f1E51a2763FB67fe09971Fd8d849716137A3357", }, }, - sygmaDomainID: { - gnosis: "101", - goerli: "1", + reporterController: { + ambReporterController: { + gas: process.env.AMB_GAS, + }, + sygmaReporterController: { + domainID: { + gnosis: "101", + goerli: "1", + }, + data: process.env.SYGMA_MSG_VALUE, + }, + telepathyReporterController: { + proofURL: process.env.TELEPATHY_PROOF_API_URL, + queryBlockLength: process.env.TELEPATHY_QUERY_BLOCK_LENGTH, + blockBuffer: process.env.TELEPATHY_BLOCK_BUFFER, + }, + }, + + blockListener: { + queryBlockLength: process.env.QUERY_BLOCK_LENGTH, + blockBuffer: process.env.BLOCK_BUFFER, + timeFetchBlocksMs: process.env.TIME_FETCH_BLOCKS_MS, }, } From 91981fe06b684f140021d3d82f2914221091f2a0 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Wed, 25 Oct 2023 16:44:49 +0800 Subject: [PATCH 15/81] fix: remove lastProcessedBlock and move queryBlockLength logic to index.ts --- packages/reporter/src/BlockListener.ts | 6 ------ packages/reporter/src/index.ts | 10 ++++++++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/reporter/src/BlockListener.ts b/packages/reporter/src/BlockListener.ts index 53f67dcf..8d7f3091 100644 --- a/packages/reporter/src/BlockListener.ts +++ b/packages/reporter/src/BlockListener.ts @@ -8,7 +8,6 @@ class BlocksListener { controllers: any[] logger: winston.Logger timeFetchBlocksMs: number - lastProcessedBlock: bigint = 0n multiclient: Multiclient _interval: ReturnType | undefined // NodeJs.Timeout sourceChain: Chain @@ -43,10 +42,6 @@ class BlocksListener { let currentBlockNumber = await client.getBlockNumber() - if (this.queryBlockLength > 256 - this.blockBuffer) { - this.logger.error(`Please choose a block length less than ${256 - this.blockBuffer}!`) - } - const startBlock = currentBlockNumber - BigInt(this.queryBlockLength) const endBlock = currentBlockNumber - BigInt(this.blockBuffer) const blocks = await Promise.all( @@ -59,7 +54,6 @@ class BlocksListener { await Promise.all(this.controllers.map((_controller: any) => _controller.onBlocks(blocks))) - this.lastProcessedBlock = endBlock this.logger.info(`Waiting for ${this.timeFetchBlocksMs / 1000}s...`) } catch (_err) { this.logger.error(`error from block listener ${_err}`) diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 854e7a1f..338ad5c1 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -13,6 +13,8 @@ function main() { const goerliRPC = process.env.GOERLI_RPC_URL as string const gnosisRPC = process.env.GNOSIS_RPC_URL as string const privKey = process.env.PRIVATE_KEY as `0x${string}` + const queryBlockLength = Number(settings.blockListener.queryBlockLength) + const blockBuffer = Number(settings.blockListener.blockBuffer) const logger = winston.createLogger({ level: "info", @@ -63,6 +65,10 @@ function main() { }, }) + if (queryBlockLength > 256 - blockBuffer) { + throw logger.error(`Please choose a block length less than ${256 - Number(settings.blockListener.blockBuffer)}!`) + } + const controllersEnabled = process.env.REPORTERS_ENABLED?.split(",") const blocksListener = new BlocksListener({ controllers: [ambReporterController, sygmaReporterController, telepathyReporterController].filter( @@ -72,8 +78,8 @@ function main() { logger, multiclient: multiClient, sourceChain: goerli, - queryBlockLength: Number(settings.blockListener.queryBlockLength), // modify the query block length here, <256 - blockBuffer: Number(settings.blockListener.blockBuffer), + queryBlockLength, // modify the query block length here, <256 - block buffer + blockBuffer, }) blocksListener.start() } From c902049a1fae70ff7682fdff21638b1222f0e9fc Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Wed, 25 Oct 2023 21:32:14 +0800 Subject: [PATCH 16/81] fix: remove unused code --- .gitignore | 1 - packages/reporter/src/BlockListener.ts | 4 +++ .../src/controllers/AMBReporterController.ts | 7 +++-- .../controllers/SygmaReporterController.ts | 9 +++---- .../TelepathyReporterController.ts | 16 ++++++------ packages/reporter/src/index.ts | 17 +++++------- packages/reporter/src/settings/index.ts | 10 +++---- packages/reporter/src/types/index.ts | 26 +++++++++++++++++++ 8 files changed, 56 insertions(+), 34 deletions(-) create mode 100644 packages/reporter/src/types/index.ts diff --git a/.gitignore b/.gitignore index 5e533b47..344ecd39 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,6 @@ **/.coverage_contracts **/dist **/node_modules -**/types **/.yarn # files diff --git a/packages/reporter/src/BlockListener.ts b/packages/reporter/src/BlockListener.ts index 8d7f3091..214560af 100644 --- a/packages/reporter/src/BlockListener.ts +++ b/packages/reporter/src/BlockListener.ts @@ -23,6 +23,10 @@ class BlocksListener { this.queryBlockLength = configs.queryBlockLength this.blockBuffer = configs.blockBuffer this.timeFetchBlocksMs = configs.timeFetchBlocksMs + + if (this.queryBlockLength > 256 - this.blockBuffer) { + throw new Error(`Please choose a block length less than ${256 - this.blockBuffer}!`) + } } start() { diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts index 611de302..120e0d70 100644 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -1,6 +1,5 @@ import { Chain } from "viem" import winston from "winston" -import "dotenv/config" import contractABI from "../ABIs/AMBReporterContractABI.json" import Multiclient from "../MultiClient" @@ -12,7 +11,7 @@ class AMBReporterController { name: string = "amb" logger: winston.Logger multiClient: Multiclient - reporterAddress: string + reporterAddress: `0x${string}` adapterAddresses: { [chainName: string]: `0x${string}` } gas: string @@ -21,7 +20,7 @@ class AMBReporterController { this.destinationChains = configs.destinationChains this.logger = configs.logger this.multiClient = configs.multiClient - this.reporterAddress = configs.reporterAddress !== undefined ? configs.reporterAddress : "" + this.reporterAddress = configs.reporterAddress as `0x${string}` this.adapterAddresses = configs.adapterAddresses this.gas = configs.data.gas } @@ -42,7 +41,7 @@ class AMBReporterController { }) const txhash = await client.writeContract(request) - this.logger.info(`AMB: TxHash from AMB Controller: ${txhash}`) + this.logger.info(`AMB: TxHash from AMB Controller: ${txhash} on ${chain.name}`) } } catch (error) { this.logger.error(`AMB: Error from AMB Controller: ${error}`) diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index 4508f750..91e8d9a3 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -1,6 +1,5 @@ import { parseEther, Chain } from "viem" import winston from "winston" -import "dotenv/config" import contractABI from "../ABIs/SygmaReporterContractABI.json" import Multiclient from "../MultiClient" @@ -12,7 +11,7 @@ class SygmaReporterController { name: string = "sygma" logger: winston.Logger multiClient: Multiclient - reporterAddress: string + reporterAddress: `0x${string}` adapterAddresses: { [chainName: string]: `0x${string}` } destinationDomainID: string fee: string @@ -22,13 +21,13 @@ class SygmaReporterController { this.destinationChains = configs.destinationChains this.logger = configs.logger this.multiClient = configs.multiClient - this.reporterAddress = configs.reporterAddress !== undefined ? configs.reporterAddress : "" + this.reporterAddress = configs.reporterAddress as `0x${string}` this.adapterAddresses = configs.adapterAddresses this.destinationDomainID = configs.data.destDomainID this.fee = configs.data.fee } - async onBlocks(blockNumbers: string[]) { + async onBlocks(blockNumbers: bigint[]) { try { this.logger.info("Sygma: Starting Sygma Reporter") const client = this.multiClient.getClientByChain(this.sourceChain) @@ -48,7 +47,7 @@ class SygmaReporterController { value: parseEther(this.fee), }) const txhash = await client.writeContract(request) - this.logger.info(`Sygma: TxHash from Sygma Controller: ${txhash}`) + this.logger.info(`Sygma: TxHash from Sygma Controller: ${txhash} on ${chain.name}`) } } catch (error) { this.logger.error(`Sygma: Error from Sygma Controller: ${error}`) diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index 9d5fceba..71f03b2d 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -1,7 +1,6 @@ import axios from "axios" import { hexToNumber, Chain } from "viem" import winston from "winston" -import "dotenv/config" import lightClientContractABI from "../ABIs/TelepathyContractABI.json" import adapterContractABI from "../ABIs/TelepathyAdapterABI.json" @@ -16,7 +15,7 @@ class TelepathyReporterController { multiClient: Multiclient adapterAddresses: { [chainName: string]: `0x${string}` } lightClientAddresses: { [chainName: string]: `0x${string}` } - proofURL: string + baseProofUrl: string queryBlockLength: string blockBuffer: string @@ -27,11 +26,11 @@ class TelepathyReporterController { this.multiClient = configs.multiClient this.adapterAddresses = configs.adapterAddresses this.lightClientAddresses = configs.data.lightClientAddresses - this.proofURL = configs.data.proofURL + this.baseProofUrl = configs.data.baseProofUrl this.queryBlockLength = configs.data.queryBlockLength this.blockBuffer = configs.data.blockBuffer } - async onBlocks(blockNumbers: string[]) { + async onBlocks(blockNumbers: bigint[]) { try { // Telepathy only support light client on Gnosis at the moment @@ -68,10 +67,11 @@ class TelepathyReporterController { logs.forEach(async (event: any) => { // get slot value from first indexed const slotValue = event.topics[1] - this.logger.info(`Fetching proof for slot ${slotValue}`) - const postUrl = this.proofURL + "5" + "/" + hexToNumber(slotValue!) // 5 is chainID for Goerli + this.logger.info(`Fetching proof for slot ${slotValue} on ${chain.name}`) - const response = await axios.post(postUrl) + const url = `${this.baseProofUrl}/${this.sourceChain.id}/${hexToNumber(slotValue!)}` + console.log("URL ", url) + const response = await axios.post(url) const { chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof } = response.data.result this.logger.info(`Telepathy: Calling storeBlockHeader for block number ${blockNumber}`) @@ -83,7 +83,7 @@ class TelepathyReporterController { }) const txHash = await client.writeContract(request) - this.logger.info(`Telepathy: TxHash from Telepathy Controller: ${txHash} `) + this.logger.info(`Telepathy: TxHash from Telepathy Controller: ${txHash} on ${chain.name} `) }) } } catch (error) { diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 338ad5c1..551df4c0 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -1,6 +1,5 @@ import { gnosis, goerli } from "viem/chains" import winston from "winston" -import "dotenv/config" import Multiclient from "./MultiClient" import AMBReporterController from "./controllers/AMBReporterController" @@ -37,7 +36,7 @@ function main() { multiClient, reporterAddress: settings.contractAddresses.goerli.AMBReporter, adapterAddresses: { gnosis: settings.contractAddresses.gnosis.AMBAdapter as `0x${string}` }, - data: { gas: settings.reporterController.ambReporterController.gas }, + data: { gas: settings.reporterControllers.AMBReporterController.gas }, }) const sygmaReporterController = new SygmaReporterController({ sourceChain: goerli, @@ -47,8 +46,8 @@ function main() { reporterAddress: settings.contractAddresses.goerli.SygmaReporter, adapterAddresses: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter as `0x${string}` }, data: { - fee: settings.reporterController.sygmaReporterController.data, - destDomainID: settings.reporterController.sygmaReporterController.domainID, + fee: settings.reporterControllers.SygmaReporterController.data, + destDomainID: settings.reporterControllers.SygmaReporterController.domainID, }, }) const telepathyReporterController = new TelepathyReporterController({ @@ -58,17 +57,13 @@ function main() { multiClient, adapterAddresses: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter as `0x${string}` }, data: { - proofURL: settings.reporterController.telepathyReporterController.proofURL, + baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, lightClientAddresses: { gnosis: settings.contractAddresses.gnosis.TelepathyLightClient }, - queryBlockLength: settings.reporterController.telepathyReporterController.queryBlockLength, - blockBuffer: settings.reporterController.telepathyReporterController.blockBuffer, + queryBlockLength: settings.reporterControllers.TelepathyReporterController.queryBlockLength, + blockBuffer: settings.reporterControllers.TelepathyReporterController.blockBuffer, }, }) - if (queryBlockLength > 256 - blockBuffer) { - throw logger.error(`Please choose a block length less than ${256 - Number(settings.blockListener.blockBuffer)}!`) - } - const controllersEnabled = process.env.REPORTERS_ENABLED?.split(",") const blocksListener = new BlocksListener({ controllers: [ambReporterController, sygmaReporterController, telepathyReporterController].filter( diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index c7d3ded7..6710c9f1 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -14,19 +14,19 @@ export const settings = { TelapathyAdapter: "0x2f1E51a2763FB67fe09971Fd8d849716137A3357", }, }, - reporterController: { - ambReporterController: { + reporterControllers: { + AMBReporterController: { gas: process.env.AMB_GAS, }, - sygmaReporterController: { + SygmaReporterController: { domainID: { gnosis: "101", goerli: "1", }, data: process.env.SYGMA_MSG_VALUE, }, - telepathyReporterController: { - proofURL: process.env.TELEPATHY_PROOF_API_URL, + TelepathyReporterController: { + baseProofUrl: process.env.TELEPATHY_PROOF_API_URL, queryBlockLength: process.env.TELEPATHY_QUERY_BLOCK_LENGTH, blockBuffer: process.env.TELEPATHY_BLOCK_BUFFER, }, diff --git a/packages/reporter/src/types/index.ts b/packages/reporter/src/types/index.ts new file mode 100644 index 00000000..964daf81 --- /dev/null +++ b/packages/reporter/src/types/index.ts @@ -0,0 +1,26 @@ +import { Chain } from "viem" +import winston = require("winston") + +import Multiclient from "../MultiClient" + +type ControllerConfig = { + sourceChain: Chain + destinationChains: Chain[] + reporterAddress?: string + adapterAddresses: { [chainName: string]: `0x${string}` } + logger: winston.Logger + multiClient: Multiclient + data: any // controller-specific data +} + +type BlockListenerConfig = { + controllers: any[] + logger: winston.Logger + timeFetchBlocksMs: number + multiclient: Multiclient + sourceChain: Chain + queryBlockLength: number + blockBuffer: number +} + +export { ControllerConfig, BlockListenerConfig } From 32dffd970db58590eb3f899f83db4df55877aa87 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Wed, 25 Oct 2023 17:24:46 +0200 Subject: [PATCH 17/81] chore(evm): adds gitignore --- packages/evm/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/evm/.gitignore diff --git a/packages/evm/.gitignore b/packages/evm/.gitignore new file mode 100644 index 00000000..bcbfbbf2 --- /dev/null +++ b/packages/evm/.gitignore @@ -0,0 +1 @@ +types/ \ No newline at end of file From 96a5ff46ec367b537786172175cf40cd84d2d8fb Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Thu, 26 Oct 2023 13:56:21 +0800 Subject: [PATCH 18/81] feat: allow each controllers to set interval individually --- packages/reporter/.env.example | 5 ++-- packages/reporter/src/BlockListener.ts | 18 +++++++------- .../src/controllers/AMBReporterController.ts | 3 +++ .../controllers/SygmaReporterController.ts | 3 +++ .../TelepathyReporterController.ts | 24 ++++++++++++------- packages/reporter/src/index.ts | 7 +++++- packages/reporter/src/settings/index.ts | 4 +++- packages/reporter/src/types/index.ts | 1 + 8 files changed, 44 insertions(+), 21 deletions(-) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index cb95d258..6619c0c7 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -7,14 +7,15 @@ GNOSIS_RPC_URL= AMB_GAS=30000 +AMB_INTERVAL=60000 SYGMA_MSG_VALUE=0.0001 +SYGMA_INTERVAL=60000 TELEPATHY_PROOF_API_URL=https://api.telepathy.xyz/api/hashi/ -TELEPATHY_QUERY_BLOCK_LENGTH=1000 TELEPATHY_BLOCK_BUFFER=10 +TELEPATHY_INTERVAL=60000 TIME_FETCH_BLOCKS_MS=60000 #in ms BLOCK_BUFFER=10 -QUERY_BLOCK_LENGTH=200 diff --git a/packages/reporter/src/BlockListener.ts b/packages/reporter/src/BlockListener.ts index 214560af..0528b649 100644 --- a/packages/reporter/src/BlockListener.ts +++ b/packages/reporter/src/BlockListener.ts @@ -9,7 +9,7 @@ class BlocksListener { logger: winston.Logger timeFetchBlocksMs: number multiclient: Multiclient - _interval: ReturnType | undefined // NodeJs.Timeout + //intervals: ReturnType | undefined // NodeJs.Timeout sourceChain: Chain queryBlockLength: number blockBuffer: number @@ -31,13 +31,10 @@ class BlocksListener { start() { this._fetchBlocks() - this._interval = setInterval(() => { - this._fetchBlocks() - }, this.timeFetchBlocksMs) } stop() { - clearInterval(this._interval) + // TODO: clearInterval() } async _fetchBlocks() { @@ -54,11 +51,14 @@ class BlocksListener { (_, index) => startBlock + BigInt(index), ), ) - this.logger.info(`Fetching block from ${startBlock} to ${endBlock}`) + this.logger.info(`Fetching block from ${startBlock} to ${endBlock} on ${this.sourceChain.name}`) - await Promise.all(this.controllers.map((_controller: any) => _controller.onBlocks(blocks))) - - this.logger.info(`Waiting for ${this.timeFetchBlocksMs / 1000}s...`) + this.controllers.map((_controller: any) => { + _controller.onBlocks(blocks) + setInterval(() => { + _controller.onBlocks(blocks) + }, _controller.interval) + }) } catch (_err) { this.logger.error(`error from block listener ${_err}`) } diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts index 120e0d70..7605998d 100644 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -11,6 +11,7 @@ class AMBReporterController { name: string = "amb" logger: winston.Logger multiClient: Multiclient + interval: number reporterAddress: `0x${string}` adapterAddresses: { [chainName: string]: `0x${string}` } gas: string @@ -20,6 +21,7 @@ class AMBReporterController { this.destinationChains = configs.destinationChains this.logger = configs.logger this.multiClient = configs.multiClient + this.interval = configs.interval this.reporterAddress = configs.reporterAddress as `0x${string}` this.adapterAddresses = configs.adapterAddresses this.gas = configs.data.gas @@ -42,6 +44,7 @@ class AMBReporterController { const txhash = await client.writeContract(request) this.logger.info(`AMB: TxHash from AMB Controller: ${txhash} on ${chain.name}`) + this.logger.info(`Restarting AMB in ${this.interval / 1000} seconds`) } } catch (error) { this.logger.error(`AMB: Error from AMB Controller: ${error}`) diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index 91e8d9a3..aebb9ee2 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -11,6 +11,7 @@ class SygmaReporterController { name: string = "sygma" logger: winston.Logger multiClient: Multiclient + interval: number reporterAddress: `0x${string}` adapterAddresses: { [chainName: string]: `0x${string}` } destinationDomainID: string @@ -21,6 +22,7 @@ class SygmaReporterController { this.destinationChains = configs.destinationChains this.logger = configs.logger this.multiClient = configs.multiClient + this.interval = configs.interval this.reporterAddress = configs.reporterAddress as `0x${string}` this.adapterAddresses = configs.adapterAddresses this.destinationDomainID = configs.data.destDomainID @@ -48,6 +50,7 @@ class SygmaReporterController { }) const txhash = await client.writeContract(request) this.logger.info(`Sygma: TxHash from Sygma Controller: ${txhash} on ${chain.name}`) + this.logger.info(`Restarting Sygma in ${this.interval / 1000} seconds`) } } catch (error) { this.logger.error(`Sygma: Error from Sygma Controller: ${error}`) diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index 71f03b2d..fbe65971 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -13,21 +13,24 @@ class TelepathyReporterController { name: string = "telepathy" logger: winston.Logger multiClient: Multiclient + interval: number adapterAddresses: { [chainName: string]: `0x${string}` } lightClientAddresses: { [chainName: string]: `0x${string}` } baseProofUrl: string - queryBlockLength: string + blockBuffer: string + lastProcessedBlock: bigint = 30000000n constructor(configs: ControllerConfig) { this.sourceChain = configs.sourceChain this.destinationChains = configs.destinationChains this.logger = configs.logger this.multiClient = configs.multiClient + this.interval = configs.interval this.adapterAddresses = configs.adapterAddresses this.lightClientAddresses = configs.data.lightClientAddresses this.baseProofUrl = configs.data.baseProofUrl - this.queryBlockLength = configs.data.queryBlockLength + this.blockBuffer = configs.data.blockBuffer } async onBlocks(blockNumbers: bigint[]) { @@ -44,12 +47,14 @@ class TelepathyReporterController { const currentBlockNumber = await client.getBlockNumber() // get contract events from latest block - queryBlockLength : latest block - blockBuffer - const queryBlockLength = BigInt(this.queryBlockLength) // the number of blocks to query + const blockBuffer = BigInt(this.blockBuffer) // put ${buffer} blocks before the current block in case the node provider don't sync up at the head - const startBlock = currentBlockNumber - queryBlockLength + const startBlock = this.lastProcessedBlock const endBlock = currentBlockNumber - blockBuffer - this.logger.info(`Telepathy: Getting Contract Event from block ${startBlock} to block ${currentBlockNumber}`) + this.logger.info( + `Telepathy: Getting Contract Event from block ${startBlock} to block ${endBlock} on ${chain.name}`, + ) const logs = await client.getContractEvents({ address: lightClientAddr as `0x${string}`, @@ -65,12 +70,11 @@ class TelepathyReporterController { } logs.forEach(async (event: any) => { - // get slot value from first indexed const slotValue = event.topics[1] this.logger.info(`Fetching proof for slot ${slotValue} on ${chain.name}`) - const url = `${this.baseProofUrl}/${this.sourceChain.id}/${hexToNumber(slotValue!)}` - console.log("URL ", url) + const url = `${this.baseProofUrl}${this.sourceChain.id}/${hexToNumber(slotValue!)}` + const response = await axios.post(url) const { chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof } = response.data.result this.logger.info(`Telepathy: Calling storeBlockHeader for block number ${blockNumber}`) @@ -83,8 +87,12 @@ class TelepathyReporterController { }) const txHash = await client.writeContract(request) + setTimeout(() => {}, 2000) + this.logger.info(`Telepathy: TxHash from Telepathy Controller: ${txHash} on ${chain.name} `) }) + this.lastProcessedBlock = endBlock + this.logger.info(`Restarting Telepathy in ${this.interval / 1000} seconds`) } } catch (error) { this.logger.error(`Telepathy: Error from Telepathy Controller: ${error}`) diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 551df4c0..a8de088f 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -14,6 +14,9 @@ function main() { const privKey = process.env.PRIVATE_KEY as `0x${string}` const queryBlockLength = Number(settings.blockListener.queryBlockLength) const blockBuffer = Number(settings.blockListener.blockBuffer) + const ambInterval = Number(process.env.AMB_INTERVAL) + const sygmaInterval = Number(process.env.SYGMA_INTERVAL) + const telepathyInterval = Number(process.env.TELEPATHY_INTERVAL) const logger = winston.createLogger({ level: "info", @@ -34,6 +37,7 @@ function main() { destinationChains: [gnosis], logger, multiClient, + interval: ambInterval, reporterAddress: settings.contractAddresses.goerli.AMBReporter, adapterAddresses: { gnosis: settings.contractAddresses.gnosis.AMBAdapter as `0x${string}` }, data: { gas: settings.reporterControllers.AMBReporterController.gas }, @@ -43,6 +47,7 @@ function main() { destinationChains: [gnosis], logger, multiClient, + interval: sygmaInterval, reporterAddress: settings.contractAddresses.goerli.SygmaReporter, adapterAddresses: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter as `0x${string}` }, data: { @@ -55,11 +60,11 @@ function main() { destinationChains: [gnosis], logger, multiClient, + interval: telepathyInterval, adapterAddresses: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter as `0x${string}` }, data: { baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, lightClientAddresses: { gnosis: settings.contractAddresses.gnosis.TelepathyLightClient }, - queryBlockLength: settings.reporterControllers.TelepathyReporterController.queryBlockLength, blockBuffer: settings.reporterControllers.TelepathyReporterController.blockBuffer, }, }) diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 6710c9f1..269cf2d5 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -16,6 +16,7 @@ export const settings = { }, reporterControllers: { AMBReporterController: { + interval: process.env.AMB_INTERVAL, gas: process.env.AMB_GAS, }, SygmaReporterController: { @@ -23,11 +24,12 @@ export const settings = { gnosis: "101", goerli: "1", }, + interval: process.env.SYGMA_INTERVAL, data: process.env.SYGMA_MSG_VALUE, }, TelepathyReporterController: { + internal: process.env.TELEPATHY_INTERVAL, baseProofUrl: process.env.TELEPATHY_PROOF_API_URL, - queryBlockLength: process.env.TELEPATHY_QUERY_BLOCK_LENGTH, blockBuffer: process.env.TELEPATHY_BLOCK_BUFFER, }, }, diff --git a/packages/reporter/src/types/index.ts b/packages/reporter/src/types/index.ts index 964daf81..a8b53d4e 100644 --- a/packages/reporter/src/types/index.ts +++ b/packages/reporter/src/types/index.ts @@ -10,6 +10,7 @@ type ControllerConfig = { adapterAddresses: { [chainName: string]: `0x${string}` } logger: winston.Logger multiClient: Multiclient + interval: number data: any // controller-specific data } From 466ef45db8dcd6d39035e6a6581f6ba85aa6a546 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Thu, 26 Oct 2023 21:16:22 +0800 Subject: [PATCH 19/81] feat: added isLightClient check and separate intervals for LC based reporter --- packages/reporter/.env.example | 15 ++++---- packages/reporter/README.md | 15 ++++---- packages/reporter/src/BlockListener.ts | 36 +++++++++++++++---- .../src/controllers/AMBReporterController.ts | 5 ++- .../controllers/SygmaReporterController.ts | 5 ++- .../TelepathyReporterController.ts | 9 +++-- packages/reporter/src/index.ts | 22 ++++++------ packages/reporter/src/settings/index.ts | 6 ++++ packages/reporter/src/types/index.ts | 3 +- 9 files changed, 74 insertions(+), 42 deletions(-) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index 6619c0c7..c49fa6f7 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -1,21 +1,22 @@ PRIVATE_KEY= -REPORTERS_ENABLED=amb,sygma +REPORTERS_ENABLED=amb,telepathy GOERLI_RPC_URL= -GNOSIS_RPC_URL= +GNOSIS_RPC_URL=https://rpc.gnosischain.com AMB_GAS=30000 -AMB_INTERVAL=60000 - SYGMA_MSG_VALUE=0.0001 -SYGMA_INTERVAL=60000 TELEPATHY_PROOF_API_URL=https://api.telepathy.xyz/api/hashi/ TELEPATHY_BLOCK_BUFFER=10 -TELEPATHY_INTERVAL=60000 -TIME_FETCH_BLOCKS_MS=60000 #in ms + +TIME_FETCH_BLOCKS_MS=60000 #in ms, frequency to call _fetchBlocks for non-Light Client based controllers +LC_TIME_STORE_HASHES_MS=60000 # in ms, frequency to call _storeHashes for Light Client based controllers + +## Block Listener Configs for non-Light CLient based controllers BLOCK_BUFFER=10 +QUERY_BLOCK_LENGTH=200 diff --git a/packages/reporter/README.md b/packages/reporter/README.md index b20f445d..8ba1db29 100644 --- a/packages/reporter/README.md +++ b/packages/reporter/README.md @@ -19,15 +19,16 @@ Configure the mode you want to run by editing the variable in `.env` 3. `SYGMA_MSG_VALUE` (number): amount of ethers sent when bridging block header from sygma, similar to gas fee, i.e. 0.001 (ethers). 4. `TIME_FETCH_BLOCKS_MS` (number): block reporter restart period (in ms), i.e. 60000 (ms). -5. `BLOCK_BUFFER` (number): amount of blocks away from the latest block, in case the node provider is not sync up with - the latest block, i.e. 10 (blocks). -6. `QUERY_BLOCK_LENGTH` (number): the amount of block headers from source chain to send to destination chain, should be +5. `LC_TIME_STORE_HASHES_MS` (number): Light client based reporter (Telepathy) restart period (in ms), i.e. 60000 (ms). +6. `BLOCK_BUFFER` (number): the amount of blocks from source chain away from the latest block, in case the node provider + is not sync up with the latest block, i.e. 10 (blocks). +7. `QUERY_BLOCK_LENGTH` (number): the amount of block headers from source chain to send to destination chain, should be less than 256 due to the limitation of Solidity [blockhash()](https://docs.soliditylang.org/en/v0.8.21/units-and-global-variables.html#block-and-transaction-properties). -7. `TELEPATHY_PROOF_API_URL` (string): url of telepathy proof api -8. `TELEPATHY_QUERY_BLOCK_LENGTH` (number): block range to query on `HeadUpdate` event, i.e. 1000 (blocks) -9. `TELEPATHY_BLOCK_BUFFER` (number): amount of blocks away from the latest block in destination chain, in case the node - provider is not sync up with the latest block, i.e. 10 (blocks). +8. `TELEPATHY_PROOF_API_URL` (string): url of telepathy proof api +9. `TELEPATHY_QUERY_BLOCK_LENGTH` (number): block range to query on `HeadUpdate` event, i.e. 1000 (blocks) +10. `TELEPATHY_BLOCK_BUFFER` (number): amount of blocks away from the latest block in destination chain, in case the + node provider is not sync up with the latest block, i.e. 10 (blocks). ## Adding a new controller diff --git a/packages/reporter/src/BlockListener.ts b/packages/reporter/src/BlockListener.ts index 0528b649..f507e568 100644 --- a/packages/reporter/src/BlockListener.ts +++ b/packages/reporter/src/BlockListener.ts @@ -8,8 +8,10 @@ class BlocksListener { controllers: any[] logger: winston.Logger timeFetchBlocksMs: number + LCTimeStoreHashesMs: number multiclient: Multiclient - //intervals: ReturnType | undefined // NodeJs.Timeout + intervals: ReturnType | undefined // NodeJs.Timeout + LCIntervals: ReturnType | undefined // NodeJs.Timeout sourceChain: Chain queryBlockLength: number blockBuffer: number @@ -23,6 +25,7 @@ class BlocksListener { this.queryBlockLength = configs.queryBlockLength this.blockBuffer = configs.blockBuffer this.timeFetchBlocksMs = configs.timeFetchBlocksMs + this.LCTimeStoreHashesMs = configs.LCTimeStoreHashesMs if (this.queryBlockLength > 256 - this.blockBuffer) { throw new Error(`Please choose a block length less than ${256 - this.blockBuffer}!`) @@ -30,11 +33,26 @@ class BlocksListener { } start() { + // Non Light Client based controllers, fetch block from source chain and call report BlockHeaders this._fetchBlocks() + + this.intervals = setInterval(() => { + this._fetchBlocks() + this.logger.info(`Non LC reporter controllers: Waiting for ${this.timeFetchBlocksMs / 1000} seconds`) + }, this.timeFetchBlocksMs) + + // Light Client based controllers, query event from destination chain and call store block hash + this._storeHashes() + + this.LCIntervals = setInterval(() => { + this._storeHashes() + this.logger.info(`LC reporter controllers: Waiting for ${this.LCTimeStoreHashesMs / 1000} seconds`) + }, this.LCTimeStoreHashesMs) } stop() { - // TODO: clearInterval() + clearInterval(this.intervals) + clearInterval(this.LCIntervals) } async _fetchBlocks() { @@ -54,15 +72,21 @@ class BlocksListener { this.logger.info(`Fetching block from ${startBlock} to ${endBlock} on ${this.sourceChain.name}`) this.controllers.map((_controller: any) => { - _controller.onBlocks(blocks) - setInterval(() => { + if (!_controller.isLightClient) { _controller.onBlocks(blocks) - }, _controller.interval) + } }) } catch (_err) { - this.logger.error(`error from block listener ${_err}`) + this.logger.error(`Error from block listener ${_err}`) } } + async _storeHashes() { + this.controllers.map((_controller: any) => { + if (_controller.isLightClient) { + _controller.onBlocks() + } + }) + } } export default BlocksListener diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts index 7605998d..2a599de6 100644 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -11,19 +11,19 @@ class AMBReporterController { name: string = "amb" logger: winston.Logger multiClient: Multiclient - interval: number reporterAddress: `0x${string}` adapterAddresses: { [chainName: string]: `0x${string}` } gas: string + isLightClient: boolean constructor(configs: ControllerConfig) { this.sourceChain = configs.sourceChain this.destinationChains = configs.destinationChains this.logger = configs.logger this.multiClient = configs.multiClient - this.interval = configs.interval this.reporterAddress = configs.reporterAddress as `0x${string}` this.adapterAddresses = configs.adapterAddresses + this.isLightClient = configs.isLightClient this.gas = configs.data.gas } @@ -44,7 +44,6 @@ class AMBReporterController { const txhash = await client.writeContract(request) this.logger.info(`AMB: TxHash from AMB Controller: ${txhash} on ${chain.name}`) - this.logger.info(`Restarting AMB in ${this.interval / 1000} seconds`) } } catch (error) { this.logger.error(`AMB: Error from AMB Controller: ${error}`) diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index aebb9ee2..fb70635f 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -11,18 +11,18 @@ class SygmaReporterController { name: string = "sygma" logger: winston.Logger multiClient: Multiclient - interval: number reporterAddress: `0x${string}` adapterAddresses: { [chainName: string]: `0x${string}` } destinationDomainID: string fee: string + isLightClient: boolean constructor(configs: ControllerConfig) { this.sourceChain = configs.sourceChain this.destinationChains = configs.destinationChains this.logger = configs.logger this.multiClient = configs.multiClient - this.interval = configs.interval + this.isLightClient = configs.isLightClient this.reporterAddress = configs.reporterAddress as `0x${string}` this.adapterAddresses = configs.adapterAddresses this.destinationDomainID = configs.data.destDomainID @@ -50,7 +50,6 @@ class SygmaReporterController { }) const txhash = await client.writeContract(request) this.logger.info(`Sygma: TxHash from Sygma Controller: ${txhash} on ${chain.name}`) - this.logger.info(`Restarting Sygma in ${this.interval / 1000} seconds`) } } catch (error) { this.logger.error(`Sygma: Error from Sygma Controller: ${error}`) diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index fbe65971..df55af1d 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -13,11 +13,10 @@ class TelepathyReporterController { name: string = "telepathy" logger: winston.Logger multiClient: Multiclient - interval: number + isLightClient: boolean adapterAddresses: { [chainName: string]: `0x${string}` } lightClientAddresses: { [chainName: string]: `0x${string}` } baseProofUrl: string - blockBuffer: string lastProcessedBlock: bigint = 30000000n @@ -26,16 +25,17 @@ class TelepathyReporterController { this.destinationChains = configs.destinationChains this.logger = configs.logger this.multiClient = configs.multiClient - this.interval = configs.interval + this.isLightClient = configs.isLightClient this.adapterAddresses = configs.adapterAddresses this.lightClientAddresses = configs.data.lightClientAddresses this.baseProofUrl = configs.data.baseProofUrl this.blockBuffer = configs.data.blockBuffer } - async onBlocks(blockNumbers: bigint[]) { + async onBlocks() { try { // Telepathy only support light client on Gnosis at the moment + this.logger.info("Telepathy: Starting Telepathy Reporter") for (const chain of this.destinationChains) { const client = this.multiClient.getClientByChain(chain) @@ -92,7 +92,6 @@ class TelepathyReporterController { this.logger.info(`Telepathy: TxHash from Telepathy Controller: ${txHash} on ${chain.name} `) }) this.lastProcessedBlock = endBlock - this.logger.info(`Restarting Telepathy in ${this.interval / 1000} seconds`) } } catch (error) { this.logger.error(`Telepathy: Error from Telepathy Controller: ${error}`) diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index a8de088f..c774cba3 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -9,14 +9,13 @@ import BlocksListener from "./BlockListener" import { settings } from "./settings/index" function main() { - const goerliRPC = process.env.GOERLI_RPC_URL as string - const gnosisRPC = process.env.GNOSIS_RPC_URL as string - const privKey = process.env.PRIVATE_KEY as `0x${string}` + const goerliRPC = settings.config.goerliRPC as string + const gnosisRPC = settings.config.gnosisRPC as string + const privKey = settings.config.privKey as `0x${string}` const queryBlockLength = Number(settings.blockListener.queryBlockLength) const blockBuffer = Number(settings.blockListener.blockBuffer) - const ambInterval = Number(process.env.AMB_INTERVAL) - const sygmaInterval = Number(process.env.SYGMA_INTERVAL) - const telepathyInterval = Number(process.env.TELEPATHY_INTERVAL) + const timeFetchBlocksMs = Number(settings.blockListener.timeFetchBlocksMs) + const LCTimeStoreHashesMs = Number(settings.blockListener.LCTimeStoreHashesMs) const logger = winston.createLogger({ level: "info", @@ -37,7 +36,7 @@ function main() { destinationChains: [gnosis], logger, multiClient, - interval: ambInterval, + isLightClient: false, reporterAddress: settings.contractAddresses.goerli.AMBReporter, adapterAddresses: { gnosis: settings.contractAddresses.gnosis.AMBAdapter as `0x${string}` }, data: { gas: settings.reporterControllers.AMBReporterController.gas }, @@ -47,7 +46,7 @@ function main() { destinationChains: [gnosis], logger, multiClient, - interval: sygmaInterval, + isLightClient: false, reporterAddress: settings.contractAddresses.goerli.SygmaReporter, adapterAddresses: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter as `0x${string}` }, data: { @@ -60,7 +59,7 @@ function main() { destinationChains: [gnosis], logger, multiClient, - interval: telepathyInterval, + isLightClient: true, adapterAddresses: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter as `0x${string}` }, data: { baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, @@ -70,17 +69,20 @@ function main() { }) const controllersEnabled = process.env.REPORTERS_ENABLED?.split(",") + const blocksListener = new BlocksListener({ controllers: [ambReporterController, sygmaReporterController, telepathyReporterController].filter( (controller) => controllersEnabled?.includes(controller.name), ), - timeFetchBlocksMs: Number(settings.blockListener.timeFetchBlocksMs), + timeFetchBlocksMs, + LCTimeStoreHashesMs, logger, multiclient: multiClient, sourceChain: goerli, queryBlockLength, // modify the query block length here, <256 - block buffer blockBuffer, }) + blocksListener.start() } diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 269cf2d5..be89f0ac 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -14,6 +14,11 @@ export const settings = { TelapathyAdapter: "0x2f1E51a2763FB67fe09971Fd8d849716137A3357", }, }, + config: { + goerliRPC: process.env.GOERLI_RPC_URL, + gnosisRPC: process.env.GNOSIS_RPC_URL, + privKey: process.env.PRIVATE_KEY, + }, reporterControllers: { AMBReporterController: { interval: process.env.AMB_INTERVAL, @@ -38,5 +43,6 @@ export const settings = { queryBlockLength: process.env.QUERY_BLOCK_LENGTH, blockBuffer: process.env.BLOCK_BUFFER, timeFetchBlocksMs: process.env.TIME_FETCH_BLOCKS_MS, + LCTimeStoreHashesMs: process.env.LC_TIME_STORE_HASHES_MS, }, } diff --git a/packages/reporter/src/types/index.ts b/packages/reporter/src/types/index.ts index a8b53d4e..4e7d5253 100644 --- a/packages/reporter/src/types/index.ts +++ b/packages/reporter/src/types/index.ts @@ -10,14 +10,15 @@ type ControllerConfig = { adapterAddresses: { [chainName: string]: `0x${string}` } logger: winston.Logger multiClient: Multiclient - interval: number data: any // controller-specific data + isLightClient: boolean } type BlockListenerConfig = { controllers: any[] logger: winston.Logger timeFetchBlocksMs: number + LCTimeStoreHashesMs: number multiclient: Multiclient sourceChain: Chain queryBlockLength: number From fc6c679421a61c94d41210de94ce01546182a942 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Thu, 26 Oct 2023 19:03:09 +0200 Subject: [PATCH 20/81] feat(reporter): improves classes design, rm not used code and improves the logger --- packages/reporter/.env.example | 11 +- packages/reporter/.gitignore | 1 + packages/reporter/README.md | 22 +- packages/reporter/src/BlockListener.ts | 82 +- .../src/controllers/AMBReporterController.ts | 61 +- .../src/controllers/BaseController.ts | 29 + .../controllers/SygmaReporterController.ts | 70 +- .../TelepathyReporterController.ts | 127 +- packages/reporter/src/index.ts | 97 +- packages/reporter/src/settings/index.ts | 57 +- packages/reporter/src/types/index.ts | 33 +- packages/reporter/src/utils/logger.ts | 28 + packages/reporter/yarn.lock | 3882 ++++++++++++----- 13 files changed, 3112 insertions(+), 1388 deletions(-) create mode 100644 packages/reporter/.gitignore create mode 100644 packages/reporter/src/controllers/BaseController.ts create mode 100644 packages/reporter/src/utils/logger.ts diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index c49fa6f7..ffad1105 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -1,22 +1,23 @@ PRIVATE_KEY= -REPORTERS_ENABLED=amb,telepathy +REPORTERS_ENABLED=AMBReporterController,TelepathyReporterController,SygmaReporterController GOERLI_RPC_URL= GNOSIS_RPC_URL=https://rpc.gnosischain.com -AMB_GAS=30000 -SYGMA_MSG_VALUE=0.0001 +AMB_REPORTER_HEADERS_GAS=30000 +SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE=0.0001 TELEPATHY_PROOF_API_URL=https://api.telepathy.xyz/api/hashi/ TELEPATHY_BLOCK_BUFFER=10 - +TELEPATHY_TIME_FETCH_BLOCK_MS=200000 TIME_FETCH_BLOCKS_MS=60000 #in ms, frequency to call _fetchBlocks for non-Light Client based controllers -LC_TIME_STORE_HASHES_MS=60000 # in ms, frequency to call _storeHashes for Light Client based controllers ## Block Listener Configs for non-Light CLient based controllers BLOCK_BUFFER=10 QUERY_BLOCK_LENGTH=200 +SOURCE_CHAIN=5 +DESTINATION_CHAINS=100 \ No newline at end of file diff --git a/packages/reporter/.gitignore b/packages/reporter/.gitignore new file mode 100644 index 00000000..5292519a --- /dev/null +++ b/packages/reporter/.gitignore @@ -0,0 +1 @@ +logs/ \ No newline at end of file diff --git a/packages/reporter/README.md b/packages/reporter/README.md index 8ba1db29..0999ad8d 100644 --- a/packages/reporter/README.md +++ b/packages/reporter/README.md @@ -15,20 +15,22 @@ Configure the mode you want to run by editing the variable in `.env` 1. `REPORTERS_ENABLED` (name of reporter,separated by ',', with no space between): to enable the controller, i.e. amb,sygma -2. `AMB_GAS` (number): gas used in AMB reporter to pass block header. -3. `SYGMA_MSG_VALUE` (number): amount of ethers sent when bridging block header from sygma, similar to gas fee, i.e. - 0.001 (ethers). +2. `AMB_REPORTER_HEADERS_GAS` (number): gas used in AMB reporter to pass block header. +3. `SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE` (number): amount of ethers sent when bridging block header from sygma, + similar to reportHeadersGas fee, i.e. 0.001 (ethers). 4. `TIME_FETCH_BLOCKS_MS` (number): block reporter restart period (in ms), i.e. 60000 (ms). -5. `LC_TIME_STORE_HASHES_MS` (number): Light client based reporter (Telepathy) restart period (in ms), i.e. 60000 (ms). -6. `BLOCK_BUFFER` (number): the amount of blocks from source chain away from the latest block, in case the node provider +5. `BLOCK_BUFFER` (number): the amount of blocks from source chain away from the latest block, in case the node provider is not sync up with the latest block, i.e. 10 (blocks). -7. `QUERY_BLOCK_LENGTH` (number): the amount of block headers from source chain to send to destination chain, should be +6. `QUERY_BLOCK_LENGTH` (number): the amount of block headers from source chain to send to destination chain, should be less than 256 due to the limitation of Solidity [blockhash()](https://docs.soliditylang.org/en/v0.8.21/units-and-global-variables.html#block-and-transaction-properties). -8. `TELEPATHY_PROOF_API_URL` (string): url of telepathy proof api -9. `TELEPATHY_QUERY_BLOCK_LENGTH` (number): block range to query on `HeadUpdate` event, i.e. 1000 (blocks) -10. `TELEPATHY_BLOCK_BUFFER` (number): amount of blocks away from the latest block in destination chain, in case the - node provider is not sync up with the latest block, i.e. 10 (blocks). +7. `TELEPATHY_PROOF_API_URL` (string): url of telepathy proof api +8. `TELEPATHY_QUERY_BLOCK_LENGTH` (number): block range to query on `HeadUpdate` event, i.e. 1000 (blocks) +9. `TELEPATHY_BLOCK_BUFFER` (number): amount of blocks away from the latest block in destination chain, in case the node + provider is not sync up with the latest block, i.e. 10 (blocks). +10. `TELEPATHY_TIME_FETCH_BLOCK_MS`: interval time for which the controller looks for new `HeadUpdate` events. +11. `SOURCE_CHAIN`: source chain `chainId`. +12. `DESTINATION_CHAINS`: destination chain `chainIds` separated by a comma. ## Adding a new controller diff --git a/packages/reporter/src/BlockListener.ts b/packages/reporter/src/BlockListener.ts index f507e568..f4332a90 100644 --- a/packages/reporter/src/BlockListener.ts +++ b/packages/reporter/src/BlockListener.ts @@ -2,91 +2,63 @@ import { Chain } from "viem" import winston from "winston" import Multiclient from "./MultiClient" -import { BlockListenerConfig } from "./types/index" + +import { BlockListenerConfigs } from "./types/index" class BlocksListener { controllers: any[] logger: winston.Logger - timeFetchBlocksMs: number - LCTimeStoreHashesMs: number + intervalFetchBlocksMs: number multiclient: Multiclient - intervals: ReturnType | undefined // NodeJs.Timeout - LCIntervals: ReturnType | undefined // NodeJs.Timeout + intervals: ReturnType | undefined sourceChain: Chain queryBlockLength: number blockBuffer: number - constructor(configs: BlockListenerConfig) { - this.controllers = configs.controllers - this.timeFetchBlocksMs = configs.timeFetchBlocksMs - this.logger = configs.logger - this.multiclient = configs.multiclient - this.sourceChain = configs.sourceChain - this.queryBlockLength = configs.queryBlockLength - this.blockBuffer = configs.blockBuffer - this.timeFetchBlocksMs = configs.timeFetchBlocksMs - this.LCTimeStoreHashesMs = configs.LCTimeStoreHashesMs - - if (this.queryBlockLength > 256 - this.blockBuffer) { - throw new Error(`Please choose a block length less than ${256 - this.blockBuffer}!`) + constructor(_configs: BlockListenerConfigs) { + if (_configs.queryBlockLength > 256 - _configs.blockBuffer) { + throw new Error(`Please choose a block length less than ${256 - _configs.blockBuffer}!`) } + + this.controllers = _configs.controllers + this.intervalFetchBlocksMs = _configs.intervalFetchBlocksMs + this.logger = _configs.logger.child({ service: "BlocksListener" }) + this.multiclient = _configs.multiclient + this.sourceChain = _configs.sourceChain + this.queryBlockLength = _configs.queryBlockLength + this.blockBuffer = _configs.blockBuffer + this.intervalFetchBlocksMs = _configs.intervalFetchBlocksMs } start() { - // Non Light Client based controllers, fetch block from source chain and call report BlockHeaders - this._fetchBlocks() - + this.fetchBlocks() this.intervals = setInterval(() => { - this._fetchBlocks() - this.logger.info(`Non LC reporter controllers: Waiting for ${this.timeFetchBlocksMs / 1000} seconds`) - }, this.timeFetchBlocksMs) - - // Light Client based controllers, query event from destination chain and call store block hash - this._storeHashes() - - this.LCIntervals = setInterval(() => { - this._storeHashes() - this.logger.info(`LC reporter controllers: Waiting for ${this.LCTimeStoreHashesMs / 1000} seconds`) - }, this.LCTimeStoreHashesMs) + this.fetchBlocks() + }, this.intervalFetchBlocksMs) } stop() { clearInterval(this.intervals) - clearInterval(this.LCIntervals) } - async _fetchBlocks() { + async fetchBlocks() { try { const client = this.multiclient.getClientByChain(this.sourceChain) - let currentBlockNumber = await client.getBlockNumber() - + const currentBlockNumber = await client.getBlockNumber() const startBlock = currentBlockNumber - BigInt(this.queryBlockLength) const endBlock = currentBlockNumber - BigInt(this.blockBuffer) - const blocks = await Promise.all( - Array.from( - { length: Number(this.queryBlockLength - this.blockBuffer + 1) }, - (_, index) => startBlock + BigInt(index), - ), - ) - this.logger.info(`Fetching block from ${startBlock} to ${endBlock} on ${this.sourceChain.name}`) - this.controllers.map((_controller: any) => { - if (!_controller.isLightClient) { - _controller.onBlocks(blocks) - } - }) + const blocks = Array.from( + { length: Number(this.queryBlockLength - this.blockBuffer + 1) }, + (_, _index) => startBlock + BigInt(_index), + ) + this.logger.info(`New blocks detected on ${this.sourceChain.name}: [${startBlock},${endBlock}]`) + this.controllers.map((_controller: any) => _controller.onBlocks(blocks)) } catch (_err) { this.logger.error(`Error from block listener ${_err}`) } } - async _storeHashes() { - this.controllers.map((_controller: any) => { - if (_controller.isLightClient) { - _controller.onBlocks() - } - }) - } } export default BlocksListener diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts index 2a599de6..00329307 100644 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -1,52 +1,39 @@ -import { Chain } from "viem" -import winston from "winston" - -import contractABI from "../ABIs/AMBReporterContractABI.json" -import Multiclient from "../MultiClient" -import { ControllerConfig } from "../types/index" - -class AMBReporterController { - sourceChain: Chain - destinationChains: Chain[] - name: string = "amb" - logger: winston.Logger - multiClient: Multiclient - reporterAddress: `0x${string}` - adapterAddresses: { [chainName: string]: `0x${string}` } - gas: string - isLightClient: boolean - - constructor(configs: ControllerConfig) { - this.sourceChain = configs.sourceChain - this.destinationChains = configs.destinationChains - this.logger = configs.logger - this.multiClient = configs.multiClient - this.reporterAddress = configs.reporterAddress as `0x${string}` - this.adapterAddresses = configs.adapterAddresses - this.isLightClient = configs.isLightClient - this.gas = configs.data.gas +import ABI from "../ABIs/AMBReporterContractABI.json" + +import { AMBReporterControllerConfigs } from "../types/index" + +import BaseController from "./BaseController" + +class AMBReporterController extends BaseController { + private _reportHeadersGas: number + + constructor(_configs: AMBReporterControllerConfigs) { + super(_configs, "AMBReporterController") + this._reportHeadersGas = _configs.reportHeadersGas } - async onBlocks(blockNumbers: bigint[]) { + async onBlocks(_blockNumbers: bigint[]) { try { - this.logger.info("AMB: Starting AMB Reporter") - const client = this.multiClient.getClientByChain(this.sourceChain) for (const chain of this.destinationChains) { - let chainName = chain.name.toLocaleLowerCase() + this.logger.info( + `reporting block headers of blocks [${_blockNumbers[0]},${_blockNumbers[_blockNumbers.length - 1]}] on ${ + chain.name + } ...`, + ) const { request } = await client.simulateContract({ address: this.reporterAddress as `0x${string}`, - abi: contractABI, + abi: ABI, functionName: "reportHeaders", - args: [blockNumbers, this.adapterAddresses[chainName], this.gas], + args: [_blockNumbers, this.adapterAddresses[chain.name], this._reportHeadersGas], }) - const txhash = await client.writeContract(request) - this.logger.info(`AMB: TxHash from AMB Controller: ${txhash} on ${chain.name}`) + const txHash = await client.writeContract(request) + this.logger.info(`tx sent on ${chain.name}: ${txHash}`) } - } catch (error) { - this.logger.error(`AMB: Error from AMB Controller: ${error}`) + } catch (_error) { + this.logger.error(_error) } } } diff --git a/packages/reporter/src/controllers/BaseController.ts b/packages/reporter/src/controllers/BaseController.ts new file mode 100644 index 00000000..a5405a6a --- /dev/null +++ b/packages/reporter/src/controllers/BaseController.ts @@ -0,0 +1,29 @@ +import { Chain } from "viem" +import winston from "winston" + +import Multiclient from "../MultiClient" + +import { BaseControllerConfigs } from "../types" + +class BaseController { + name: string + sourceChain: Chain + destinationChains: Chain[] + reporterAddress?: string + adapterAddresses: { [chainName: string]: `0x${string}` } + logger: winston.Logger + multiClient: Multiclient + + constructor(configs: BaseControllerConfigs, name: string) { + this.sourceChain = configs.sourceChain + this.destinationChains = configs.destinationChains + this.reporterAddress = configs.reporterAddress as `0x${string}` + this.adapterAddresses = configs.adapterAddresses + this.multiClient = configs.multiClient + this.name = name + + this.logger = configs.logger.child({ service: this.name }) + } +} + +export default BaseController diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index fb70635f..ec2fe288 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -1,58 +1,48 @@ -import { parseEther, Chain } from "viem" -import winston from "winston" - -import contractABI from "../ABIs/SygmaReporterContractABI.json" -import Multiclient from "../MultiClient" -import { ControllerConfig } from "../types/index" - -class SygmaReporterController { - sourceChain: Chain - destinationChains: Chain[] - name: string = "sygma" - logger: winston.Logger - multiClient: Multiclient - reporterAddress: `0x${string}` - adapterAddresses: { [chainName: string]: `0x${string}` } - destinationDomainID: string - fee: string - isLightClient: boolean - - constructor(configs: ControllerConfig) { - this.sourceChain = configs.sourceChain - this.destinationChains = configs.destinationChains - this.logger = configs.logger - this.multiClient = configs.multiClient - this.isLightClient = configs.isLightClient - this.reporterAddress = configs.reporterAddress as `0x${string}` - this.adapterAddresses = configs.adapterAddresses - this.destinationDomainID = configs.data.destDomainID - this.fee = configs.data.fee +import { parseEther } from "viem" + +import ABI from "../ABIs/SygmaReporterContractABI.json" +import BaseController from "./BaseController" + +import { SygmaReporterControllerConfigs } from "../types/index" + +class SygmaReporterController extends BaseController { + private _domainIds: { [chainName: string]: number } + private _reportHeadersToDomainMsgValue: string + + constructor(_configs: SygmaReporterControllerConfigs) { + super(_configs, "SygmaReporterController") + this._domainIds = _configs.domainIds + this._reportHeadersToDomainMsgValue = _configs.reportHeadersToDomainMsgValue } - async onBlocks(blockNumbers: bigint[]) { + async onBlocks(_blockNumbers: bigint[]) { try { - this.logger.info("Sygma: Starting Sygma Reporter") const client = this.multiClient.getClientByChain(this.sourceChain) for (const chain of this.destinationChains) { - const chainName = chain.name.toLocaleLowerCase() + this.logger.info( + `reporting block headers of blocks [${_blockNumbers[0]},${_blockNumbers[_blockNumbers.length - 1]}] on ${ + chain.name + } ...`, + ) + const { request } = await client.simulateContract({ address: this.reporterAddress as `0x${string}`, - abi: contractABI, + abi: ABI, functionName: "reportHeadersToDomain", args: [ - blockNumbers, - this.adapterAddresses[chainName], - this.destinationDomainID[chainName as keyof typeof this.destinationDomainID], + _blockNumbers, + this.adapterAddresses[chain.name], + this._domainIds[chain.name as keyof typeof this._domainIds], "0x", ], - value: parseEther(this.fee), + value: parseEther(this._reportHeadersToDomainMsgValue), }) const txhash = await client.writeContract(request) - this.logger.info(`Sygma: TxHash from Sygma Controller: ${txhash} on ${chain.name}`) + this.logger.info(`tx sent on ${chain.name}: ${txhash}`) } - } catch (error) { - this.logger.error(`Sygma: Error from Sygma Controller: ${error}`) + } catch (_error) { + this.logger.error(_error) } } } diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index df55af1d..9e8b2960 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -1,100 +1,89 @@ import axios from "axios" -import { hexToNumber, Chain } from "viem" -import winston from "winston" - -import lightClientContractABI from "../ABIs/TelepathyContractABI.json" -import adapterContractABI from "../ABIs/TelepathyAdapterABI.json" -import Multiclient from "../MultiClient" -import { ControllerConfig } from "../types/index" - -class TelepathyReporterController { - sourceChain: Chain - destinationChains: Chain[] - name: string = "telepathy" - logger: winston.Logger - multiClient: Multiclient - isLightClient: boolean - adapterAddresses: { [chainName: string]: `0x${string}` } +import { hexToNumber } from "viem" + +import LightClientContractABI from "../ABIs/TelepathyContractABI.json" +import AdapterContractABI from "../ABIs/TelepathyAdapterABI.json" +import BaseController from "./BaseController" + +import { TelepathyReporterControllerConfigs } from "../types/index" + +class TelepathyReporterController extends BaseController { + lastProcessedBlock: bigint + blockBuffer: number lightClientAddresses: { [chainName: string]: `0x${string}` } - baseProofUrl: string - blockBuffer: string - lastProcessedBlock: bigint = 30000000n - - constructor(configs: ControllerConfig) { - this.sourceChain = configs.sourceChain - this.destinationChains = configs.destinationChains - this.logger = configs.logger - this.multiClient = configs.multiClient - this.isLightClient = configs.isLightClient - this.adapterAddresses = configs.adapterAddresses - this.lightClientAddresses = configs.data.lightClientAddresses - this.baseProofUrl = configs.data.baseProofUrl - - this.blockBuffer = configs.data.blockBuffer + + private _baseProofUrl: string + private _intervalFetchBlocksMs: number + private _intervals: ReturnType | undefined + + constructor(_configs: TelepathyReporterControllerConfigs) { + super(_configs, "TelepathyReporterController") + + this.lightClientAddresses = _configs.lightClientAddresses + this.blockBuffer = _configs.blockBuffer + this._intervalFetchBlocksMs = _configs.intervalFetchBlocksMs + this._baseProofUrl = _configs.baseProofUrl + + this.lastProcessedBlock = 0n + } + + start() { + this.fetchHeadUpdates() + this._intervals = setInterval(() => { + this.fetchHeadUpdates() + }, this._intervalFetchBlocksMs) + } + + stop() { + clearInterval(this._intervals) } - async onBlocks() { - try { - // Telepathy only support light client on Gnosis at the moment - this.logger.info("Telepathy: Starting Telepathy Reporter") + async fetchHeadUpdates() { + try { for (const chain of this.destinationChains) { const client = this.multiClient.getClientByChain(chain) - const adapterAddr = this.adapterAddresses[chain.name.toLocaleLowerCase()] - const lightClientAddr = this.lightClientAddresses[chain.name.toLocaleLowerCase()] - - // Getting the latest block number from provider const currentBlockNumber = await client.getBlockNumber() + const fromBlock = this.lastProcessedBlock + 1n + const toBlock = currentBlockNumber - BigInt(this.blockBuffer) - // get contract events from latest block - queryBlockLength : latest block - blockBuffer - - const blockBuffer = BigInt(this.blockBuffer) // put ${buffer} blocks before the current block in case the node provider don't sync up at the head - const startBlock = this.lastProcessedBlock - const endBlock = currentBlockNumber - blockBuffer - - this.logger.info( - `Telepathy: Getting Contract Event from block ${startBlock} to block ${endBlock} on ${chain.name}`, - ) + this.logger.info(`getting HeadUpdate events in [${fromBlock},${toBlock}] on ${chain.name} ...`) const logs = await client.getContractEvents({ - address: lightClientAddr as `0x${string}`, - abi: lightClientContractABI, + address: this.lightClientAddresses[chain.name.toLocaleLowerCase()] as `0x${string}`, + abi: LightClientContractABI, eventName: "HeadUpdate", - fromBlock: startBlock, - toBlock: endBlock, + fromBlock, + toBlock, }) if (logs.length == 0) { - this.logger.error("No event is found!") - return + continue } - logs.forEach(async (event: any) => { - const slotValue = event.topics[1] - this.logger.info(`Fetching proof for slot ${slotValue} on ${chain.name}`) + this.logger.error(`detected ${logs.length} HeadUpdate events. Processing them ...`) + logs.forEach(async (_log: any) => { + const slotValue = _log.topics[1] + this.logger.info(`fetching proof for slot ${slotValue} on ${chain.name} ...`) - const url = `${this.baseProofUrl}${this.sourceChain.id}/${hexToNumber(slotValue!)}` - - const response = await axios.post(url) + const response = await axios.post(`${this._baseProofUrl}${this.sourceChain.id}/${hexToNumber(slotValue!)}`) const { chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof } = response.data.result - this.logger.info(`Telepathy: Calling storeBlockHeader for block number ${blockNumber}`) + this.logger.info(`calling storeBlockHeader for block number ${blockNumber} ...`) const { request } = await client.simulateContract({ - address: adapterAddr as `0x${string}`, - abi: adapterContractABI, + address: this.adapterAddresses[chain.name.toLocaleLowerCase()] as `0x${string}`, + abi: AdapterContractABI, functionName: "storeBlockHeader", args: [chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof], }) const txHash = await client.writeContract(request) - setTimeout(() => {}, 2000) - - this.logger.info(`Telepathy: TxHash from Telepathy Controller: ${txHash} on ${chain.name} `) + this.logger.info(`tx sent on ${chain.name}: ${txHash}`) }) - this.lastProcessedBlock = endBlock + this.lastProcessedBlock = toBlock } - } catch (error) { - this.logger.error(`Telepathy: Error from Telepathy Controller: ${error}`) + } catch (_error) { + this.logger.error(_error) } } } diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index c774cba3..b0efa0c7 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -1,5 +1,6 @@ -import { gnosis, goerli } from "viem/chains" -import winston from "winston" +import * as chains from "viem/chains" +import { gnosis } from "viem/chains" +import { Chain } from "viem" import Multiclient from "./MultiClient" import AMBReporterController from "./controllers/AMBReporterController" @@ -7,83 +8,75 @@ import SygmaReporterController from "./controllers/SygmaReporterController" import TelepathyReporterController from "./controllers/TelepathyReporterController" import BlocksListener from "./BlockListener" import { settings } from "./settings/index" +import logger from "./utils/logger" -function main() { - const goerliRPC = settings.config.goerliRPC as string - const gnosisRPC = settings.config.gnosisRPC as string - const privKey = settings.config.privKey as `0x${string}` - const queryBlockLength = Number(settings.blockListener.queryBlockLength) - const blockBuffer = Number(settings.blockListener.blockBuffer) - const timeFetchBlocksMs = Number(settings.blockListener.timeFetchBlocksMs) - const LCTimeStoreHashesMs = Number(settings.blockListener.LCTimeStoreHashesMs) +const main = () => { + const controllersEnabled = process.env.REPORTERS_ENABLED?.split(",") + const sourceChainId = Number(process.env.SOURCE_CHAIN_ID) + const destinationChainIds = process.env.DESTINATION_CHAIN_IDS?.split(",").map((_chainId) => Number(_chainId)) + + const sourceChain = Object.values(chains).find((_chain) => _chain.id === sourceChainId) as Chain + const destinationChains = Object.values(chains).filter((_chain) => destinationChainIds?.includes(_chain.id)) - const logger = winston.createLogger({ - level: "info", - format: winston.format.json(), - transports: [new winston.transports.Console()], - }) const multiClient = new Multiclient({ - chains: [goerli, gnosis], - privateKey: privKey, + chains: [sourceChain, ...destinationChains], + privateKey: process.env.PRIVATE_KEY as `0x${string}`, rpcUrls: { - goerli: goerliRPC, - gnosis: gnosisRPC, + goerli: settings.rpcUrls.Gnosis, + gnosis: settings.rpcUrls.Goerli, }, }) const ambReporterController = new AMBReporterController({ - sourceChain: goerli, - destinationChains: [gnosis], + sourceChain, + destinationChains, logger, multiClient, - isLightClient: false, - reporterAddress: settings.contractAddresses.goerli.AMBReporter, - adapterAddresses: { gnosis: settings.contractAddresses.gnosis.AMBAdapter as `0x${string}` }, - data: { gas: settings.reporterControllers.AMBReporterController.gas }, + reporterAddress: settings.contractAddresses.Goerli.AMBReporter, + adapterAddresses: { [gnosis.name]: settings.contractAddresses.Gnosis.AMBAdapter }, + reportHeadersGas: settings.reporterControllers.AMBReporterController.reportHeadersGas, }) + const sygmaReporterController = new SygmaReporterController({ - sourceChain: goerli, - destinationChains: [gnosis], + sourceChain, + destinationChains, logger, multiClient, - isLightClient: false, - reporterAddress: settings.contractAddresses.goerli.SygmaReporter, - adapterAddresses: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter as `0x${string}` }, - data: { - fee: settings.reporterControllers.SygmaReporterController.data, - destDomainID: settings.reporterControllers.SygmaReporterController.domainID, - }, + reporterAddress: settings.contractAddresses.Goerli.SygmaReporter, + adapterAddresses: { [gnosis.name]: settings.contractAddresses.Gnosis.SygmaAdapter }, + reportHeadersToDomainMsgValue: settings.reporterControllers.SygmaReporterController.reportHeadersToDomainMsgValue, + domainIds: settings.reporterControllers.SygmaReporterController.domainIds, }) + const telepathyReporterController = new TelepathyReporterController({ - sourceChain: goerli, - destinationChains: [gnosis], + sourceChain, + destinationChains, logger, multiClient, - isLightClient: true, - adapterAddresses: { gnosis: settings.contractAddresses.gnosis.SygmaAdapter as `0x${string}` }, - data: { - baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, - lightClientAddresses: { gnosis: settings.contractAddresses.gnosis.TelepathyLightClient }, - blockBuffer: settings.reporterControllers.TelepathyReporterController.blockBuffer, - }, + adapterAddresses: { [gnosis.name]: settings.contractAddresses.Gnosis.SygmaAdapter }, + baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, + lightClientAddresses: { [gnosis.name]: settings.contractAddresses.Gnosis.TelepathyLightClient }, + blockBuffer: settings.reporterControllers.TelepathyReporterController.blockBuffer, + intervalFetchBlocksMs: settings.reporterControllers.TelepathyReporterController.intervalFetchBlocksMs, }) - const controllersEnabled = process.env.REPORTERS_ENABLED?.split(",") - const blocksListener = new BlocksListener({ - controllers: [ambReporterController, sygmaReporterController, telepathyReporterController].filter( - (controller) => controllersEnabled?.includes(controller.name), + controllers: [ambReporterController, sygmaReporterController].filter( + (_controller) => controllersEnabled?.includes(_controller.name), ), - timeFetchBlocksMs, - LCTimeStoreHashesMs, + intervalFetchBlocksMs: settings.BlockListener.intervalFetchBlocksMs, logger, multiclient: multiClient, - sourceChain: goerli, - queryBlockLength, // modify the query block length here, <256 - block buffer - blockBuffer, + sourceChain, + queryBlockLength: settings.BlockListener.queryBlockLength, + blockBuffer: settings.BlockListener.blockBuffer, }) blocksListener.start() + + if (controllersEnabled?.includes(telepathyReporterController.name)) { + telepathyReporterController.start() + } } main() diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index be89f0ac..6e71e696 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -1,48 +1,43 @@ import "dotenv/config" +import { gnosis, mainnet, goerli } from "viem/chains" export const settings = { + BlockListener: { + blockBuffer: Number(process.env.BLOCK_BUFFER), + queryBlockLength: Number(process.env.QUERY_BLOCK_LENGTH), + intervalFetchBlocksMs: Number(process.env.TIME_FETCH_BLOCKS_MS), + }, + rpcUrls: { + [gnosis.name]: process.env.GNOSIS_RPC_URL as string, + [goerli.name]: process.env.GOERLI_RPC_URL as string, + }, contractAddresses: { - goerli: { - AMBReporter: "0xedc0b1d3de4496e0d917af42f29cb71eb2982319", - SygmaReporter: "0x2f96d347c932ac73b56e9352ecc0707e25173d88", + [gnosis.name]: { + AMBAdapter: "0x01268DB05965CeAc2a89566c42CD550ED7eE5ECD" as `0x${string}`, + SygmaAdapter: "0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15" as `0x${string}`, + TelapathyAdapter: "0x2f1E51a2763FB67fe09971Fd8d849716137A3357" as `0x${string}`, + TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, }, - mainnet: {}, - gnosis: { - AMBAdapter: "0x01268DB05965CeAc2a89566c42CD550ED7eE5ECD", - SygmaAdapter: "0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15", - TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83", - TelapathyAdapter: "0x2f1E51a2763FB67fe09971Fd8d849716137A3357", + [goerli.name]: { + AMBReporter: "0xedc0b1d3de4496e0d917af42f29cb71eb2982319" as `0x${string}`, + SygmaReporter: "0x2f96d347c932ac73b56e9352ecc0707e25173d88" as `0x${string}`, }, }, - config: { - goerliRPC: process.env.GOERLI_RPC_URL, - gnosisRPC: process.env.GNOSIS_RPC_URL, - privKey: process.env.PRIVATE_KEY, - }, reporterControllers: { AMBReporterController: { - interval: process.env.AMB_INTERVAL, - gas: process.env.AMB_GAS, + reportHeadersGas: Number(process.env.AMB_REPORTER_HEADERS_GAS), }, SygmaReporterController: { - domainID: { - gnosis: "101", - goerli: "1", + reportHeadersToDomainMsgValue: process.env.SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE as string, + domainIds: { + [gnosis.name]: 101, + [mainnet.name]: 1, }, - interval: process.env.SYGMA_INTERVAL, - data: process.env.SYGMA_MSG_VALUE, }, TelepathyReporterController: { - internal: process.env.TELEPATHY_INTERVAL, - baseProofUrl: process.env.TELEPATHY_PROOF_API_URL, - blockBuffer: process.env.TELEPATHY_BLOCK_BUFFER, + baseProofUrl: process.env.TELEPATHY_PROOF_API_URL as string, + blockBuffer: Number(process.env.TELEPATHY_BLOCK_BUFFER), + intervalFetchBlocksMs: Number(process.env.TELEPATHY_TIME_FETCH_BLOCK_MS), }, }, - - blockListener: { - queryBlockLength: process.env.QUERY_BLOCK_LENGTH, - blockBuffer: process.env.BLOCK_BUFFER, - timeFetchBlocksMs: process.env.TIME_FETCH_BLOCKS_MS, - LCTimeStoreHashesMs: process.env.LC_TIME_STORE_HASHES_MS, - }, } diff --git a/packages/reporter/src/types/index.ts b/packages/reporter/src/types/index.ts index 4e7d5253..5110faba 100644 --- a/packages/reporter/src/types/index.ts +++ b/packages/reporter/src/types/index.ts @@ -3,26 +3,45 @@ import winston = require("winston") import Multiclient from "../MultiClient" -type ControllerConfig = { +type BaseControllerConfigs = { sourceChain: Chain destinationChains: Chain[] reporterAddress?: string adapterAddresses: { [chainName: string]: `0x${string}` } logger: winston.Logger multiClient: Multiclient - data: any // controller-specific data - isLightClient: boolean } -type BlockListenerConfig = { +interface TelepathyReporterControllerConfigs extends BaseControllerConfigs { + lightClientAddresses: { [chainName: string]: `0x${string}` } + baseProofUrl: string + blockBuffer: number + intervalFetchBlocksMs: number +} + +interface AMBReporterControllerConfigs extends BaseControllerConfigs { + reportHeadersGas: number +} + +interface SygmaReporterControllerConfigs extends BaseControllerConfigs { + reportHeadersToDomainMsgValue: string + domainIds: { [chainName: string]: number } +} + +interface BlockListenerConfigs { controllers: any[] logger: winston.Logger - timeFetchBlocksMs: number - LCTimeStoreHashesMs: number + intervalFetchBlocksMs: number multiclient: Multiclient sourceChain: Chain queryBlockLength: number blockBuffer: number } -export { ControllerConfig, BlockListenerConfig } +export { + AMBReporterControllerConfigs, + BaseControllerConfigs, + BlockListenerConfigs, + SygmaReporterControllerConfigs, + TelepathyReporterControllerConfigs, +} diff --git a/packages/reporter/src/utils/logger.ts b/packages/reporter/src/utils/logger.ts new file mode 100644 index 00000000..54055ed2 --- /dev/null +++ b/packages/reporter/src/utils/logger.ts @@ -0,0 +1,28 @@ +import winston from "winston" + +const colors = { + error: "red", + warn: "yellow", + info: "cyan", + debug: "blue", + service: "magenta", +} + +const logger = winston.createLogger({ + level: "info", + format: winston.format.combine( + winston.format.colorize({ + colors, + }), + winston.format.timestamp(), + winston.format.printf(({ timestamp, level, message, service }) => { + const colorize = winston.format.colorize() + return `${timestamp} [${level}] ${colorize.colorize("service", `${service}`)}: ${message}` + }), + ), + transports: [new winston.transports.Console(), new winston.transports.File({ filename: "./logs/application.log" })], +}) + +winston.addColors(colors) + +export default logger diff --git a/packages/reporter/yarn.lock b/packages/reporter/yarn.lock index 898adfbb..db593311 100644 --- a/packages/reporter/yarn.lock +++ b/packages/reporter/yarn.lock @@ -1,1082 +1,2800 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - "version" "1.2.6" - -"@adraffy/ens-normalize@1.9.4": - "version" "1.9.4" - -"@colors/colors@^1.6.0", "@colors/colors@1.6.0": - "integrity" "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==" - "resolved" "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz" - "version" "1.6.0" - -"@cspotcode/source-map-support@^0.8.0": - "version" "0.8.1" - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@dabh/diagnostics@^2.0.2": - "integrity" "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==" - "resolved" "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz" - "version" "2.0.3" - dependencies: - "colorspace" "1.1.x" - "enabled" "2.0.x" - "kuler" "^2.0.0" - -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - "version" "4.4.0" - dependencies: - "eslint-visitor-keys" "^3.3.0" - -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - "version" "4.9.1" - -"@eslint/eslintrc@^2.1.2": - "version" "2.1.2" - dependencies: - "ajv" "^6.12.4" - "debug" "^4.3.2" - "espree" "^9.6.0" - "globals" "^13.19.0" - "ignore" "^5.2.0" - "import-fresh" "^3.2.1" - "js-yaml" "^4.1.0" - "minimatch" "^3.1.2" - "strip-json-comments" "^3.1.1" - -"@eslint/js@8.51.0": - "version" "8.51.0" - -"@humanwhocodes/config-array@^0.11.11": - "version" "0.11.11" - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - "debug" "^4.1.1" - "minimatch" "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - "version" "1.0.1" - -"@humanwhocodes/object-schema@^1.2.1": - "version" "1.2.1" - -"@jridgewell/resolve-uri@^3.0.3": - "version" "3.1.1" - -"@jridgewell/sourcemap-codec@^1.4.10": - "version" "1.4.15" - -"@jridgewell/trace-mapping@0.3.9": - "version" "0.3.9" - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@noble/curves@~1.2.0", "@noble/curves@1.2.0": - "version" "1.2.0" - dependencies: - "@noble/hashes" "1.3.2" - -"@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2", "@noble/hashes@1.3.2": - "version" "1.3.2" - -"@nodelib/fs.scandir@2.1.5": - "version" "2.1.5" - dependencies: - "@nodelib/fs.stat" "2.0.5" - "run-parallel" "^1.1.9" - -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": - "version" "2.0.5" - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - "version" "1.2.8" - dependencies: - "@nodelib/fs.scandir" "2.1.5" - "fastq" "^1.6.0" - -"@scure/base@~1.1.0", "@scure/base@~1.1.2": - "version" "1.1.3" - -"@scure/bip32@1.3.2": - "version" "1.3.2" - dependencies: - "@noble/curves" "~1.2.0" - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.2" - -"@scure/bip39@1.2.1": - "version" "1.2.1" - dependencies: - "@noble/hashes" "~1.3.0" - "@scure/base" "~1.1.0" - -"@tsconfig/node10@^1.0.7": - "version" "1.0.9" - -"@tsconfig/node12@^1.0.7": - "version" "1.0.11" - -"@tsconfig/node14@^1.0.0": - "version" "1.0.3" - -"@tsconfig/node16@^1.0.2": - "version" "1.0.4" - -"@types/json-schema@^7.0.12": - "version" "7.0.13" - -"@types/node-cron@^3.0.9": - "integrity" "sha512-P10Vf+oagnMbefD31nqjS/dpBM34qzfdpvIgVZwtwsNb0Hg2lDaPFeGcyGUJIqh3zHlDMwYXGeunGgMnswgnPg==" - "resolved" "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.9.tgz" - "version" "3.0.9" - -"@types/node@*", "@types/node@^20.8.6": - "integrity" "sha512-eWO4K2Ji70QzKUqRy6oyJWUeB7+g2cRagT3T/nxYibYcT4y2BDL8lqolRXjTHmkZCdJfIPaY73KbJAZmcryxTQ==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-20.8.6.tgz" - "version" "20.8.6" - dependencies: - "undici-types" "~5.25.1" - -"@types/semver@^7.5.0": - "version" "7.5.3" - -"@types/triple-beam@^1.3.2": - "integrity" "sha512-HlJjF3wxV4R2VQkFpKe0YqJLilYNgtRtsqqZtby7RkVsSs+i+vbyzjtUwpFEdUCKcrGzCiEJE7F/0mKjh0sunA==" - "resolved" "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.4.tgz" - "version" "1.3.4" - -"@typescript-eslint/eslint-plugin@^6.7.5": - "version" "6.7.5" - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.7.5" - "@typescript-eslint/type-utils" "6.7.5" - "@typescript-eslint/utils" "6.7.5" - "@typescript-eslint/visitor-keys" "6.7.5" - "debug" "^4.3.4" - "graphemer" "^1.4.0" - "ignore" "^5.2.4" - "natural-compare" "^1.4.0" - "semver" "^7.5.4" - "ts-api-utils" "^1.0.1" - -"@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@^6.7.5": - "version" "6.7.5" - dependencies: - "@typescript-eslint/scope-manager" "6.7.5" - "@typescript-eslint/types" "6.7.5" - "@typescript-eslint/typescript-estree" "6.7.5" - "@typescript-eslint/visitor-keys" "6.7.5" - "debug" "^4.3.4" - -"@typescript-eslint/scope-manager@6.7.5": - "version" "6.7.5" - dependencies: - "@typescript-eslint/types" "6.7.5" - "@typescript-eslint/visitor-keys" "6.7.5" - -"@typescript-eslint/type-utils@6.7.5": - "version" "6.7.5" - dependencies: - "@typescript-eslint/typescript-estree" "6.7.5" - "@typescript-eslint/utils" "6.7.5" - "debug" "^4.3.4" - "ts-api-utils" "^1.0.1" - -"@typescript-eslint/types@6.7.5": - "version" "6.7.5" - -"@typescript-eslint/typescript-estree@6.7.5": - "version" "6.7.5" - dependencies: - "@typescript-eslint/types" "6.7.5" - "@typescript-eslint/visitor-keys" "6.7.5" - "debug" "^4.3.4" - "globby" "^11.1.0" - "is-glob" "^4.0.3" - "semver" "^7.5.4" - "ts-api-utils" "^1.0.1" - -"@typescript-eslint/utils@6.7.5": - "version" "6.7.5" - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.7.5" - "@typescript-eslint/types" "6.7.5" - "@typescript-eslint/typescript-estree" "6.7.5" - "semver" "^7.5.4" - -"@typescript-eslint/visitor-keys@6.7.5": - "version" "6.7.5" - dependencies: - "@typescript-eslint/types" "6.7.5" - "eslint-visitor-keys" "^3.4.1" - -"abbrev@1": - "version" "1.1.1" - -"abitype@0.9.8": - "version" "0.9.8" - -"acorn-jsx@^5.3.2": - "version" "5.3.2" - -"acorn-walk@^8.1.1": - "version" "8.2.0" - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8.4.1", "acorn@^8.9.0": - "version" "8.10.0" - -"ajv@^6.12.4": - "version" "6.12.6" - dependencies: - "fast-deep-equal" "^3.1.1" - "fast-json-stable-stringify" "^2.0.0" - "json-schema-traverse" "^0.4.1" - "uri-js" "^4.2.2" - -"ansi-regex@^5.0.1": - "version" "5.0.1" - -"ansi-styles@^4.1.0": - "version" "4.3.0" - dependencies: - "color-convert" "^2.0.1" - -"anymatch@~3.1.2": - "version" "3.1.3" - dependencies: - "normalize-path" "^3.0.0" - "picomatch" "^2.0.4" - -"arg@^4.1.0": - "version" "4.1.3" - -"argparse@^2.0.1": - "version" "2.0.1" - -"array-union@^2.1.0": - "version" "2.1.0" - -"async@^3.2.3": - "integrity" "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" - "version" "3.2.4" - -"asynckit@^0.4.0": - "version" "0.4.0" - -"axios@^1.5.1": - "version" "1.5.1" - dependencies: - "follow-redirects" "^1.15.0" - "form-data" "^4.0.0" - "proxy-from-env" "^1.1.0" - -"balanced-match@^1.0.0": - "version" "1.0.2" - -"binary-extensions@^2.0.0": - "version" "2.2.0" - -"brace-expansion@^1.1.7": - "version" "1.1.11" - dependencies: - "balanced-match" "^1.0.0" - "concat-map" "0.0.1" - -"braces@^3.0.2", "braces@~3.0.2": - "version" "3.0.2" - dependencies: - "fill-range" "^7.0.1" - -"callsites@^3.0.0": - "version" "3.1.0" - -"chalk@^4.0.0": - "version" "4.1.2" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"chokidar@^3.5.2": - "version" "3.5.3" - 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@^1.9.3": - "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - "version" "1.9.3" - dependencies: - "color-name" "1.1.3" - -"color-convert@^2.0.1": - "version" "2.0.1" - dependencies: - "color-name" "~1.1.4" - -"color-name@^1.0.0", "color-name@~1.1.4": - "version" "1.1.4" - -"color-name@1.1.3": - "integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - "version" "1.1.3" - -"color-string@^1.6.0": - "integrity" "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==" - "resolved" "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" - "version" "1.9.1" - dependencies: - "color-name" "^1.0.0" - "simple-swizzle" "^0.2.2" - -"color@^3.1.3": - "integrity" "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==" - "resolved" "https://registry.npmjs.org/color/-/color-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "color-convert" "^1.9.3" - "color-string" "^1.6.0" - -"colorspace@1.1.x": - "integrity" "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==" - "resolved" "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz" - "version" "1.1.4" - dependencies: - "color" "^3.1.3" - "text-hex" "1.0.x" - -"combined-stream@^1.0.8": - "version" "1.0.8" - dependencies: - "delayed-stream" "~1.0.0" - -"concat-map@0.0.1": - "version" "0.0.1" - -"create-require@^1.1.0": - "version" "1.1.1" - -"cross-spawn@^7.0.2": - "version" "7.0.3" - dependencies: - "path-key" "^3.1.0" - "shebang-command" "^2.0.0" - "which" "^2.0.1" - -"debug@^3.2.7": - "version" "3.2.7" - dependencies: - "ms" "^2.1.1" - -"debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.4": - "version" "4.3.4" - dependencies: - "ms" "2.1.2" - -"deep-is@^0.1.3": - "version" "0.1.4" - -"delayed-stream@~1.0.0": - "version" "1.0.0" - -"diff@^4.0.1": - "version" "4.0.2" - -"dir-glob@^3.0.1": - "version" "3.0.1" - dependencies: - "path-type" "^4.0.0" - -"doctrine@^3.0.0": - "version" "3.0.0" - dependencies: - "esutils" "^2.0.2" - -"dotenv@^16.3.1": - "version" "16.3.1" - -"enabled@2.0.x": - "integrity" "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" - "resolved" "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz" - "version" "2.0.0" - -"escape-string-regexp@^4.0.0": - "version" "4.0.0" - -"eslint-config-prettier@^9.0.0": - "version" "9.0.0" - -"eslint-scope@^7.2.2": - "version" "7.2.2" - dependencies: - "esrecurse" "^4.3.0" - "estraverse" "^5.2.0" - -"eslint-visitor-keys@^3.3.0", "eslint-visitor-keys@^3.4.1", "eslint-visitor-keys@^3.4.3": - "version" "3.4.3" - -"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^8.51.0", "eslint@>=7.0.0": - "version" "8.51.0" - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.51.0" - "@humanwhocodes/config-array" "^0.11.11" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "ajv" "^6.12.4" - "chalk" "^4.0.0" - "cross-spawn" "^7.0.2" - "debug" "^4.3.2" - "doctrine" "^3.0.0" - "escape-string-regexp" "^4.0.0" - "eslint-scope" "^7.2.2" - "eslint-visitor-keys" "^3.4.3" - "espree" "^9.6.1" - "esquery" "^1.4.2" - "esutils" "^2.0.2" - "fast-deep-equal" "^3.1.3" - "file-entry-cache" "^6.0.1" - "find-up" "^5.0.0" - "glob-parent" "^6.0.2" - "globals" "^13.19.0" - "graphemer" "^1.4.0" - "ignore" "^5.2.0" - "imurmurhash" "^0.1.4" - "is-glob" "^4.0.0" - "is-path-inside" "^3.0.3" - "js-yaml" "^4.1.0" - "json-stable-stringify-without-jsonify" "^1.0.1" - "levn" "^0.4.1" - "lodash.merge" "^4.6.2" - "minimatch" "^3.1.2" - "natural-compare" "^1.4.0" - "optionator" "^0.9.3" - "strip-ansi" "^6.0.1" - "text-table" "^0.2.0" - -"espree@^9.6.0", "espree@^9.6.1": - "version" "9.6.1" - dependencies: - "acorn" "^8.9.0" - "acorn-jsx" "^5.3.2" - "eslint-visitor-keys" "^3.4.1" - -"esquery@^1.4.2": - "version" "1.5.0" - dependencies: - "estraverse" "^5.1.0" - -"esrecurse@^4.3.0": - "version" "4.3.0" - dependencies: - "estraverse" "^5.2.0" - -"estraverse@^5.1.0", "estraverse@^5.2.0": - "version" "5.3.0" - -"esutils@^2.0.2": - "version" "2.0.3" - -"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": - "version" "3.1.3" - -"fast-glob@^3.2.9": - "version" "3.3.1" - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - "glob-parent" "^5.1.2" - "merge2" "^1.3.0" - "micromatch" "^4.0.4" - -"fast-json-stable-stringify@^2.0.0": - "version" "2.1.0" - -"fast-levenshtein@^2.0.6": - "version" "2.0.6" - -"fastq@^1.6.0": - "version" "1.15.0" - dependencies: - "reusify" "^1.0.4" - -"fecha@^4.2.0": - "integrity" "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" - "resolved" "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz" - "version" "4.2.3" - -"file-entry-cache@^6.0.1": - "version" "6.0.1" - dependencies: - "flat-cache" "^3.0.4" - -"fill-range@^7.0.1": - "version" "7.0.1" - dependencies: - "to-regex-range" "^5.0.1" - -"find-up@^5.0.0": - "version" "5.0.0" - dependencies: - "locate-path" "^6.0.0" - "path-exists" "^4.0.0" - -"flat-cache@^3.0.4": - "version" "3.1.1" - dependencies: - "flatted" "^3.2.9" - "keyv" "^4.5.3" - "rimraf" "^3.0.2" - -"flatted@^3.2.9": - "version" "3.2.9" - -"fn.name@1.x.x": - "integrity" "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" - "resolved" "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz" - "version" "1.1.0" - -"follow-redirects@^1.15.0": - "version" "1.15.3" - -"form-data@^4.0.0": - "version" "4.0.0" - dependencies: - "asynckit" "^0.4.0" - "combined-stream" "^1.0.8" - "mime-types" "^2.1.12" - -"fs.realpath@^1.0.0": - "version" "1.0.0" - -"glob-parent@^5.1.2", "glob-parent@~5.1.2": - "version" "5.1.2" - dependencies: - "is-glob" "^4.0.1" - -"glob-parent@^6.0.2": - "version" "6.0.2" - dependencies: - "is-glob" "^4.0.3" - -"glob@^7.1.3": - "version" "7.2.3" - 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" - -"globals@^13.19.0": - "version" "13.23.0" - dependencies: - "type-fest" "^0.20.2" - -"globby@^11.1.0": - "version" "11.1.0" - dependencies: - "array-union" "^2.1.0" - "dir-glob" "^3.0.1" - "fast-glob" "^3.2.9" - "ignore" "^5.2.0" - "merge2" "^1.4.1" - "slash" "^3.0.0" - -"graphemer@^1.4.0": - "version" "1.4.0" - -"has-flag@^3.0.0": - "version" "3.0.0" - -"has-flag@^4.0.0": - "version" "4.0.0" - -"ignore-by-default@^1.0.1": - "version" "1.0.1" - -"ignore@^5.2.0", "ignore@^5.2.4": - "version" "5.2.4" - -"import-fresh@^3.2.1": - "version" "3.3.0" - dependencies: - "parent-module" "^1.0.0" - "resolve-from" "^4.0.0" - -"imurmurhash@^0.1.4": - "version" "0.1.4" - -"inflight@^1.0.4": - "version" "1.0.6" - dependencies: - "once" "^1.3.0" - "wrappy" "1" - -"inherits@^2.0.3", "inherits@2": - "version" "2.0.4" - -"is-arrayish@^0.3.1": - "integrity" "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" - "version" "0.3.2" - -"is-binary-path@~2.1.0": - "version" "2.1.0" - dependencies: - "binary-extensions" "^2.0.0" - -"is-extglob@^2.1.1": - "version" "2.1.1" - -"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3", "is-glob@~4.0.1": - "version" "4.0.3" - dependencies: - "is-extglob" "^2.1.1" - -"is-number@^7.0.0": - "version" "7.0.0" - -"is-path-inside@^3.0.3": - "version" "3.0.3" - -"is-stream@^2.0.0": - "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - "version" "2.0.1" - -"isexe@^2.0.0": - "version" "2.0.0" - -"isows@1.0.3": - "version" "1.0.3" - -"js-yaml@^4.1.0": - "version" "4.1.0" - dependencies: - "argparse" "^2.0.1" - -"json-buffer@3.0.1": - "version" "3.0.1" - -"json-schema-traverse@^0.4.1": - "version" "0.4.1" - -"json-stable-stringify-without-jsonify@^1.0.1": - "version" "1.0.1" - -"keyv@^4.5.3": - "version" "4.5.4" - dependencies: - "json-buffer" "3.0.1" - -"kuler@^2.0.0": - "integrity" "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" - "resolved" "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz" - "version" "2.0.0" - -"levn@^0.4.1": - "version" "0.4.1" - dependencies: - "prelude-ls" "^1.2.1" - "type-check" "~0.4.0" - -"locate-path@^6.0.0": - "version" "6.0.0" - dependencies: - "p-locate" "^5.0.0" - -"lodash.merge@^4.6.2": - "version" "4.6.2" - -"logform@^2.3.2", "logform@^2.4.0": - "integrity" "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==" - "resolved" "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz" - "version" "2.6.0" - dependencies: - "@colors/colors" "1.6.0" - "@types/triple-beam" "^1.3.2" - "fecha" "^4.2.0" - "ms" "^2.1.1" - "safe-stable-stringify" "^2.3.1" - "triple-beam" "^1.3.0" - -"lru-cache@^6.0.0": - "version" "6.0.0" - dependencies: - "yallist" "^4.0.0" - -"make-error@^1.1.1": - "version" "1.3.6" - -"merge2@^1.3.0", "merge2@^1.4.1": - "version" "1.4.1" - -"micromatch@^4.0.4": - "version" "4.0.5" - dependencies: - "braces" "^3.0.2" - "picomatch" "^2.3.1" - -"mime-db@1.52.0": - "version" "1.52.0" - -"mime-types@^2.1.12": - "version" "2.1.35" - dependencies: - "mime-db" "1.52.0" - -"minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@^3.1.2": - "version" "3.1.2" - dependencies: - "brace-expansion" "^1.1.7" - -"ms@^2.1.1", "ms@2.1.2": - "version" "2.1.2" - -"natural-compare@^1.4.0": - "version" "1.4.0" - -"nodemon@^3.0.1": - "version" "3.0.1" - dependencies: - "chokidar" "^3.5.2" - "debug" "^3.2.7" - "ignore-by-default" "^1.0.1" - "minimatch" "^3.1.2" - "pstree.remy" "^1.1.8" - "semver" "^7.5.3" - "simple-update-notifier" "^2.0.0" - "supports-color" "^5.5.0" - "touch" "^3.1.0" - "undefsafe" "^2.0.5" - -"nopt@~1.0.10": - "version" "1.0.10" - dependencies: - "abbrev" "1" - -"normalize-path@^3.0.0", "normalize-path@~3.0.0": - "version" "3.0.0" - -"once@^1.3.0": - "version" "1.4.0" - dependencies: - "wrappy" "1" - -"one-time@^1.0.0": - "integrity" "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==" - "resolved" "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "fn.name" "1.x.x" - -"optionator@^0.9.3": - "version" "0.9.3" - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - "deep-is" "^0.1.3" - "fast-levenshtein" "^2.0.6" - "levn" "^0.4.1" - "prelude-ls" "^1.2.1" - "type-check" "^0.4.0" - -"p-limit@^3.0.2": - "version" "3.1.0" - dependencies: - "yocto-queue" "^0.1.0" - -"p-locate@^5.0.0": - "version" "5.0.0" - dependencies: - "p-limit" "^3.0.2" - -"parent-module@^1.0.0": - "version" "1.0.1" - dependencies: - "callsites" "^3.0.0" - -"path-exists@^4.0.0": - "version" "4.0.0" - -"path-is-absolute@^1.0.0": - "version" "1.0.1" - -"path-key@^3.1.0": - "version" "3.1.1" - -"path-type@^4.0.0": - "version" "4.0.0" - -"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.3.1": - "version" "2.3.1" - -"prelude-ls@^1.2.1": - "version" "1.2.1" - -"prettier@^3.0.3": - "version" "3.0.3" - -"proxy-from-env@^1.1.0": - "version" "1.1.0" - -"pstree.remy@^1.1.8": - "version" "1.1.8" - -"punycode@^2.1.0": - "version" "2.3.0" - -"queue-microtask@^1.2.2": - "version" "1.2.3" - -"readable-stream@^3.4.0", "readable-stream@^3.6.0": - "integrity" "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - "version" "3.6.2" - dependencies: - "inherits" "^2.0.3" - "string_decoder" "^1.1.1" - "util-deprecate" "^1.0.1" - -"readdirp@~3.6.0": - "version" "3.6.0" - dependencies: - "picomatch" "^2.2.1" - -"resolve-from@^4.0.0": - "version" "4.0.0" - -"reusify@^1.0.4": - "version" "1.0.4" - -"rimraf@^3.0.2": - "version" "3.0.2" - dependencies: - "glob" "^7.1.3" - -"run-parallel@^1.1.9": - "version" "1.2.0" - dependencies: - "queue-microtask" "^1.2.2" - -"safe-buffer@~5.2.0": - "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - "version" "5.2.1" - -"safe-stable-stringify@^2.3.1": - "integrity" "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" - "resolved" "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" - "version" "2.4.3" - -"semver@^7.5.3", "semver@^7.5.4": - "version" "7.5.4" - dependencies: - "lru-cache" "^6.0.0" - -"shebang-command@^2.0.0": - "version" "2.0.0" - dependencies: - "shebang-regex" "^3.0.0" - -"shebang-regex@^3.0.0": - "version" "3.0.0" - -"simple-swizzle@^0.2.2": - "integrity" "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==" - "resolved" "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" - "version" "0.2.2" - dependencies: - "is-arrayish" "^0.3.1" - -"simple-update-notifier@^2.0.0": - "version" "2.0.0" - dependencies: - "semver" "^7.5.3" - -"slash@^3.0.0": - "version" "3.0.0" - -"stack-trace@0.0.x": - "integrity" "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==" - "resolved" "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" - "version" "0.0.10" - -"string_decoder@^1.1.1": - "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "safe-buffer" "~5.2.0" - -"strip-ansi@^6.0.1": - "version" "6.0.1" - dependencies: - "ansi-regex" "^5.0.1" - -"strip-json-comments@^3.1.1": - "version" "3.1.1" - -"supports-color@^5.5.0": - "version" "5.5.0" - dependencies: - "has-flag" "^3.0.0" - -"supports-color@^7.1.0": - "version" "7.2.0" - dependencies: - "has-flag" "^4.0.0" - -"text-hex@1.0.x": - "integrity" "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - "resolved" "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz" - "version" "1.0.0" - -"text-table@^0.2.0": - "version" "0.2.0" - -"to-regex-range@^5.0.1": - "version" "5.0.1" - dependencies: - "is-number" "^7.0.0" - -"touch@^3.1.0": - "version" "3.1.0" - dependencies: - "nopt" "~1.0.10" - -"triple-beam@^1.3.0": - "integrity" "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" - "resolved" "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz" - "version" "1.4.1" - -"ts-api-utils@^1.0.1": - "version" "1.0.3" - -"ts-node@^10.9.1": - "version" "10.9.1" - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - "acorn" "^8.4.1" - "acorn-walk" "^8.1.1" - "arg" "^4.1.0" - "create-require" "^1.1.0" - "diff" "^4.0.1" - "make-error" "^1.1.1" - "v8-compile-cache-lib" "^3.0.1" - "yn" "3.1.1" - -"type-check@^0.4.0", "type-check@~0.4.0": - "version" "0.4.0" - dependencies: - "prelude-ls" "^1.2.1" - -"type-fest@^0.20.2": - "version" "0.20.2" - -"typescript@^5.2.2", "typescript@>=2.7", "typescript@>=4.2.0", "typescript@>=5.0.4": - "version" "5.2.2" - -"undefsafe@^2.0.5": - "version" "2.0.5" - -"undici-types@~5.25.1": - "integrity" "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==" - "resolved" "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz" - "version" "5.25.3" - -"uri-js@^4.2.2": - "version" "4.4.1" - dependencies: - "punycode" "^2.1.0" - -"util-deprecate@^1.0.1": - "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - "version" "1.0.2" - -"v8-compile-cache-lib@^3.0.1": - "version" "3.0.1" - -"viem@^1.16.5": - "version" "1.16.5" - dependencies: - "@adraffy/ens-normalize" "1.9.4" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@scure/bip32" "1.3.2" - "@scure/bip39" "1.2.1" - "abitype" "0.9.8" - "isows" "1.0.3" - "ws" "8.13.0" - -"which@^2.0.1": - "version" "2.0.2" - dependencies: - "isexe" "^2.0.0" - -"winston-transport@^4.5.0": - "integrity" "sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==" - "resolved" "https://registry.npmjs.org/winston-transport/-/winston-transport-4.6.0.tgz" - "version" "4.6.0" - dependencies: - "logform" "^2.3.2" - "readable-stream" "^3.6.0" - "triple-beam" "^1.3.0" - -"winston@^3.11.0": - "integrity" "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==" - "resolved" "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz" - "version" "3.11.0" - dependencies: - "@colors/colors" "^1.6.0" - "@dabh/diagnostics" "^2.0.2" - "async" "^3.2.3" - "is-stream" "^2.0.0" - "logform" "^2.4.0" - "one-time" "^1.0.0" - "readable-stream" "^3.4.0" - "safe-stable-stringify" "^2.3.1" - "stack-trace" "0.0.x" - "triple-beam" "^1.3.0" - "winston-transport" "^4.5.0" - -"wrappy@1": - "version" "1.0.2" - -"ws@*", "ws@8.13.0": - "version" "8.13.0" - -"yallist@^4.0.0": - "version" "4.0.0" - -"yn@3.1.1": - "version" "3.1.1" - -"yocto-queue@^0.1.0": - "version" "0.1.0" +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd + languageName: node + linkType: hard + +"@adraffy/ens-normalize@npm:1.9.4": + version: 1.9.4 + resolution: "@adraffy/ens-normalize@npm:1.9.4" + checksum: 7d7fff58ebe2c4961f7e5e61dad123aa6a63fec0df5c84af1fa41079dc05d398599690be4427b3a94d2baa94084544bcfdf2d51cbed7504b9b0583b0960ad550 + languageName: node + linkType: hard + +"@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0": + version: 1.6.0 + resolution: "@colors/colors@npm:1.6.0" + checksum: aa209963e0c3218e80a4a20553ba8c0fbb6fa13140540b4e5f97923790be06801fc90172c1114fc8b7e888b3d012b67298cde6b9e81521361becfaee400c662f + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": 0.3.9 + checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa + languageName: node + linkType: hard + +"@dabh/diagnostics@npm:^2.0.2": + version: 2.0.3 + resolution: "@dabh/diagnostics@npm:2.0.3" + dependencies: + colorspace: 1.1.x + enabled: 2.0.x + kuler: ^2.0.0 + checksum: 4879600c55c8315a0fb85fbb19057bad1adc08f0a080a8cb4e2b63f723c379bfc4283b68123a2b078d367b327dd8df12fcb27464efe791addc0a48b9df6d79a1 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": + version: 4.10.0 + resolution: "@eslint-community/regexpp@npm:4.10.0" + checksum: 2a6e345429ea8382aaaf3a61f865cae16ed44d31ca917910033c02dc00d505d939f10b81e079fa14d43b51499c640138e153b7e40743c4c094d9df97d4e56f7b + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.2": + version: 2.1.2 + resolution: "@eslint/eslintrc@npm:2.1.2" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.6.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: bc742a1e3b361f06fedb4afb6bf32cbd27171292ef7924f61c62f2aed73048367bcc7ac68f98c06d4245cd3fabc43270f844e3c1699936d4734b3ac5398814a7 + languageName: node + linkType: hard + +"@eslint/js@npm:8.52.0": + version: 8.52.0 + resolution: "@eslint/js@npm:8.52.0" + checksum: 490893b8091a66415f4ac98b963d23eb287264ea3bd6af7ec788f0570705cf64fd6ab84b717785980f55e39d08ff5c7fde6d8e4391ccb507169370ce3a6d091a + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.11.13": + version: 0.11.13 + resolution: "@humanwhocodes/config-array@npm:0.11.13" + dependencies: + "@humanwhocodes/object-schema": ^2.0.1 + debug: ^4.1.1 + minimatch: ^3.0.5 + checksum: f8ea57b0d7ed7f2d64cd3944654976829d9da91c04d9c860e18804729a33f7681f78166ef4c761850b8c324d362f7d53f14c5c44907a6b38b32c703ff85e4805 + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^2.0.1": + version: 2.0.1 + resolution: "@humanwhocodes/object-schema@npm:2.0.1" + checksum: 24929487b1ed48795d2f08346a0116cc5ee4634848bce64161fb947109352c562310fd159fc64dda0e8b853307f5794605191a9547f7341158559ca3c8262a45 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.0.3": + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef + languageName: node + linkType: hard + +"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" + dependencies: + "@noble/hashes": 1.3.2 + checksum: bb798d7a66d8e43789e93bc3c2ddff91a1e19fdb79a99b86cd98f1e5eff0ee2024a2672902c2576ef3577b6f282f3b5c778bebd55761ddbb30e36bf275e83dd0 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.2, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.2": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2": + version: 1.1.3 + resolution: "@scure/base@npm:1.1.3" + checksum: 1606ab8a4db898cb3a1ada16c15437c3bce4e25854fadc8eb03ae93cbbbac1ed90655af4b0be3da37e12056fef11c0374499f69b9e658c9e5b7b3e06353c630c + languageName: node + linkType: hard + +"@scure/bip32@npm:1.3.2": + version: 1.3.2 + resolution: "@scure/bip32@npm:1.3.2" + dependencies: + "@noble/curves": ~1.2.0 + "@noble/hashes": ~1.3.2 + "@scure/base": ~1.1.2 + checksum: c5ae84fae43490853693b481531132b89e056d45c945fc8b92b9d032577f753dfd79c5a7bbcbf0a7f035951006ff0311b6cf7a389e26c9ec6335e42b20c53157 + languageName: node + linkType: hard + +"@scure/bip39@npm:1.2.1": + version: 1.2.1 + resolution: "@scure/bip39@npm:1.2.1" + dependencies: + "@noble/hashes": ~1.3.0 + "@scure/base": ~1.1.0 + checksum: c5bd6f1328fdbeae2dcdd891825b1610225310e5e62a4942714db51066866e4f7bef242c7b06a1b9dcc8043a4a13412cf5c5df76d3b10aa9e36b82e9b6e3eeaa + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.9 + resolution: "@tsconfig/node10@npm:1.0.9" + checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.12": + version: 7.0.14 + resolution: "@types/json-schema@npm:7.0.14" + checksum: 4b3dd99616c7c808201c56f6c7f6552eb67b5c0c753ab3fa03a6cb549aae950da537e9558e53fa65fba23d1be624a1e4e8d20c15027efbe41e03ca56f2b04fb0 + languageName: node + linkType: hard + +"@types/node-cron@npm:^3.0.9": + version: 3.0.9 + resolution: "@types/node-cron@npm:3.0.9" + checksum: 8335eb0a453b956cc2da5431269e4732e0063c6cca0763cf779c7c242d0dfe3eea1929951a0b11fb9e7a2eee838836ee8cda79e9d6098b1bee91d5a17dce1e73 + languageName: node + linkType: hard + +"@types/node@npm:^20.8.6": + version: 20.8.6 + resolution: "@types/node@npm:20.8.6" + dependencies: + undici-types: ~5.25.1 + checksum: ccfb7ac482c5a96edeb239893c5c099f5257fcc2ed9ae62fefdfbc782b79e16dbc2af9a85b379665237bf759904b44ca2be68e75d239e0297882aad42f61905c + languageName: node + linkType: hard + +"@types/semver@npm:^7.5.0": + version: 7.5.4 + resolution: "@types/semver@npm:7.5.4" + checksum: 120c0189f6fec5f2d12d0d71ac8a4cfa952dc17fa3d842e8afddb82bba8828a4052f8799c1653e2b47ae1977435f38e8985658fde971905ce5afb8e23ee97ecf + languageName: node + linkType: hard + +"@types/triple-beam@npm:^1.3.2": + version: 1.3.4 + resolution: "@types/triple-beam@npm:1.3.4" + checksum: 869641358164a9b87aec710e046c11a65803b7dc3545f33c3365df9590d1059c70592bb35a7fc4099fa746f112ab5a207881ba9fb570e9b1dea4ffd89761d804 + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^6.7.5": + version: 6.9.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.9.0" + dependencies: + "@eslint-community/regexpp": ^4.5.1 + "@typescript-eslint/scope-manager": 6.9.0 + "@typescript-eslint/type-utils": 6.9.0 + "@typescript-eslint/utils": 6.9.0 + "@typescript-eslint/visitor-keys": 6.9.0 + debug: ^4.3.4 + graphemer: ^1.4.0 + ignore: ^5.2.4 + natural-compare: ^1.4.0 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependencies: + "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 51d7afc18bab711e20147f7163083f05435b6860174169eae56de217ed2cb1b3c08cba01b7d338315c2d8ecb982e83ce8f2ca7d2108c1c7c04faff2001b094d3 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^6.7.5": + version: 6.9.0 + resolution: "@typescript-eslint/parser@npm:6.9.0" + dependencies: + "@typescript-eslint/scope-manager": 6.9.0 + "@typescript-eslint/types": 6.9.0 + "@typescript-eslint/typescript-estree": 6.9.0 + "@typescript-eslint/visitor-keys": 6.9.0 + debug: ^4.3.4 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: d8ff69d236d6495474ab93c67e2785cc94bf9c098f25c33f1c5958a4b2b5af2b70edf1cdd0c23ee3436df454a769e80eb47d2d34df8382a826fcdb79bac4382d + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:6.9.0": + version: 6.9.0 + resolution: "@typescript-eslint/scope-manager@npm:6.9.0" + dependencies: + "@typescript-eslint/types": 6.9.0 + "@typescript-eslint/visitor-keys": 6.9.0 + checksum: b7ddcea11bdb95107659800bdf3b33eae22a4dc5c28dc0f8dc5507aa9affaae0e332b6d8c7d5286a7ec75e7c4abd211eb9fdf9647a9a796689cdcc11f6ab40c6 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:6.9.0": + version: 6.9.0 + resolution: "@typescript-eslint/type-utils@npm:6.9.0" + dependencies: + "@typescript-eslint/typescript-estree": 6.9.0 + "@typescript-eslint/utils": 6.9.0 + debug: ^4.3.4 + ts-api-utils: ^1.0.1 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 279b0000cd2fe7ccfbd2f311736b14c8bb9287081f553c9452c95966650c822e67442ba5a62d7fea3ee2f61ccc0fcb218f21e1ee7ccf3984c52e5942d2bbb065 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:6.9.0": + version: 6.9.0 + resolution: "@typescript-eslint/types@npm:6.9.0" + checksum: e0444afa1f2ebca746c72b3d0bf95982eb1e8b4fb91bcba465c1345c35fa13b36c589bfd91c776b864f223bc50817b2613df5892185c2e34332bf4cc57cc865d + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:6.9.0": + version: 6.9.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.9.0" + dependencies: + "@typescript-eslint/types": 6.9.0 + "@typescript-eslint/visitor-keys": 6.9.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependenciesMeta: + typescript: + optional: true + checksum: 51088c23cca608a6e5c195b0a2d8a17ad00ca47199ba4df0c1013912a80194bff9f5bd4d035d6ab2596788491e9a3e04bbf6cad6494a3b1bbd59fea442750268 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:6.9.0": + version: 6.9.0 + resolution: "@typescript-eslint/utils@npm:6.9.0" + dependencies: + "@eslint-community/eslint-utils": ^4.4.0 + "@types/json-schema": ^7.0.12 + "@types/semver": ^7.5.0 + "@typescript-eslint/scope-manager": 6.9.0 + "@typescript-eslint/types": 6.9.0 + "@typescript-eslint/typescript-estree": 6.9.0 + semver: ^7.5.4 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 973c24d7858f224934958ee58c21ff21dfe54dbb1d0e0c5f889298fadcd7ee2dbfd49cf86ccafab74d428c31de66cd9beee7c39d2b64f9edcc9e941573bac175 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:6.9.0": + version: 6.9.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.9.0" + dependencies: + "@typescript-eslint/types": 6.9.0 + eslint-visitor-keys: ^3.4.1 + checksum: de8e2e363df41e5ae9774a5ebd1c49d29c771ea8b3869917f65a74cd4d14a67417c79916f456ee81ef5b0d947b7b8975385fc6eea3f1812d53a2eaaea832459e + languageName: node + linkType: hard + +"@ungap/structured-clone@npm:^1.2.0": + version: 1.2.0 + resolution: "@ungap/structured-clone@npm:1.2.0" + checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 + languageName: node + linkType: hard + +"abbrev@npm:1, abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 + languageName: node + linkType: hard + +"abitype@npm:0.9.8": + version: 0.9.8 + resolution: "abitype@npm:0.9.8" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: d7d887f29d6821e3f7a400de9620511b80ead3f85c5c87308aaec97965d3493e6687ed816e88722b4f512249bd66dee9e69231b49af0e1db8f69400a62c87cf6 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.1.1": + version: 8.2.0 + resolution: "acorn-walk@npm:8.2.0" + checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 + languageName: node + linkType: hard + +"acorn@npm:^8.4.1, acorn@npm:^8.9.0": + version: 8.10.0 + resolution: "acorn@npm:8.10.0" + bin: + acorn: bin/acorn + checksum: 538ba38af0cc9e5ef983aee196c4b8b4d87c0c94532334fa7e065b2c8a1f85863467bb774231aae91613fcda5e68740c15d97b1967ae3394d20faddddd8af61d + languageName: node + linkType: hard + +"agent-base@npm:6, agent-base@npm:^6.0.2": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1": + version: 4.5.0 + resolution: "agentkeepalive@npm:4.5.0" + dependencies: + humanize-ms: ^1.2.1 + checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^3.0.0": + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" + dependencies: + delegates: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + languageName: node + linkType: hard + +"async@npm:^3.2.3": + version: 3.2.4 + resolution: "async@npm:3.2.4" + checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"axios@npm:^1.5.1": + version: 1.5.1 + resolution: "axios@npm:1.5.1" + dependencies: + follow-redirects: ^1.15.0 + form-data: ^4.0.0 + proxy-from-env: ^1.1.0 + checksum: 4444f06601f4ede154183767863d2b8e472b4a6bfc5253597ed6d21899887e1fd0ee2b3de792ac4f8459fe2e359d2aa07c216e45fd8b9e4e0688a6ebf48a5a8d + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.2, braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + languageName: node + linkType: hard + +"cacache@npm:^17.0.0": + version: 17.1.4 + resolution: "cacache@npm:17.1.4" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^7.7.1 + minipass: ^7.0.3 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: b7751df756656954a51201335addced8f63fc53266fa56392c9f5ae83c8d27debffb4458ac2d168a744a4517ec3f2163af05c20097f93d17bdc2dc8a385e14a6 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"chokidar@npm:^3.5.2": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.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 + dependenciesMeta: + fsevents: + optional: true + checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.3": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:^1.0.0, color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-string@npm:^1.6.0": + version: 1.9.1 + resolution: "color-string@npm:1.9.1" + dependencies: + color-name: ^1.0.0 + simple-swizzle: ^0.2.2 + checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 + languageName: node + linkType: hard + +"color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b + languageName: node + linkType: hard + +"color@npm:^3.1.3": + version: 3.2.1 + resolution: "color@npm:3.2.1" + dependencies: + color-convert: ^1.9.3 + color-string: ^1.6.0 + checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 + languageName: node + linkType: hard + +"colorspace@npm:1.1.x": + version: 1.1.4 + resolution: "colorspace@npm:1.1.4" + dependencies: + color: ^3.1.3 + text-hex: 1.0.x + checksum: bb3934ef3c417e961e6d03d7ca60ea6e175947029bfadfcdb65109b01881a1c0ecf9c2b0b59abcd0ee4a0d7c1eae93beed01b0e65848936472270a0b341ebce8 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: ^2.1.1 + checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd + languageName: node + linkType: hard + +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: ^4.0.0 + checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: ^2.0.2 + checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce + languageName: node + linkType: hard + +"dotenv@npm:^16.3.1": + version: 16.3.1 + resolution: "dotenv@npm:16.3.1" + checksum: 15d75e7279018f4bafd0ee9706593dd14455ddb71b3bcba9c52574460b7ccaf67d5cf8b2c08a5af1a9da6db36c956a04a1192b101ee102a3e0cf8817bbcf3dfd + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"enabled@npm:2.0.x": + version: 2.0.0 + resolution: "enabled@npm:2.0.0" + checksum: 9d256d89f4e8a46ff988c6a79b22fa814b4ffd82826c4fdacd9b42e9b9465709d3b748866d0ab4d442dfc6002d81de7f7b384146ccd1681f6a7f868d2acca063 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^9.0.0": + version: 9.0.0 + resolution: "eslint-config-prettier@npm:9.0.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 362e991b6cb343f79362bada2d97c202e5303e6865888918a7445c555fb75e4c078b01278e90be98aa98ae22f8597d8e93d48314bec6824f540f7efcab3ce451 + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 + languageName: node + linkType: hard + +"eslint@npm:^8.51.0": + version: 8.52.0 + resolution: "eslint@npm:8.52.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.2 + "@eslint/js": 8.52.0 + "@humanwhocodes/config-array": ^0.11.13 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + "@ungap/structured-clone": ^1.2.0 + ajv: ^6.12.4 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 + esquery: ^1.4.2 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + graphemer: ^1.4.0 + ignore: ^5.2.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + is-path-inside: ^3.0.3 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.3 + strip-ansi: ^6.0.1 + text-table: ^0.2.0 + bin: + eslint: bin/eslint.js + checksum: fd22d1e9bd7090e31b00cbc7a3b98f3b76020a4c4641f987ae7d0c8f52e1b88c3b268bdfdabac2e1a93513e5d11339b718ff45cbff48a44c35d7e52feba510ed + languageName: node + linkType: hard + +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 + languageName: node + linkType: hard + +"esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" + dependencies: + estraverse: ^5.1.0 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: ^5.2.0 + checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9": + version: 3.3.1 + resolution: "fast-glob@npm:3.3.1" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.4 + checksum: b6f3add6403e02cf3a798bfbb1183d0f6da2afd368f27456010c0bc1f9640aea308243d4cb2c0ab142f618276e65ecb8be1661d7c62a7b4e5ba774b9ce5432e5 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.15.0 + resolution: "fastq@npm:1.15.0" + dependencies: + reusify: ^1.0.4 + checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a + languageName: node + linkType: hard + +"fecha@npm:^4.2.0": + version: 4.2.3 + resolution: "fecha@npm:4.2.3" + checksum: f94e2fb3acf5a7754165d04549460d3ae6c34830394d20c552197e3e000035d69732d74af04b9bed3283bf29fe2a9ebdcc0085e640b0be3cc3658b9726265e31 + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: ^3.0.4 + checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.1.1 + resolution: "flat-cache@npm:3.1.1" + dependencies: + flatted: ^3.2.9 + keyv: ^4.5.3 + rimraf: ^3.0.2 + checksum: 4958cfe0f46acf84953d4e16676ef5f0d38eab3a92d532a1e8d5f88f11eea8b36d5d598070ff2aeae15f1fde18f8d7d089eefaf9db10b5a587cc1c9072325c7a + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.2.9 + resolution: "flatted@npm:3.2.9" + checksum: f14167fbe26a9d20f6fca8d998e8f1f41df72c8e81f9f2c9d61ed2bea058248f5e1cbd05e7f88c0e5087a6a0b822a1e5e2b446e879f3cfbe0b07ba2d7f80b026 + languageName: node + linkType: hard + +"fn.name@npm:1.x.x": + version: 1.1.0 + resolution: "fn.name@npm:1.1.0" + checksum: e357144f48cfc9a7f52a82bbc6c23df7c8de639fce049cac41d41d62cabb740cdb9f14eddc6485e29c933104455bdd7a69bb14a9012cef9cd4fa252a4d0cf293 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.0": + version: 1.15.3 + resolution: "follow-redirects@npm:1.15.3" + peerDependenciesMeta: + debug: + optional: true + checksum: 584da22ec5420c837bd096559ebfb8fe69d82512d5585004e36a3b4a6ef6d5905780e0c74508c7b72f907d1fa2b7bd339e613859e9c304d0dc96af2027fd0231 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@~2.3.2#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + dependencies: + aproba: ^1.0.3 || ^2.0.0 + color-support: ^1.1.3 + console-control-strings: ^1.1.0 + has-unicode: ^2.0.1 + signal-exit: ^3.0.7 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + wide-align: ^1.1.5 + checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + +"glob@npm:^10.2.2": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.5 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + path-scurry: ^1.10.1 + bin: + glob: dist/esm/bin.mjs + checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.4": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + 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 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"globals@npm:^13.19.0": + version: 13.23.0 + resolution: "globals@npm:13.23.0" + dependencies: + type-fest: ^0.20.2 + checksum: 194c97cf8d1ef6ba59417234c2386549c4103b6e5f24b1ff1952de61a4753e5d2069435ba629de711a6480b1b1d114a98e2ab27f85e966d5a10c319c3bbd3dc3 + languageName: node + linkType: hard + +"globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: ^2.1.0 + dir-glob: ^3.0.1 + fast-glob: ^3.2.9 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^3.0.0 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: ^2.0.0 + checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"ignore-by-default@npm:^1.0.1": + version: 1.0.1 + resolution: "ignore-by-default@npm:1.0.1" + checksum: 441509147b3615e0365e407a3c18e189f78c07af08564176c680be1fabc94b6c789cad1342ad887175d4ecd5225de86f73d376cec8e06b42fd9b429505ffcf8a + languageName: node + linkType: hard + +"ignore@npm:^5.2.0, ignore@npm:^5.2.4": + version: 5.2.4 + resolution: "ignore@npm:5.2.4" + checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:^2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.3.1": + version: 0.3.2 + resolution: "is-arrayish@npm:0.3.2" + checksum: 977e64f54d91c8f169b59afcd80ff19227e9f5c791fa28fa2e5bce355cbaf6c2c356711b734656e80c9dd4a854dd7efcf7894402f1031dfc5de5d620775b4d5f + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: ^2.0.0 + checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isows@npm:1.0.3": + version: 1.0.3 + resolution: "isows@npm:1.0.3" + peerDependencies: + ws: "*" + checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: 3.0.1 + checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 + languageName: node + linkType: hard + +"kuler@npm:^2.0.0": + version: 2.0.0 + resolution: "kuler@npm:2.0.0" + checksum: 9e10b5a1659f9ed8761d38df3c35effabffbd19fc6107324095238e4ef0ff044392cae9ac64a1c2dda26e532426485342226b93806bd97504b174b0dcf04ed81 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 + languageName: node + linkType: hard + +"logform@npm:^2.3.2, logform@npm:^2.4.0": + version: 2.6.0 + resolution: "logform@npm:2.6.0" + dependencies: + "@colors/colors": 1.6.0 + "@types/triple-beam": ^1.3.2 + fecha: ^4.2.0 + ms: ^2.1.1 + safe-stable-stringify: ^2.3.1 + triple-beam: ^1.3.0 + checksum: b9ea74bb75e55379ad0eb3e4d65ae6e8d02bc45b431c218162878bf663997ab9258a73104c2b30e09dd2db288bb83c8bf8748e46689d75f5e7e34cf69378d6df + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.7.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 + languageName: node + linkType: hard + +"lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.0.1 + resolution: "lru-cache@npm:10.0.1" + checksum: 06f8d0e1ceabd76bb6f644a26dbb0b4c471b79c7b514c13c6856113879b3bf369eb7b497dad4ff2b7e2636db202412394865b33c332100876d838ad1372f0181 + languageName: node + linkType: hard + +"make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^11.0.3": + version: 11.1.1 + resolution: "make-fetch-happen@npm:11.1.1" + dependencies: + agentkeepalive: ^4.2.1 + cacache: ^17.0.0 + http-cache-semantics: ^4.1.1 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^7.7.1 + minipass: ^5.0.0 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + socks-proxy-agent: ^7.0.0 + ssri: ^10.0.0 + checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: ^3.0.2 + picomatch: ^2.3.1 + checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: ^3.0.0 + checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"ms@npm:^2.0.0, ms@npm:^2.1.1": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 9.4.0 + resolution: "node-gyp@npm:9.4.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^11.0.3 + nopt: ^6.0.0 + npmlog: ^6.0.0 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^2.0.2 + bin: + node-gyp: bin/node-gyp.js + checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 + languageName: node + linkType: hard + +"nodemon@npm:^3.0.1": + version: 3.0.1 + resolution: "nodemon@npm:3.0.1" + dependencies: + chokidar: ^3.5.2 + debug: ^3.2.7 + ignore-by-default: ^1.0.1 + minimatch: ^3.1.2 + pstree.remy: ^1.1.8 + semver: ^7.5.3 + simple-update-notifier: ^2.0.0 + supports-color: ^5.5.0 + touch: ^3.1.0 + undefsafe: ^2.0.5 + bin: + nodemon: bin/nodemon.js + checksum: 6a5d81855760d6617049eccce10ccf02bddb482dab13ceea5280ae595ec7004eee13e7b934368e3f46c37fe4d970342a8c38c99cae7e93e4d7a3ed1c1ecb6acf + languageName: node + linkType: hard + +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: ^1.0.0 + bin: + nopt: bin/nopt.js + checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac + languageName: node + linkType: hard + +"nopt@npm:~1.0.10": + version: 1.0.10 + resolution: "nopt@npm:1.0.10" + dependencies: + abbrev: 1 + bin: + nopt: ./bin/nopt.js + checksum: f62575aceaa3be43f365bf37a596b89bbac2e796b001b6d2e2a85c2140a4e378ff919e2753ccba959c4fd344776fc88c29b393bc167fa939fb1513f126f4cd45 + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"npmlog@npm:^6.0.0": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: ^3.0.0 + console-control-strings: ^1.1.0 + gauge: ^4.0.3 + set-blocking: ^2.0.0 + checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"one-time@npm:^1.0.0": + version: 1.0.0 + resolution: "one-time@npm:1.0.0" + dependencies: + fn.name: 1.x.x + checksum: fd008d7e992bdec1c67f53a2f9b46381ee12a9b8c309f88b21f0223546003fb47e8ad7c1fd5843751920a8d276c63bd4b45670ef80c61fb3e07dbccc962b5c7d + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.3 + resolution: "optionator@npm:0.9.3" + dependencies: + "@aashutoshrathi/word-wrap": ^1.2.3 + deep-is: ^0.1.3 + fast-levenshtein: ^2.0.6 + levn: ^0.4.1 + prelude-ls: ^1.2.1 + type-check: ^0.4.0 + checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: ^3.0.0 + checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: ^9.1.1 || ^10.0.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a + languageName: node + linkType: hard + +"prettier@npm:^3.0.3": + version: 3.0.3 + resolution: "prettier@npm:3.0.3" + bin: + prettier: bin/prettier.cjs + checksum: e10b9af02b281f6c617362ebd2571b1d7fc9fb8a3bd17e371754428cda992e5e8d8b7a046e8f7d3e2da1dcd21aa001e2e3c797402ebb6111b5cd19609dd228e0 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 + languageName: node + linkType: hard + +"pstree.remy@npm:^1.1.8": + version: 1.1.8 + resolution: "pstree.remy@npm:1.1.8" + checksum: 5cb53698d6bb34dfb278c8a26957964aecfff3e161af5fbf7cee00bbe9d8547c7aced4bd9cb193bce15fb56e9e4220fc02a5bf9c14345ffb13a36b858701ec2d + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.0 + resolution: "punycode@npm:2.3.0" + checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: ^2.2.1 + checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 + languageName: node + linkType: hard + +"reporter@workspace:.": + version: 0.0.0-use.local + resolution: "reporter@workspace:." + dependencies: + "@types/node": ^20.8.6 + "@types/node-cron": ^3.0.9 + "@typescript-eslint/eslint-plugin": ^6.7.5 + "@typescript-eslint/parser": ^6.7.5 + axios: ^1.5.1 + dotenv: ^16.3.1 + eslint: ^8.51.0 + eslint-config-prettier: ^9.0.0 + nodemon: ^3.0.1 + prettier: ^3.0.3 + ts-node: ^10.9.1 + typescript: ^5.2.2 + viem: ^1.16.5 + winston: ^3.11.0 + languageName: unknown + linkType: soft + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safe-stable-stringify@npm:^2.3.1": + version: 2.4.3 + resolution: "safe-stable-stringify@npm:2.4.3" + checksum: 3aeb64449706ee1f5ad2459fc99648b131d48e7a1fbb608d7c628020177512dc9d94108a5cb61bbc953985d313d0afea6566d243237743e02870490afef04b43 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + +"simple-swizzle@npm:^0.2.2": + version: 0.2.2 + resolution: "simple-swizzle@npm:0.2.2" + dependencies: + is-arrayish: ^0.3.1 + checksum: a7f3f2ab5c76c4472d5c578df892e857323e452d9f392e1b5cf74b74db66e6294a1e1b8b390b519fa1b96b5b613f2a37db6cffef52c3f1f8f3c5ea64eb2d54c0 + languageName: node + linkType: hard + +"simple-update-notifier@npm:^2.0.0": + version: 2.0.0 + resolution: "simple-update-notifier@npm:2.0.0" + dependencies: + semver: ^7.5.3 + checksum: 9ba00d38ce6a29682f64a46213834e4eb01634c2f52c813a9a7b8873ca49cdbb703696f3290f3b27dc067de6d9418b0b84bef22c3eb074acf352529b2d6c27fd + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "socks-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^6.0.2 + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 + languageName: node + linkType: hard + +"socks@npm:^2.6.2": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" + dependencies: + minipass: ^7.0.3 + checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 + languageName: node + linkType: hard + +"stack-trace@npm:0.0.x": + version: 0.0.10 + resolution: "stack-trace@npm:0.0.10" + checksum: 473036ad32f8c00e889613153d6454f9be0536d430eb2358ca51cad6b95cea08a3cc33cc0e34de66b0dad221582b08ed2e61ef8e13f4087ab690f388362d6610 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: ~5.2.0 + checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + +"supports-color@npm:^5.5.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.0 + resolution: "tar@npm:6.2.0" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c + languageName: node + linkType: hard + +"text-hex@npm:1.0.x": + version: 1.0.0 + resolution: "text-hex@npm:1.0.0" + checksum: 1138f68adc97bf4381a302a24e2352f04992b7b1316c5003767e9b0d3367ffd0dc73d65001ea02b07cd0ecc2a9d186de0cf02f3c2d880b8a522d4ccb9342244a + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"touch@npm:^3.1.0": + version: 3.1.0 + resolution: "touch@npm:3.1.0" + dependencies: + nopt: ~1.0.10 + bin: + nodetouch: ./bin/nodetouch.js + checksum: e0be589cb5b0e6dbfce6e7e077d4a0d5f0aba558ef769c6d9c33f635e00d73d5be49da6f8631db302ee073919d82b5b7f56da2987feb28765c95a7673af68647 + languageName: node + linkType: hard + +"triple-beam@npm:^1.3.0": + version: 1.4.1 + resolution: "triple-beam@npm:1.4.1" + checksum: 2e881a3e8e076b6f2b85b9ec9dd4a900d3f5016e6d21183ed98e78f9abcc0149e7d54d79a3f432b23afde46b0885bdcdcbff789f39bc75de796316961ec07f61 + languageName: node + linkType: hard + +"ts-api-utils@npm:^1.0.1": + version: 1.0.3 + resolution: "ts-api-utils@npm:1.0.3" + peerDependencies: + typescript: ">=4.2.0" + checksum: 441cc4489d65fd515ae6b0f4eb8690057add6f3b6a63a36073753547fb6ce0c9ea0e0530220a0b282b0eec535f52c4dfc315d35f8a4c9a91c0def0707a714ca6 + languageName: node + linkType: hard + +"ts-node@npm:^10.9.1": + version: 10.9.1 + resolution: "ts-node@npm:10.9.1" + dependencies: + "@cspotcode/source-map-support": ^0.8.0 + "@tsconfig/node10": ^1.0.7 + "@tsconfig/node12": ^1.0.7 + "@tsconfig/node14": ^1.0.0 + "@tsconfig/node16": ^1.0.2 + acorn: ^8.4.1 + acorn-walk: ^8.1.1 + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + v8-compile-cache-lib: ^3.0.1 + yn: 3.1.1 + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: ^1.2.1 + checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 + languageName: node + linkType: hard + +"typescript@npm:^5.2.2": + version: 5.2.2 + resolution: "typescript@npm:5.2.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 7912821dac4d962d315c36800fe387cdc0a6298dba7ec171b350b4a6e988b51d7b8f051317786db1094bd7431d526b648aba7da8236607febb26cf5b871d2d3c + languageName: node + linkType: hard + +"typescript@patch:typescript@^5.2.2#~builtin": + version: 5.2.2 + resolution: "typescript@patch:typescript@npm%3A5.2.2#~builtin::version=5.2.2&hash=7ad353" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 07106822b4305de3f22835cbba949a2b35451cad50888759b6818421290ff95d522b38ef7919e70fb381c5fe9c1c643d7dea22c8b31652a717ddbd57b7f4d554 + languageName: node + linkType: hard + +"undefsafe@npm:^2.0.5": + version: 2.0.5 + resolution: "undefsafe@npm:2.0.5" + checksum: f42ab3b5770fedd4ada175fc1b2eb775b78f609156f7c389106aafd231bfc210813ee49f54483d7191d7b76e483bc7f537b5d92d19ded27156baf57592eb02cc + languageName: node + linkType: hard + +"undici-types@npm:~5.25.1": + version: 5.25.3 + resolution: "undici-types@npm:5.25.3" + checksum: ec9d2cc36520cbd9fbe3b3b6c682a87fe5be214699e1f57d1e3d9a2cb5be422e62735f06e0067dc325fd3dd7404c697e4d479f9147dc8a804e049e29f357f2ff + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 + languageName: node + linkType: hard + +"viem@npm:^1.16.5": + version: 1.17.1 + resolution: "viem@npm:1.17.1" + dependencies: + "@adraffy/ens-normalize": 1.9.4 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@scure/bip32": 1.3.2 + "@scure/bip39": 1.2.1 + abitype: 0.9.8 + isows: 1.0.3 + ws: 8.13.0 + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 040225bbc4714c2ebaaa9593cc1abad3367ed6c6413b9c3b8cc4dd6478ff788abd7d81afd396facdc468f6c8e7a7411c55234f25ea7cc8f0004923535f5f5411 + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: ^1.0.2 || 2 || 3 || 4 + checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 + languageName: node + linkType: hard + +"winston-transport@npm:^4.5.0": + version: 4.6.0 + resolution: "winston-transport@npm:4.6.0" + dependencies: + logform: ^2.3.2 + readable-stream: ^3.6.0 + triple-beam: ^1.3.0 + checksum: 19f06ebdbb57cb14cdd48a23145d418d3bbe538851053303f84f04a8a849bb530b78b1495a175059c1299f92945dc61d5421c4914fee32d9a41bc397d84f26d7 + languageName: node + linkType: hard + +"winston@npm:^3.11.0": + version: 3.11.0 + resolution: "winston@npm:3.11.0" + dependencies: + "@colors/colors": ^1.6.0 + "@dabh/diagnostics": ^2.0.2 + async: ^3.2.3 + is-stream: ^2.0.0 + logform: ^2.4.0 + one-time: ^1.0.0 + readable-stream: ^3.4.0 + safe-stable-stringify: ^2.3.1 + stack-trace: 0.0.x + triple-beam: ^1.3.0 + winston-transport: ^4.5.0 + checksum: ca4454070f7a71b19f53c8c1765c59a013dab220edb49161b2e81917751d3e9edc3382430e4fb050feda04fb8463290ecab7cbc9240ec8d3d3b32a121849bbb0 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"ws@npm:8.13.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard From 5d1cac5d50444958aee01bd2e4d63b0e0c089866 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Thu, 26 Oct 2023 19:06:54 +0200 Subject: [PATCH 21/81] refactor(reporter): rn some vars --- .../reporter/src/controllers/TelepathyReporterController.ts | 6 +++--- packages/reporter/src/index.ts | 2 +- packages/reporter/src/settings/index.ts | 2 +- packages/reporter/src/types/index.ts | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index 9e8b2960..d3166440 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -13,7 +13,7 @@ class TelepathyReporterController extends BaseController { lightClientAddresses: { [chainName: string]: `0x${string}` } private _baseProofUrl: string - private _intervalFetchBlocksMs: number + private _intervalFetchHeadUpdates: number private _intervals: ReturnType | undefined constructor(_configs: TelepathyReporterControllerConfigs) { @@ -21,7 +21,7 @@ class TelepathyReporterController extends BaseController { this.lightClientAddresses = _configs.lightClientAddresses this.blockBuffer = _configs.blockBuffer - this._intervalFetchBlocksMs = _configs.intervalFetchBlocksMs + this._intervalFetchHeadUpdates = _configs.intervalFetchHeadUpdates this._baseProofUrl = _configs.baseProofUrl this.lastProcessedBlock = 0n @@ -31,7 +31,7 @@ class TelepathyReporterController extends BaseController { this.fetchHeadUpdates() this._intervals = setInterval(() => { this.fetchHeadUpdates() - }, this._intervalFetchBlocksMs) + }, this._intervalFetchHeadUpdates) } stop() { diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index b0efa0c7..a1d7d341 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -57,7 +57,7 @@ const main = () => { baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, lightClientAddresses: { [gnosis.name]: settings.contractAddresses.Gnosis.TelepathyLightClient }, blockBuffer: settings.reporterControllers.TelepathyReporterController.blockBuffer, - intervalFetchBlocksMs: settings.reporterControllers.TelepathyReporterController.intervalFetchBlocksMs, + intervalFetchHeadUpdates: settings.reporterControllers.TelepathyReporterController.intervalFetchHeadUpdates, }) const blocksListener = new BlocksListener({ diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 6e71e696..fc0aeeba 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -37,7 +37,7 @@ export const settings = { TelepathyReporterController: { baseProofUrl: process.env.TELEPATHY_PROOF_API_URL as string, blockBuffer: Number(process.env.TELEPATHY_BLOCK_BUFFER), - intervalFetchBlocksMs: Number(process.env.TELEPATHY_TIME_FETCH_BLOCK_MS), + intervalFetchHeadUpdates: Number(process.env.TELEPATHY_INTERVAL_FETCH_HEAD_UPDATES), }, }, } diff --git a/packages/reporter/src/types/index.ts b/packages/reporter/src/types/index.ts index 5110faba..50909db2 100644 --- a/packages/reporter/src/types/index.ts +++ b/packages/reporter/src/types/index.ts @@ -16,7 +16,7 @@ interface TelepathyReporterControllerConfigs extends BaseControllerConfigs { lightClientAddresses: { [chainName: string]: `0x${string}` } baseProofUrl: string blockBuffer: number - intervalFetchBlocksMs: number + intervalFetchHeadUpdates: number } interface AMBReporterControllerConfigs extends BaseControllerConfigs { From c2e7dff27073a4977bd749a9ecc50cc8e0e2752c Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Fri, 27 Oct 2023 06:18:46 +0200 Subject: [PATCH 22/81] chore(reporter): fixes compile erros --- packages/reporter/package.json | 2 +- packages/reporter/tsconfig.json | 16 ++++++++++++---- packages/reporter/yarn.lock | 20 ++++++++++---------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/packages/reporter/package.json b/packages/reporter/package.json index 9cd4848c..b1f02948 100644 --- a/packages/reporter/package.json +++ b/packages/reporter/package.json @@ -19,7 +19,7 @@ "winston": "^3.11.0" }, "devDependencies": { - "@types/node": "^20.8.6", + "@types/node": "^20.8.9", "@types/node-cron": "^3.0.9", "@typescript-eslint/eslint-plugin": "^6.7.5", "@typescript-eslint/parser": "^6.7.5", diff --git a/packages/reporter/tsconfig.json b/packages/reporter/tsconfig.json index acfb993d..1a5a671e 100644 --- a/packages/reporter/tsconfig.json +++ b/packages/reporter/tsconfig.json @@ -6,7 +6,11 @@ "esModuleInterop": true, "experimentalDecorators": true, "forceConsistentCasingInFileNames": true, - "lib": ["es6", "ESNext"], + "lib": [ + "es6", + "ESNext", + "DOM" + ], "module": "commonjs", "moduleResolution": "node", "noImplicitAny": true, @@ -17,6 +21,10 @@ "strict": true, "target": "ESNext" }, - "exclude": ["node_modules"], - "include": ["./src/**/*"] -} + "exclude": [ + "node_modules" + ], + "include": [ + "./src/**/*" + ] +} \ No newline at end of file diff --git a/packages/reporter/yarn.lock b/packages/reporter/yarn.lock index db593311..4d057942 100644 --- a/packages/reporter/yarn.lock +++ b/packages/reporter/yarn.lock @@ -287,12 +287,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^20.8.6": - version: 20.8.6 - resolution: "@types/node@npm:20.8.6" +"@types/node@npm:^20.8.9": + version: 20.8.9 + resolution: "@types/node@npm:20.8.9" dependencies: - undici-types: ~5.25.1 - checksum: ccfb7ac482c5a96edeb239893c5c099f5257fcc2ed9ae62fefdfbc782b79e16dbc2af9a85b379665237bf759904b44ca2be68e75d239e0297882aad42f61905c + undici-types: ~5.26.4 + checksum: 0c05f3502a9507ff27e91dd6fd574fa6f391b3fafedcfe8e0c8d33351fb22d02c0121f854e5b6b3ecb9a8a468407ddf6e7ac0029fb236d4c7e1361ffc758a01f languageName: node linkType: hard @@ -2200,7 +2200,7 @@ __metadata: version: 0.0.0-use.local resolution: "reporter@workspace:." dependencies: - "@types/node": ^20.8.6 + "@types/node": ^20.8.9 "@types/node-cron": ^3.0.9 "@typescript-eslint/eslint-plugin": ^6.7.5 "@typescript-eslint/parser": ^6.7.5 @@ -2615,10 +2615,10 @@ __metadata: languageName: node linkType: hard -"undici-types@npm:~5.25.1": - version: 5.25.3 - resolution: "undici-types@npm:5.25.3" - checksum: ec9d2cc36520cbd9fbe3b3b6c682a87fe5be214699e1f57d1e3d9a2cb5be422e62735f06e0067dc325fd3dd7404c697e4d479f9147dc8a804e049e29f357f2ff +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 languageName: node linkType: hard From 40dca77e138342d361185a9fcfc21fa55ac5022d Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Fri, 27 Oct 2023 06:38:40 +0200 Subject: [PATCH 23/81] chore(reporter): rm package-lock.json --- packages/reporter/package-lock.json | 3638 --------------------------- 1 file changed, 3638 deletions(-) delete mode 100644 packages/reporter/package-lock.json diff --git a/packages/reporter/package-lock.json b/packages/reporter/package-lock.json deleted file mode 100644 index af58acd8..00000000 --- a/packages/reporter/package-lock.json +++ /dev/null @@ -1,3638 +0,0 @@ -{ - "name": "reporter", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "reporter", - "dependencies": { - "axios": "^1.5.1", - "dotenv": "^16.3.1", - "viem": "^1.16.5", - "winston": "^3.11.0" - }, - "devDependencies": { - "@types/node": "^20.8.6", - "@types/node-cron": "^3.0.9", - "@typescript-eslint/eslint-plugin": "^6.7.5", - "@typescript-eslint/parser": "^6.7.5", - "eslint": "^8.51.0", - "eslint-config-prettier": "^9.0.0", - "nodemon": "^3.0.1", - "prettier": "^3.0.3", - "ts-node": "^10.9.1", - "typescript": "^5.2.2" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@adraffy/ens-normalize": { - "version": "1.9.4", - "license": "MIT" - }, - "node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.51.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@noble/curves": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@scure/base": { - "version": "1.1.3", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.2.0", - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39": { - "version": "1.2.1", - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.3.0", - "@scure/base": "~1.1.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.13", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.8.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.6.tgz", - "integrity": "sha512-eWO4K2Ji70QzKUqRy6oyJWUeB7+g2cRagT3T/nxYibYcT4y2BDL8lqolRXjTHmkZCdJfIPaY73KbJAZmcryxTQ==", - "dev": true, - "dependencies": { - "undici-types": "~5.25.1" - } - }, - "node_modules/@types/node-cron": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.9.tgz", - "integrity": "sha512-P10Vf+oagnMbefD31nqjS/dpBM34qzfdpvIgVZwtwsNb0Hg2lDaPFeGcyGUJIqh3zHlDMwYXGeunGgMnswgnPg==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/triple-beam": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.4.tgz", - "integrity": "sha512-HlJjF3wxV4R2VQkFpKe0YqJLilYNgtRtsqqZtby7RkVsSs+i+vbyzjtUwpFEdUCKcrGzCiEJE7F/0mKjh0sunA==" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.7.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/type-utils": "6.7.5", - "@typescript-eslint/utils": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.7.5", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/typescript-estree": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.7.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "6.7.5", - "@typescript-eslint/utils": "6.7.5", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.7.5", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.5", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "6.7.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/typescript-estree": "6.7.5", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.7.5", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/abitype": { - "version": "0.9.8", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wagmi-dev" - } - ], - "license": "MIT", - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3 >=3.19.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/axios": { - "version": "1.5.1", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dotenv": { - "version": "16.3.1", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.51.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.51.0", - "@humanwhocodes/config-array": "^0.11.11", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "9.0.0", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.15.0", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.9", - "dev": true, - "license": "ISC" - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" - }, - "node_modules/follow-redirects": { - "version": "1.15.3", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "13.23.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isows": { - "version": "1.0.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wagmi-dev" - } - ], - "license": "MIT", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/keyv": { - "version": "4.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" - }, - "node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/logform": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", - "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", - "dependencies": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/nodemon": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/nopt": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "dev": true, - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "engines": { - "node": "*" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-color/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/ts-api-utils": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.13.0" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.2.2", - "devOptional": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "5.25.3", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", - "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", - "dev": true - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/viem": { - "version": "1.16.5", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wagmi-dev" - } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "1.9.4", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@scure/bip32": "1.3.2", - "@scure/bip39": "1.2.1", - "abitype": "0.9.8", - "isows": "1.0.3", - "ws": "8.13.0" - }, - "peerDependencies": { - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/winston": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", - "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==", - "dependencies": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.5.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.6.0.tgz", - "integrity": "sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==", - "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.13.0", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "dev": true - }, - "@adraffy/ens-normalize": { - "version": "1.9.4" - }, - "@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==" - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "requires": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.9.1", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.1.2", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - } - }, - "@eslint/js": { - "version": "8.51.0", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.11.11", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "dev": true - }, - "@jridgewell/resolve-uri": { - "version": "3.1.1", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@noble/curves": { - "version": "1.2.0", - "requires": { - "@noble/hashes": "1.3.2" - } - }, - "@noble/hashes": { - "version": "1.3.2" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@scure/base": { - "version": "1.1.3" - }, - "@scure/bip32": { - "version": "1.3.2", - "requires": { - "@noble/curves": "~1.2.0", - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.2" - } - }, - "@scure/bip39": { - "version": "1.2.1", - "requires": { - "@noble/hashes": "~1.3.0", - "@scure/base": "~1.1.0" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.4", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.13", - "dev": true - }, - "@types/node": { - "version": "20.8.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.6.tgz", - "integrity": "sha512-eWO4K2Ji70QzKUqRy6oyJWUeB7+g2cRagT3T/nxYibYcT4y2BDL8lqolRXjTHmkZCdJfIPaY73KbJAZmcryxTQ==", - "dev": true, - "requires": { - "undici-types": "~5.25.1" - } - }, - "@types/node-cron": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.9.tgz", - "integrity": "sha512-P10Vf+oagnMbefD31nqjS/dpBM34qzfdpvIgVZwtwsNb0Hg2lDaPFeGcyGUJIqh3zHlDMwYXGeunGgMnswgnPg==", - "dev": true - }, - "@types/semver": { - "version": "7.5.3", - "dev": true - }, - "@types/triple-beam": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.4.tgz", - "integrity": "sha512-HlJjF3wxV4R2VQkFpKe0YqJLilYNgtRtsqqZtby7RkVsSs+i+vbyzjtUwpFEdUCKcrGzCiEJE7F/0mKjh0sunA==" - }, - "@typescript-eslint/eslint-plugin": { - "version": "6.7.5", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/type-utils": "6.7.5", - "@typescript-eslint/utils": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - } - }, - "@typescript-eslint/parser": { - "version": "6.7.5", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/typescript-estree": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "6.7.5", - "dev": true, - "requires": { - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5" - } - }, - "@typescript-eslint/type-utils": { - "version": "6.7.5", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "6.7.5", - "@typescript-eslint/utils": "6.7.5", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - } - }, - "@typescript-eslint/types": { - "version": "6.7.5", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "6.7.5", - "dev": true, - "requires": { - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - } - }, - "@typescript-eslint/utils": { - "version": "6.7.5", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/typescript-estree": "6.7.5", - "semver": "^7.5.4" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "6.7.5", - "dev": true, - "requires": { - "@typescript-eslint/types": "6.7.5", - "eslint-visitor-keys": "^3.4.1" - } - }, - "abbrev": { - "version": "1.1.1", - "dev": true - }, - "abitype": { - "version": "0.9.8", - "requires": {} - }, - "acorn": { - "version": "8.10.0", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "asynckit": { - "version": "0.4.0" - }, - "axios": { - "version": "1.5.1", - "requires": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "callsites": { - "version": "3.1.0", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chokidar": { - "version": "3.5.3", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.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" - } - }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - } - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4" - }, - "color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "requires": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "combined-stream": { - "version": "1.0.8", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "create-require": { - "version": "1.1.1", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.4", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0" - }, - "diff": { - "version": "4.0.2", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dotenv": { - "version": "16.3.1" - }, - "enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "dev": true - }, - "eslint": { - "version": "8.51.0", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.51.0", - "@humanwhocodes/config-array": "^0.11.11", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - } - } - }, - "eslint-config-prettier": { - "version": "9.0.0", - "dev": true, - "requires": {} - }, - "eslint-scope": { - "version": "7.2.2", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-visitor-keys": { - "version": "3.4.3", - "dev": true - }, - "espree": { - "version": "9.6.1", - "dev": true, - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } - }, - "esquery": { - "version": "1.5.0", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-glob": { - "version": "3.3.1", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" - }, - "file-entry-cache": { - "version": "6.0.1", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.1.1", - "dev": true, - "requires": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.9", - "dev": true - }, - "fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" - }, - "follow-redirects": { - "version": "1.15.3" - }, - "form-data": { - "version": "4.0.0", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true - }, - "glob": { - "version": "7.2.3", - "dev": true, - "requires": { - "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-parent": { - "version": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.23.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "graphemer": { - "version": "1.4.0", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "ignore": { - "version": "5.2.4", - "dev": true - }, - "ignore-by-default": { - "version": "1.0.1", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4" - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "is-binary-path": { - "version": "2.1.0", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "isows": { - "version": "1.0.3", - "requires": {} - }, - "js-yaml": { - "version": "4.1.0", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-buffer": { - "version": "3.0.1", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true - }, - "keyv": { - "version": "4.5.4", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" - }, - "levn": { - "version": "0.4.1", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash.merge": { - "version": "4.6.2", - "dev": true - }, - "logform": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", - "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", - "requires": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0" - }, - "mime-types": { - "version": "2.1.35", - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2" - }, - "natural-compare": { - "version": "1.4.0", - "dev": true - }, - "nodemon": { - "version": "3.0.1", - "dev": true, - "requires": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "dev": true - } - } - }, - "nopt": { - "version": "1.0.10", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "dev": true - }, - "once": { - "version": "1.4.0", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "requires": { - "fn.name": "1.x.x" - } - }, - "optionator": { - "version": "0.9.3", - "dev": true, - "requires": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - } - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "parent-module": { - "version": "1.0.1", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "dev": true - }, - "prettier": { - "version": "3.0.3", - "dev": true - }, - "proxy-from-env": { - "version": "1.1.0" - }, - "pstree.remy": { - "version": "1.1.8", - "dev": true - }, - "punycode": { - "version": "2.3.0", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "resolve-from": { - "version": "4.0.0", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" - }, - "semver": { - "version": "7.5.4", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "requires": { - "is-arrayish": "^0.3.1" - } - }, - "simple-update-notifier": { - "version": "2.0.0", - "dev": true, - "requires": { - "semver": "^7.5.3" - } - }, - "slash": { - "version": "3.0.0", - "dev": true - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "dev": true - } - } - }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "text-table": { - "version": "0.2.0", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "touch": { - "version": "3.1.0", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, - "triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" - }, - "ts-api-utils": { - "version": "1.0.3", - "dev": true, - "requires": {} - }, - "ts-node": { - "version": "10.9.1", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - } - }, - "type-check": { - "version": "0.4.0", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "dev": true - }, - "typescript": { - "version": "5.2.2", - "devOptional": true - }, - "undefsafe": { - "version": "2.0.5", - "dev": true - }, - "undici-types": { - "version": "5.25.3", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", - "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true - }, - "viem": { - "version": "1.16.5", - "requires": { - "@adraffy/ens-normalize": "1.9.4", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@scure/bip32": "1.3.2", - "@scure/bip39": "1.2.1", - "abitype": "0.9.8", - "isows": "1.0.3", - "ws": "8.13.0" - } - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "winston": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", - "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==", - "requires": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.5.0" - } - }, - "winston-transport": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.6.0.tgz", - "integrity": "sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==", - "requires": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - } - }, - "wrappy": { - "version": "1.0.2", - "dev": true - }, - "ws": { - "version": "8.13.0", - "requires": {} - }, - "yallist": { - "version": "4.0.0", - "dev": true - }, - "yn": { - "version": "3.1.1", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "dev": true - } - } -} From bc7b6f642bf51d5c07d34d2483c729948b19ef87 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Fri, 27 Oct 2023 07:01:18 +0200 Subject: [PATCH 24/81] feat(reporter): <- dockerizes it --- packages/reporter/.dockerignore | 7 ++++ packages/reporter/Dockerfile | 13 ++++++++ packages/reporter/README.md | 57 +++++++++++++++++++++++++++++---- 3 files changed, 70 insertions(+), 7 deletions(-) create mode 100644 packages/reporter/.dockerignore create mode 100644 packages/reporter/Dockerfile diff --git a/packages/reporter/.dockerignore b/packages/reporter/.dockerignore new file mode 100644 index 00000000..5f7b077a --- /dev/null +++ b/packages/reporter/.dockerignore @@ -0,0 +1,7 @@ +node_modules +npm - debug.log +Dockerfile + .git + .gitignore + .yarn +logs diff --git a/packages/reporter/Dockerfile b/packages/reporter/Dockerfile new file mode 100644 index 00000000..58daafc7 --- /dev/null +++ b/packages/reporter/Dockerfile @@ -0,0 +1,13 @@ +FROM node:alpine + +WORKDIR /usr/src/app + +COPY package.json yarn.lock .env ./ + +RUN yarn install + +ADD . /usr/src/app + +RUN yarn compile + +CMD ["node", "dist/index.js"] \ No newline at end of file diff --git a/packages/reporter/README.md b/packages/reporter/README.md index 0999ad8d..6bd47687 100644 --- a/packages/reporter/README.md +++ b/packages/reporter/README.md @@ -2,14 +2,17 @@ Script to call Header Reporter contracts of different oracle from source chain to destination chain. -## Run the script +  -1. Configure the correct node version by running `nvm use` -2. Installing packages by running `npm install` -3. Create `.env` file and define the configuration to run. -4. run `ts-node src/index.ts` +--- -## Configuration +  + +## Getting Started + +These instructions will cover the usage information and how to run the code using Docker. + +### Create the .env file Configure the mode you want to run by editing the variable in `.env` @@ -32,7 +35,47 @@ Configure the mode you want to run by editing the variable in `.env` 11. `SOURCE_CHAIN`: source chain `chainId`. 12. `DESTINATION_CHAINS`: destination chain `chainIds` separated by a comma. -## Adding a new controller +### Building the Docker Image + +To build the Docker image, run the following command from the root of the project: + +```sh +docker build -t reporter . +``` + +### Running the reporter + +After building the image, you can run it using the following command: + +```sh +docker run -d -p reporter +``` + +### Viewing Logs + +To view the logs from the running container, use: + +```sh +docker logs -f [CONTAINER_ID or CONTAINER_NAME] +``` + +You can find the `CONTAINER_ID` or `CONTAINER_NAME` using `docker ps`. + +### Stopping the reporter + +To stop the running container: + +```sh +docker stop [CONTAINER_ID or CONTAINER_NAME] +``` + +  + +--- + +  + +## How to add a new controller 1. Add a new file under `/controllers`, create the constructor and `onBlocks` function to call block header reporter contract periodically. From 06b07b1089670dee20b1d795587ceb7399a9d63a Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Fri, 27 Oct 2023 14:04:13 +0800 Subject: [PATCH 25/81] fix: update .env.example --- packages/reporter/.env.example | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index ffad1105..e53d710f 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -19,5 +19,5 @@ TIME_FETCH_BLOCKS_MS=60000 #in ms, frequency to call _fetchBlocks for non-Light BLOCK_BUFFER=10 QUERY_BLOCK_LENGTH=200 -SOURCE_CHAIN=5 -DESTINATION_CHAINS=100 \ No newline at end of file +SOURCE_CHAIN_ID=5 +DESTINATION_CHAIN_IDS=100 \ No newline at end of file From d0a0972853e5aff26f544ee627323e5f85c1aeb2 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Fri, 27 Oct 2023 09:05:56 +0200 Subject: [PATCH 26/81] feat(reporter): handles concurrency for sending a transaction and rn BlocksListener into Coordinator --- packages/reporter/package.json | 1 + packages/reporter/src/BlockListener.ts | 64 ----------- packages/reporter/src/Coordinator.ts | 103 ++++++++++++++++++ .../src/controllers/AMBReporterController.ts | 10 +- .../src/controllers/BaseController.ts | 20 +++- .../controllers/SygmaReporterController.ts | 11 +- .../TelepathyReporterController.ts | 31 ++---- packages/reporter/src/index.ts | 30 +++-- packages/reporter/src/settings/index.ts | 7 +- packages/reporter/src/types/index.ts | 47 -------- packages/reporter/tsconfig.json | 16 +-- packages/reporter/yarn.lock | 17 +++ 12 files changed, 186 insertions(+), 171 deletions(-) delete mode 100644 packages/reporter/src/BlockListener.ts create mode 100644 packages/reporter/src/Coordinator.ts delete mode 100644 packages/reporter/src/types/index.ts diff --git a/packages/reporter/package.json b/packages/reporter/package.json index b1f02948..cb529b7f 100644 --- a/packages/reporter/package.json +++ b/packages/reporter/package.json @@ -13,6 +13,7 @@ }, "packageManager": "yarn@3.2.1", "dependencies": { + "async-mutex": "^0.4.0", "axios": "^1.5.1", "dotenv": "^16.3.1", "viem": "^1.16.5", diff --git a/packages/reporter/src/BlockListener.ts b/packages/reporter/src/BlockListener.ts deleted file mode 100644 index f4332a90..00000000 --- a/packages/reporter/src/BlockListener.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Chain } from "viem" -import winston from "winston" - -import Multiclient from "./MultiClient" - -import { BlockListenerConfigs } from "./types/index" - -class BlocksListener { - controllers: any[] - logger: winston.Logger - intervalFetchBlocksMs: number - multiclient: Multiclient - intervals: ReturnType | undefined - sourceChain: Chain - queryBlockLength: number - blockBuffer: number - - constructor(_configs: BlockListenerConfigs) { - if (_configs.queryBlockLength > 256 - _configs.blockBuffer) { - throw new Error(`Please choose a block length less than ${256 - _configs.blockBuffer}!`) - } - - this.controllers = _configs.controllers - this.intervalFetchBlocksMs = _configs.intervalFetchBlocksMs - this.logger = _configs.logger.child({ service: "BlocksListener" }) - this.multiclient = _configs.multiclient - this.sourceChain = _configs.sourceChain - this.queryBlockLength = _configs.queryBlockLength - this.blockBuffer = _configs.blockBuffer - this.intervalFetchBlocksMs = _configs.intervalFetchBlocksMs - } - - start() { - this.fetchBlocks() - this.intervals = setInterval(() => { - this.fetchBlocks() - }, this.intervalFetchBlocksMs) - } - - stop() { - clearInterval(this.intervals) - } - - async fetchBlocks() { - try { - const client = this.multiclient.getClientByChain(this.sourceChain) - - const currentBlockNumber = await client.getBlockNumber() - const startBlock = currentBlockNumber - BigInt(this.queryBlockLength) - const endBlock = currentBlockNumber - BigInt(this.blockBuffer) - - const blocks = Array.from( - { length: Number(this.queryBlockLength - this.blockBuffer + 1) }, - (_, _index) => startBlock + BigInt(_index), - ) - this.logger.info(`New blocks detected on ${this.sourceChain.name}: [${startBlock},${endBlock}]`) - this.controllers.map((_controller: any) => _controller.onBlocks(blocks)) - } catch (_err) { - this.logger.error(`Error from block listener ${_err}`) - } - } -} - -export default BlocksListener diff --git a/packages/reporter/src/Coordinator.ts b/packages/reporter/src/Coordinator.ts new file mode 100644 index 00000000..72dc9d57 --- /dev/null +++ b/packages/reporter/src/Coordinator.ts @@ -0,0 +1,103 @@ +import { Chain } from "viem" +import winston from "winston" +import { Mutex } from "async-mutex" + +import Multiclient from "./MultiClient" +import BaseController from "./controllers/BaseController" + +interface BlockListenerConfigs { + controllers: any[] + logger: winston.Logger + intervalFetchBlocksMs: number + intervalsUpdateLightClients: { [controllerName: string]: number } + multiclient: Multiclient + sourceChain: Chain + queryBlockLength: number + blockBuffer: number +} + +class Coordinator { + controllers: BaseController[] + logger: winston.Logger + multiclient: Multiclient + intervals: ReturnType[] + sourceChain: Chain + private _queryBlockLength: number + private _blockBuffer: number + private _intervalFetchBlocksMs: number + private _intervalsUpdateLightClients: { [controllerName: string]: number } + private _mutex: Mutex + + constructor(_configs: BlockListenerConfigs) { + if (_configs.queryBlockLength > 256 - _configs.blockBuffer) { + throw new Error(`Please choose a block length less than ${256 - _configs.blockBuffer}!`) + } + + this.controllers = _configs.controllers + this.logger = _configs.logger.child({ service: "Coordinator" }) + this.multiclient = _configs.multiclient + this.sourceChain = _configs.sourceChain + this._queryBlockLength = _configs.queryBlockLength + this._blockBuffer = _configs.blockBuffer + this._intervalFetchBlocksMs = _configs.intervalFetchBlocksMs + this._intervalsUpdateLightClients = _configs.intervalsUpdateLightClients + + this.intervals = [] + this._mutex = new Mutex() + } + + start() { + this.fetchBlocks() + this.intervals.push( + setInterval(() => { + this.fetchBlocks() + }, this._intervalFetchBlocksMs), + ) + + const lgControllers = this.controllers.filter((_controller) => _controller.type === "lightClient") + lgControllers.forEach((_controller) => this.updateLightClientReporterController(_controller)) + + this.intervals.push( + ...lgControllers.map((_controller) => { + return setInterval(() => { + this.updateLightClientReporterController(_controller) + }, this._intervalsUpdateLightClients[_controller.name]) + }), + ) + } + + stop() { + this.intervals.forEach(clearInterval) + } + + async fetchBlocks() { + try { + const client = this.multiclient.getClientByChain(this.sourceChain) + + const currentBlockNumber = await client.getBlockNumber() + const startBlock = currentBlockNumber - BigInt(this._queryBlockLength) + const endBlock = currentBlockNumber - BigInt(this._blockBuffer) + + const blocks = Array.from( + { length: Number(this._queryBlockLength - this._blockBuffer + 1) }, + (_, _index) => startBlock + BigInt(_index), + ) + this.logger.info(`New blocks detected on ${this.sourceChain.name}: [${startBlock},${endBlock}]`) + for (const controller of this.controllers.filter((_controller) => _controller.type === "classic")) { + const release = await this._mutex.acquire() + await controller.onBlocks(blocks) + release() + } + } catch (_err) { + this.logger.error(`Error from block listener ${_err}`) + } + } + + async updateLightClientReporterController(_controller: BaseController) { + const release = await this._mutex.acquire() + await _controller.update() + release() + } +} + +export default Coordinator diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts index 00329307..d861805f 100644 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -1,9 +1,13 @@ import ABI from "../ABIs/AMBReporterContractABI.json" -import { AMBReporterControllerConfigs } from "../types/index" - import BaseController from "./BaseController" +import { BaseControllerConfigs } from "./BaseController" + +interface AMBReporterControllerConfigs extends BaseControllerConfigs { + reportHeadersGas: number +} + class AMBReporterController extends BaseController { private _reportHeadersGas: number @@ -30,7 +34,7 @@ class AMBReporterController extends BaseController { }) const txHash = await client.writeContract(request) - this.logger.info(`tx sent on ${chain.name}: ${txHash}`) + this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) } } catch (_error) { this.logger.error(_error) diff --git a/packages/reporter/src/controllers/BaseController.ts b/packages/reporter/src/controllers/BaseController.ts index a5405a6a..1810032c 100644 --- a/packages/reporter/src/controllers/BaseController.ts +++ b/packages/reporter/src/controllers/BaseController.ts @@ -3,13 +3,24 @@ import winston from "winston" import Multiclient from "../MultiClient" -import { BaseControllerConfigs } from "../types" +export type ControllerType = "classic" | "lightClient" + +export type BaseControllerConfigs = { + type: ControllerType + sourceChain: Chain + destinationChains: Chain[] + reporterAddress?: string + adapterAddresses: { [chainName: string]: `0x${string}` } + logger: winston.Logger + multiClient: Multiclient +} class BaseController { name: string + type: ControllerType sourceChain: Chain destinationChains: Chain[] - reporterAddress?: string + reporterAddress?: `0x${string}` adapterAddresses: { [chainName: string]: `0x${string}` } logger: winston.Logger multiClient: Multiclient @@ -20,10 +31,15 @@ class BaseController { this.reporterAddress = configs.reporterAddress as `0x${string}` this.adapterAddresses = configs.adapterAddresses this.multiClient = configs.multiClient + this.type = configs.type this.name = name this.logger = configs.logger.child({ service: this.name }) } + + onBlocks(_blockNumbers: bigint[]) {} + + update() {} } export default BaseController diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index ec2fe288..be1ba6ec 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -3,7 +3,12 @@ import { parseEther } from "viem" import ABI from "../ABIs/SygmaReporterContractABI.json" import BaseController from "./BaseController" -import { SygmaReporterControllerConfigs } from "../types/index" +import { BaseControllerConfigs } from "./BaseController" + +interface SygmaReporterControllerConfigs extends BaseControllerConfigs { + reportHeadersToDomainMsgValue: string + domainIds: { [chainName: string]: number } +} class SygmaReporterController extends BaseController { private _domainIds: { [chainName: string]: number } @@ -38,8 +43,8 @@ class SygmaReporterController extends BaseController { ], value: parseEther(this._reportHeadersToDomainMsgValue), }) - const txhash = await client.writeContract(request) - this.logger.info(`tx sent on ${chain.name}: ${txhash}`) + const txHash = await client.writeContract(request) + this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) } } catch (_error) { this.logger.error(_error) diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index d3166440..e4384201 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -5,47 +5,35 @@ import LightClientContractABI from "../ABIs/TelepathyContractABI.json" import AdapterContractABI from "../ABIs/TelepathyAdapterABI.json" import BaseController from "./BaseController" -import { TelepathyReporterControllerConfigs } from "../types/index" +import { BaseControllerConfigs } from "./BaseController" + +interface TelepathyReporterControllerConfigs extends BaseControllerConfigs { + lightClientAddresses: { [chainName: string]: `0x${string}` } + baseProofUrl: string +} class TelepathyReporterController extends BaseController { lastProcessedBlock: bigint - blockBuffer: number lightClientAddresses: { [chainName: string]: `0x${string}` } - private _baseProofUrl: string - private _intervalFetchHeadUpdates: number - private _intervals: ReturnType | undefined constructor(_configs: TelepathyReporterControllerConfigs) { super(_configs, "TelepathyReporterController") this.lightClientAddresses = _configs.lightClientAddresses - this.blockBuffer = _configs.blockBuffer - this._intervalFetchHeadUpdates = _configs.intervalFetchHeadUpdates this._baseProofUrl = _configs.baseProofUrl this.lastProcessedBlock = 0n } - start() { - this.fetchHeadUpdates() - this._intervals = setInterval(() => { - this.fetchHeadUpdates() - }, this._intervalFetchHeadUpdates) - } - - stop() { - clearInterval(this._intervals) - } - - async fetchHeadUpdates() { + async update() { try { for (const chain of this.destinationChains) { const client = this.multiClient.getClientByChain(chain) const currentBlockNumber = await client.getBlockNumber() - const fromBlock = this.lastProcessedBlock + 1n - const toBlock = currentBlockNumber - BigInt(this.blockBuffer) + const fromBlock = this.lastProcessedBlock === 0n ? currentBlockNumber : this.lastProcessedBlock + 1n + const toBlock = currentBlockNumber this.logger.info(`getting HeadUpdate events in [${fromBlock},${toBlock}] on ${chain.name} ...`) @@ -58,6 +46,7 @@ class TelepathyReporterController extends BaseController { }) if (logs.length == 0) { + this.logger.info("No HeadUpdate events. Skipping ...") continue } diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index a1d7d341..668918e9 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -1,12 +1,12 @@ import * as chains from "viem/chains" -import { gnosis } from "viem/chains" +import { gnosis, goerli } from "viem/chains" import { Chain } from "viem" import Multiclient from "./MultiClient" import AMBReporterController from "./controllers/AMBReporterController" import SygmaReporterController from "./controllers/SygmaReporterController" import TelepathyReporterController from "./controllers/TelepathyReporterController" -import BlocksListener from "./BlockListener" +import Coordinator from "./Coordinator" import { settings } from "./settings/index" import logger from "./utils/logger" @@ -22,12 +22,13 @@ const main = () => { chains: [sourceChain, ...destinationChains], privateKey: process.env.PRIVATE_KEY as `0x${string}`, rpcUrls: { - goerli: settings.rpcUrls.Gnosis, - gnosis: settings.rpcUrls.Goerli, + [goerli.name]: settings.rpcUrls.Goerli, + [gnosis.name]: settings.rpcUrls.Gnosis, }, }) const ambReporterController = new AMBReporterController({ + type: "classic", sourceChain, destinationChains, logger, @@ -38,6 +39,7 @@ const main = () => { }) const sygmaReporterController = new SygmaReporterController({ + type: "classic", sourceChain, destinationChains, logger, @@ -49,6 +51,7 @@ const main = () => { }) const telepathyReporterController = new TelepathyReporterController({ + type: "lightClient", sourceChain, destinationChains, logger, @@ -56,27 +59,22 @@ const main = () => { adapterAddresses: { [gnosis.name]: settings.contractAddresses.Gnosis.SygmaAdapter }, baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, lightClientAddresses: { [gnosis.name]: settings.contractAddresses.Gnosis.TelepathyLightClient }, - blockBuffer: settings.reporterControllers.TelepathyReporterController.blockBuffer, - intervalFetchHeadUpdates: settings.reporterControllers.TelepathyReporterController.intervalFetchHeadUpdates, }) - const blocksListener = new BlocksListener({ - controllers: [ambReporterController, sygmaReporterController].filter( + const coordinator = new Coordinator({ + controllers: [ambReporterController, sygmaReporterController, telepathyReporterController].filter( (_controller) => controllersEnabled?.includes(_controller.name), ), - intervalFetchBlocksMs: settings.BlockListener.intervalFetchBlocksMs, + intervalFetchBlocksMs: settings.Coordinator.intervalFetchBlocksMs, logger, multiclient: multiClient, sourceChain, - queryBlockLength: settings.BlockListener.queryBlockLength, - blockBuffer: settings.BlockListener.blockBuffer, + queryBlockLength: settings.Coordinator.queryBlockLength, + blockBuffer: settings.Coordinator.blockBuffer, + intervalsUpdateLightClients: settings.Coordinator.intervalsUpdateLightClients, }) - blocksListener.start() - - if (controllersEnabled?.includes(telepathyReporterController.name)) { - telepathyReporterController.start() - } + coordinator.start() } main() diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index fc0aeeba..04837828 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -2,10 +2,13 @@ import "dotenv/config" import { gnosis, mainnet, goerli } from "viem/chains" export const settings = { - BlockListener: { + Coordinator: { blockBuffer: Number(process.env.BLOCK_BUFFER), queryBlockLength: Number(process.env.QUERY_BLOCK_LENGTH), intervalFetchBlocksMs: Number(process.env.TIME_FETCH_BLOCKS_MS), + intervalsUpdateLightClients: { + TelepathyReporterController: Number(process.env.TELEPATHY_INTERVAL_FETCH_HEAD_UPDATES), + }, }, rpcUrls: { [gnosis.name]: process.env.GNOSIS_RPC_URL as string, @@ -36,8 +39,6 @@ export const settings = { }, TelepathyReporterController: { baseProofUrl: process.env.TELEPATHY_PROOF_API_URL as string, - blockBuffer: Number(process.env.TELEPATHY_BLOCK_BUFFER), - intervalFetchHeadUpdates: Number(process.env.TELEPATHY_INTERVAL_FETCH_HEAD_UPDATES), }, }, } diff --git a/packages/reporter/src/types/index.ts b/packages/reporter/src/types/index.ts deleted file mode 100644 index 50909db2..00000000 --- a/packages/reporter/src/types/index.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Chain } from "viem" -import winston = require("winston") - -import Multiclient from "../MultiClient" - -type BaseControllerConfigs = { - sourceChain: Chain - destinationChains: Chain[] - reporterAddress?: string - adapterAddresses: { [chainName: string]: `0x${string}` } - logger: winston.Logger - multiClient: Multiclient -} - -interface TelepathyReporterControllerConfigs extends BaseControllerConfigs { - lightClientAddresses: { [chainName: string]: `0x${string}` } - baseProofUrl: string - blockBuffer: number - intervalFetchHeadUpdates: number -} - -interface AMBReporterControllerConfigs extends BaseControllerConfigs { - reportHeadersGas: number -} - -interface SygmaReporterControllerConfigs extends BaseControllerConfigs { - reportHeadersToDomainMsgValue: string - domainIds: { [chainName: string]: number } -} - -interface BlockListenerConfigs { - controllers: any[] - logger: winston.Logger - intervalFetchBlocksMs: number - multiclient: Multiclient - sourceChain: Chain - queryBlockLength: number - blockBuffer: number -} - -export { - AMBReporterControllerConfigs, - BaseControllerConfigs, - BlockListenerConfigs, - SygmaReporterControllerConfigs, - TelepathyReporterControllerConfigs, -} diff --git a/packages/reporter/tsconfig.json b/packages/reporter/tsconfig.json index 1a5a671e..c5ce31cd 100644 --- a/packages/reporter/tsconfig.json +++ b/packages/reporter/tsconfig.json @@ -6,11 +6,7 @@ "esModuleInterop": true, "experimentalDecorators": true, "forceConsistentCasingInFileNames": true, - "lib": [ - "es6", - "ESNext", - "DOM" - ], + "lib": ["es6", "ESNext", "DOM"], "module": "commonjs", "moduleResolution": "node", "noImplicitAny": true, @@ -21,10 +17,6 @@ "strict": true, "target": "ESNext" }, - "exclude": [ - "node_modules" - ], - "include": [ - "./src/**/*" - ] -} \ No newline at end of file + "exclude": ["node_modules"], + "include": ["./src/**/*"] +} diff --git a/packages/reporter/yarn.lock b/packages/reporter/yarn.lock index 4d057942..fa27ca5b 100644 --- a/packages/reporter/yarn.lock +++ b/packages/reporter/yarn.lock @@ -604,6 +604,15 @@ __metadata: languageName: node linkType: hard +"async-mutex@npm:^0.4.0": + version: 0.4.0 + resolution: "async-mutex@npm:0.4.0" + dependencies: + tslib: ^2.4.0 + checksum: 813a71728b35a4fbfd64dba719f04726d9133c67b577fcd951b7028c4a675a13ee34e69beb82d621f87bf81f5d4f135c4c44be0448550c7db728547244ef71fc + languageName: node + linkType: hard + "async@npm:^3.2.3": version: 3.2.4 resolution: "async@npm:3.2.4" @@ -2204,6 +2213,7 @@ __metadata: "@types/node-cron": ^3.0.9 "@typescript-eslint/eslint-plugin": ^6.7.5 "@typescript-eslint/parser": ^6.7.5 + async-mutex: ^0.4.0 axios: ^1.5.1 dotenv: ^16.3.1 eslint: ^8.51.0 @@ -2572,6 +2582,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.4.0": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" From baecfdce29827917eeb54c27a288e0debff15e8e Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Mon, 30 Oct 2023 15:09:10 +0800 Subject: [PATCH 27/81] fix: update .env.example --- packages/reporter/.env.example | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index e53d710f..66a8d86f 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -12,6 +12,7 @@ SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE=0.0001 TELEPATHY_PROOF_API_URL=https://api.telepathy.xyz/api/hashi/ TELEPATHY_BLOCK_BUFFER=10 TELEPATHY_TIME_FETCH_BLOCK_MS=200000 +TELEPATHY_INTERVAL_FETCH_HEAD_UPDATES=10000 TIME_FETCH_BLOCKS_MS=60000 #in ms, frequency to call _fetchBlocks for non-Light Client based controllers From 2ba2c56f5b101d3a1d1aa8d3ca815c2282a9c6b6 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Mon, 30 Oct 2023 16:19:21 +0800 Subject: [PATCH 28/81] fix: TelepathyReporterCntroller logic --- .../reporter/src/controllers/TelepathyReporterController.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index e4384201..d555dccf 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -34,7 +34,6 @@ class TelepathyReporterController extends BaseController { const currentBlockNumber = await client.getBlockNumber() const fromBlock = this.lastProcessedBlock === 0n ? currentBlockNumber : this.lastProcessedBlock + 1n const toBlock = currentBlockNumber - this.logger.info(`getting HeadUpdate events in [${fromBlock},${toBlock}] on ${chain.name} ...`) const logs = await client.getContractEvents({ @@ -47,10 +46,11 @@ class TelepathyReporterController extends BaseController { if (logs.length == 0) { this.logger.info("No HeadUpdate events. Skipping ...") + this.lastProcessedBlock = toBlock continue } - this.logger.error(`detected ${logs.length} HeadUpdate events. Processing them ...`) + this.logger.info(`detected ${logs.length} HeadUpdate events. Processing them ...`) logs.forEach(async (_log: any) => { const slotValue = _log.topics[1] this.logger.info(`fetching proof for slot ${slotValue} on ${chain.name} ...`) From 742c4c80f2c5f4349b943aced7305419f494cd60 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Fri, 10 Nov 2023 17:57:05 +0100 Subject: [PATCH 29/81] feat(reporter): adds more settings and limit AMBReporterController to just send 1 block in order to spend less in gas --- packages/reporter/.env.example | 37 +++++++++++++------ packages/reporter/README.md | 21 +---------- .../src/controllers/AMBReporterController.ts | 10 ++--- packages/reporter/src/index.ts | 27 ++++++++++++-- packages/reporter/src/settings/index.ts | 37 +++++++++++++++++-- 5 files changed, 87 insertions(+), 45 deletions(-) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index 66a8d86f..15f947e6 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -1,24 +1,39 @@ PRIVATE_KEY= -REPORTERS_ENABLED=AMBReporterController,TelepathyReporterController,SygmaReporterController +REPORTERS_ENABLED2=AMBReporterController,TelepathyReporterController,SygmaReporterController +REPORTERS_ENABLED=AMBReporterController,SygmaReporterController,TelepathyReporterController +GNOSIS_RPC_URL=https://rpc.ankr.com/gnosis +MAINNET_RPC_URL= GOERLI_RPC_URL= -GNOSIS_RPC_URL=https://rpc.gnosischain.com +POLYGON_RPC_URL= +OPTIMISM_RPC_URL=https://optimism.llamarpc.com +ARBITRUM_RPC_URL=https://arbitrum.llamarpc.com - -AMB_REPORTER_HEADERS_GAS=30000 +AMB_REPORTER_HEADERS_GAS=300000 SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE=0.0001 -TELEPATHY_PROOF_API_URL=https://api.telepathy.xyz/api/hashi/ +TELEPATHY_PROOF_API_URL= TELEPATHY_BLOCK_BUFFER=10 -TELEPATHY_TIME_FETCH_BLOCK_MS=200000 -TELEPATHY_INTERVAL_FETCH_HEAD_UPDATES=10000 - -TIME_FETCH_BLOCKS_MS=60000 #in ms, frequency to call _fetchBlocks for non-Light Client based controllers +TELEPATHY_INTERVAL_FETCH_HEAD_UPDATES=30000 -## Block Listener Configs for non-Light CLient based controllers +TIME_FETCH_BLOCKS_MS=3600000 BLOCK_BUFFER=10 QUERY_BLOCK_LENGTH=200 SOURCE_CHAIN_ID=5 -DESTINATION_CHAIN_IDS=100 \ No newline at end of file +DESTINATION_CHAIN_IDS=100 + +AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 +SYMGA_ADAPTER=0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15 +GNOSIS_TELEPATHY_ADAPTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 +MAINNET_AMB_REPORTER=0x6be796cb66CdB3566b8AbebA2C516CbDF93fE831 +MAINNET_HEADER_REPORTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a +POLYGON_TELEPATHY_ADAPTER=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 +POLYGON_AXELAR_ADAPTER=0x4694E10017Ed7E0E87bfE386e5f051a7C64286A2 +BSC_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 +BSC_AXELAR_ADAPTER=0x856dcc80f75a9737D9D498266E1Af013668316Fb +OPTIMISM_TELEPATHY_ADAPTER=0x856dcc80f75a9737D9D498266E1Af013668316Fb +OPTIMISM_AXELAR_ADAPTER=0x6E9ce437c46e7fA4F0888c21AAC0d9099Ad133ea +ARBITRUM_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 +ARBITRUM_AXELAR_ADAPTER=0x6E9ce437c46e7fA4F0888c21AAC0d9099Ad133ea \ No newline at end of file diff --git a/packages/reporter/README.md b/packages/reporter/README.md index 6bd47687..9cb4ab9a 100644 --- a/packages/reporter/README.md +++ b/packages/reporter/README.md @@ -14,26 +14,7 @@ These instructions will cover the usage information and how to run the code usin ### Create the .env file -Configure the mode you want to run by editing the variable in `.env` - -1. `REPORTERS_ENABLED` (name of reporter,separated by ',', with no space between): to enable the controller, i.e. - amb,sygma -2. `AMB_REPORTER_HEADERS_GAS` (number): gas used in AMB reporter to pass block header. -3. `SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE` (number): amount of ethers sent when bridging block header from sygma, - similar to reportHeadersGas fee, i.e. 0.001 (ethers). -4. `TIME_FETCH_BLOCKS_MS` (number): block reporter restart period (in ms), i.e. 60000 (ms). -5. `BLOCK_BUFFER` (number): the amount of blocks from source chain away from the latest block, in case the node provider - is not sync up with the latest block, i.e. 10 (blocks). -6. `QUERY_BLOCK_LENGTH` (number): the amount of block headers from source chain to send to destination chain, should be - less than 256 due to the limitation of Solidity - [blockhash()](https://docs.soliditylang.org/en/v0.8.21/units-and-global-variables.html#block-and-transaction-properties). -7. `TELEPATHY_PROOF_API_URL` (string): url of telepathy proof api -8. `TELEPATHY_QUERY_BLOCK_LENGTH` (number): block range to query on `HeadUpdate` event, i.e. 1000 (blocks) -9. `TELEPATHY_BLOCK_BUFFER` (number): amount of blocks away from the latest block in destination chain, in case the node - provider is not sync up with the latest block, i.e. 10 (blocks). -10. `TELEPATHY_TIME_FETCH_BLOCK_MS`: interval time for which the controller looks for new `HeadUpdate` events. -11. `SOURCE_CHAIN`: source chain `chainId`. -12. `DESTINATION_CHAINS`: destination chain `chainIds` separated by a comma. +Configure the mode you want to run by editing the variable in `.env` by checking `.env.example` ### Building the Docker Image diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts index d861805f..5d025fa0 100644 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -21,16 +21,14 @@ class AMBReporterController extends BaseController { const client = this.multiClient.getClientByChain(this.sourceChain) for (const chain of this.destinationChains) { - this.logger.info( - `reporting block headers of blocks [${_blockNumbers[0]},${_blockNumbers[_blockNumbers.length - 1]}] on ${ - chain.name - } ...`, - ) + const blockNumber = _blockNumbers[_blockNumbers.length - 1] + + this.logger.info(`reporting block header for block ${blockNumber} on ${chain.name} ...`) const { request } = await client.simulateContract({ address: this.reporterAddress as `0x${string}`, abi: ABI, functionName: "reportHeaders", - args: [_blockNumbers, this.adapterAddresses[chain.name], this._reportHeadersGas], + args: [[blockNumber], this.adapterAddresses[chain.name], this._reportHeadersGas], }) const txHash = await client.writeContract(request) diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 668918e9..d6d314a1 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -1,5 +1,5 @@ import * as chains from "viem/chains" -import { gnosis, goerli } from "viem/chains" +import { gnosis, mainnet, goerli, polygon, optimism, bsc, arbitrum } from "viem/chains" import { Chain } from "viem" import Multiclient from "./MultiClient" @@ -24,6 +24,11 @@ const main = () => { rpcUrls: { [goerli.name]: settings.rpcUrls.Goerli, [gnosis.name]: settings.rpcUrls.Gnosis, + [mainnet.name]: settings.rpcUrls.Ethereum, + [arbitrum.name]: settings.rpcUrls["Arbitrum One"], + [optimism.name]: settings.rpcUrls["OP Mainnet"], + [bsc.name]: settings.rpcUrls["BNB Smart Chain"], + [polygon.name]: settings.rpcUrls.Polygon, }, }) @@ -34,7 +39,9 @@ const main = () => { logger, multiClient, reporterAddress: settings.contractAddresses.Goerli.AMBReporter, - adapterAddresses: { [gnosis.name]: settings.contractAddresses.Gnosis.AMBAdapter }, + adapterAddresses: { + [gnosis.name]: settings.contractAddresses.Gnosis.AMBAdapter, + }, reportHeadersGas: settings.reporterControllers.AMBReporterController.reportHeadersGas, }) @@ -56,9 +63,21 @@ const main = () => { destinationChains, logger, multiClient, - adapterAddresses: { [gnosis.name]: settings.contractAddresses.Gnosis.SygmaAdapter }, + adapterAddresses: { + [gnosis.name]: settings.contractAddresses.Gnosis.TelepathyAdapter, + [arbitrum.name]: settings.contractAddresses["Arbitrum One"].TelepathyAdapter, + [optimism.name]: settings.contractAddresses["OP Mainnet"].TelepathyAdapter, + [bsc.name]: settings.contractAddresses["BNB Smart Chain"].TelepathyAdapter, + [polygon.name]: settings.contractAddresses.Polygon.TelepathyAdapter, + }, baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, - lightClientAddresses: { [gnosis.name]: settings.contractAddresses.Gnosis.TelepathyLightClient }, + lightClientAddresses: { + [gnosis.name]: settings.contractAddresses.Gnosis.TelepathyLightClient, + [arbitrum.name]: settings.contractAddresses["Arbitrum One"].TelepathyLightClient, + [optimism.name]: settings.contractAddresses["OP Mainnet"].TelepathyLightClient, + [bsc.name]: settings.contractAddresses["BNB Smart Chain"].TelepathyLightClient, + [polygon.name]: settings.contractAddresses.Polygon.TelepathyLightClient, + }, }) const coordinator = new Coordinator({ diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 04837828..7c52d8aa 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -1,5 +1,5 @@ import "dotenv/config" -import { gnosis, mainnet, goerli } from "viem/chains" +import { gnosis, mainnet, goerli, polygon, optimism, bsc, arbitrum } from "viem/chains" export const settings = { Coordinator: { @@ -13,18 +13,47 @@ export const settings = { rpcUrls: { [gnosis.name]: process.env.GNOSIS_RPC_URL as string, [goerli.name]: process.env.GOERLI_RPC_URL as string, + [mainnet.name]: process.env.MAINNET_RPC_URL as string, + [polygon.name]: process.env.POLYGON_RPC_URL as string, + [optimism.name]: process.env.OPTIMISM_RPC_URL as string, + [bsc.name]: process.env.BSC_RPC_URL as string, + [arbitrum.name]: process.env.ARBITRUM_RPC_URL as string, }, contractAddresses: { + [mainnet.name]: { + AMBReporter: process.env.MAINNET_AMB_REPORTER as `0x${string}`, + AxelarReporter: process.env.MAINNET_HEADER_REPORTER as `0x${string}`, + }, [gnosis.name]: { - AMBAdapter: "0x01268DB05965CeAc2a89566c42CD550ED7eE5ECD" as `0x${string}`, - SygmaAdapter: "0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15" as `0x${string}`, - TelapathyAdapter: "0x2f1E51a2763FB67fe09971Fd8d849716137A3357" as `0x${string}`, + AMBAdapter: process.env.GNOSIS_AMB_ADAPTER as `0x${string}`, + SygmaAdapter: process.env.GNOSIS_SYGMA_ADAPTER as `0x${string}`, + TelepathyAdapter: process.env.GNOSIS_TELEPATHY_ADAPTER as `0x${string}`, TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, }, [goerli.name]: { AMBReporter: "0xedc0b1d3de4496e0d917af42f29cb71eb2982319" as `0x${string}`, SygmaReporter: "0x2f96d347c932ac73b56e9352ecc0707e25173d88" as `0x${string}`, }, + [polygon.name]: { + TelepathyAdapter: process.env.POLYGON_TELEPATHY_ADAPTER as `0x${string}`, + TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, + AxelarAdapter: process.env.POLYGON_AXELAR_ADAPTER as `0x${string}`, + }, + [bsc.name]: { + TelepathyAdapter: process.env.BSC_TELEPATHY_ADAPTER as `0x${string}`, + TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, + AxelarAdapter: process.env.BSC_AXELAR_ADAPTER as `0x${string}`, + }, + [optimism.name]: { + TelepathyAdapter: process.env.OPTIMISM_TELEPATHY_ADAPTER as `0x${string}`, + TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, + AxelarAdapter: process.env.OPTIMISM_AXELAR_ADAPTER as `0x${string}`, + }, + [arbitrum.name]: { + TelepathyAdapter: process.env.ARBITRUM_TELEPATHY_ADAPTER as `0x${string}`, + TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, + AxelarAdapter: process.env.ARBITRUM_AXELAR_ADAPTER as `0x${string}`, + }, }, reporterControllers: { AMBReporterController: { From 86d0ac90ad4956304bdd6e22c143433b1dd199ce Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Tue, 14 Nov 2023 19:52:32 +0800 Subject: [PATCH 30/81] fix: wrong transaction nonce error for Telepathy --- .../src/controllers/AMBReporterController.ts | 6 ++++- .../TelepathyReporterController.ts | 23 ++++++++++++++----- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts index 5d025fa0..8a0bf3b2 100644 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -23,7 +23,11 @@ class AMBReporterController extends BaseController { for (const chain of this.destinationChains) { const blockNumber = _blockNumbers[_blockNumbers.length - 1] - this.logger.info(`reporting block header for block ${blockNumber} on ${chain.name} ...`) + this.logger.info( + `reporting block header for block from ${_blockNumbers[0]} to ${_blockNumbers[_blockNumbers.length - 1]} on ${ + chain.name + } ...`, + ) const { request } = await client.simulateContract({ address: this.reporterAddress as `0x${string}`, abi: ABI, diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index d555dccf..ac3612a0 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -1,5 +1,6 @@ import axios from "axios" import { hexToNumber } from "viem" +import { Mutex } from "async-mutex" import LightClientContractABI from "../ABIs/TelepathyContractABI.json" import AdapterContractABI from "../ABIs/TelepathyAdapterABI.json" @@ -23,21 +24,26 @@ class TelepathyReporterController extends BaseController { this.lightClientAddresses = _configs.lightClientAddresses this._baseProofUrl = _configs.baseProofUrl - this.lastProcessedBlock = 0n + this.lastProcessedBlock = 30946038n } async update() { try { + let mutex = new Mutex() for (const chain of this.destinationChains) { const client = this.multiClient.getClientByChain(chain) const currentBlockNumber = await client.getBlockNumber() const fromBlock = this.lastProcessedBlock === 0n ? currentBlockNumber : this.lastProcessedBlock + 1n const toBlock = currentBlockNumber - this.logger.info(`getting HeadUpdate events in [${fromBlock},${toBlock}] on ${chain.name} ...`) + this.logger.info( + `getting HeadUpdate events in [${fromBlock},${toBlock}] on ${chain.name} , on contract ${ + this.lightClientAddresses[chain.name] + }...`, + ) const logs = await client.getContractEvents({ - address: this.lightClientAddresses[chain.name.toLocaleLowerCase()] as `0x${string}`, + address: this.lightClientAddresses[chain.name] as `0x${string}`, abi: LightClientContractABI, eventName: "HeadUpdate", fromBlock, @@ -57,17 +63,22 @@ class TelepathyReporterController extends BaseController { const response = await axios.post(`${this._baseProofUrl}${this.sourceChain.id}/${hexToNumber(slotValue!)}`) const { chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof } = response.data.result - this.logger.info(`calling storeBlockHeader for block number ${blockNumber} ...`) + this.logger.info( + `calling storeBlockHeader for block number ${blockNumber} on contract ${ + this.adapterAddresses[chain.name] + } ...`, + ) const { request } = await client.simulateContract({ - address: this.adapterAddresses[chain.name.toLocaleLowerCase()] as `0x${string}`, + address: this.adapterAddresses[chain.name] as `0x${string}`, abi: AdapterContractABI, functionName: "storeBlockHeader", args: [chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof], }) - + const release = await mutex.acquire() const txHash = await client.writeContract(request) this.logger.info(`tx sent on ${chain.name}: ${txHash}`) + release() }) this.lastProcessedBlock = toBlock } From acfb23285118dd0bc4dcaa1d726bdb6d18bfb8ba Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Fri, 24 Nov 2023 06:05:14 +0100 Subject: [PATCH 31/81] feat(reporter): adds WormholeReporterController --- packages/reporter/.env.example | 14 +- packages/reporter/src/ABIs/WormholeABI.json | 9 + .../reporter/src/ABIs/WormholeAdapterABI.json | 347 ++++++++++++++++++ .../src/ABIs/WormhomeHeaderReporterABI.json | 63 ++++ .../controllers/WormholeReporterController.ts | 97 +++++ packages/reporter/src/index.ts | 31 +- packages/reporter/src/settings/index.ts | 17 +- packages/reporter/src/utils/sleep.ts | 8 + 8 files changed, 578 insertions(+), 8 deletions(-) create mode 100644 packages/reporter/src/ABIs/WormholeABI.json create mode 100644 packages/reporter/src/ABIs/WormholeAdapterABI.json create mode 100644 packages/reporter/src/ABIs/WormhomeHeaderReporterABI.json create mode 100644 packages/reporter/src/controllers/WormholeReporterController.ts create mode 100644 packages/reporter/src/utils/sleep.ts diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index 15f947e6..f6317d52 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -1,7 +1,6 @@ PRIVATE_KEY= -REPORTERS_ENABLED2=AMBReporterController,TelepathyReporterController,SygmaReporterController -REPORTERS_ENABLED=AMBReporterController,SygmaReporterController,TelepathyReporterController +REPORTERS_ENABLED=AMBReporterController,SygmaReporterController,TelepathyReporterController,WormholeReporterController GNOSIS_RPC_URL=https://rpc.ankr.com/gnosis MAINNET_RPC_URL= @@ -17,6 +16,8 @@ TELEPATHY_PROOF_API_URL= TELEPATHY_BLOCK_BUFFER=10 TELEPATHY_INTERVAL_FETCH_HEAD_UPDATES=30000 +WORMHOLE_SCAN_BASE_URL=https://api.wormholescan.io + TIME_FETCH_BLOCKS_MS=3600000 BLOCK_BUFFER=10 QUERY_BLOCK_LENGTH=200 @@ -36,4 +37,11 @@ BSC_AXELAR_ADAPTER=0x856dcc80f75a9737D9D498266E1Af013668316Fb OPTIMISM_TELEPATHY_ADAPTER=0x856dcc80f75a9737D9D498266E1Af013668316Fb OPTIMISM_AXELAR_ADAPTER=0x6E9ce437c46e7fA4F0888c21AAC0d9099Ad133ea ARBITRUM_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 -ARBITRUM_AXELAR_ADAPTER=0x6E9ce437c46e7fA4F0888c21AAC0d9099Ad133ea \ No newline at end of file +ARBITRUM_AXELAR_ADAPTER=0x6E9ce437c46e7fA4F0888c21AAC0d9099Ad133ea +GNOSIS_WORMHOLE_ADAPTER=0x8EA3F385be8FCB98eB4dBfad2D00846860Bf648D +POLYGON_WORMHOLE_ADAPTER=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 +BSC_WORMHOLE_ADAPTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a +OPTIMISM_WORMHOLE_ADAPTER=0x1fF52708D610b1D17F0830f036e992677CDc508A +AVALANCHE_WORMHOLE_ADAPTER=0x6E9ce437c46e7fA4F0888c21AAC0d9099Ad133ea +MAINNET_WORMHOLE_HEADER_REPORTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 +MAINNET_WORMHOLE_ADDRESS=0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B \ No newline at end of file diff --git a/packages/reporter/src/ABIs/WormholeABI.json b/packages/reporter/src/ABIs/WormholeABI.json new file mode 100644 index 00000000..d1b59b6a --- /dev/null +++ b/packages/reporter/src/ABIs/WormholeABI.json @@ -0,0 +1,9 @@ +[ + { + "inputs": [{ "internalType": "address", "name": "emitter", "type": "address" }], + "name": "nextSequence", + "outputs": [{ "internalType": "uint64", "name": "", "type": "uint64" }], + "stateMutability": "view", + "type": "function" + } +] diff --git a/packages/reporter/src/ABIs/WormholeAdapterABI.json b/packages/reporter/src/ABIs/WormholeAdapterABI.json new file mode 100644 index 00000000..636a5b1c --- /dev/null +++ b/packages/reporter/src/ABIs/WormholeAdapterABI.json @@ -0,0 +1,347 @@ +[ + { + "inputs": [ + { + "internalType": "contract IWormhole", + "name": "wormhole_", + "type": "address" + }, + { + "internalType": "address", + "name": "reporter_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sourceChainId_", + "type": "uint256" + }, + { + "internalType": "uint16", + "name": "wormholeSourceChainId_", + "type": "uint16" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "reportedBlockHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "storedBlockHash", + "type": "bytes32" + } + ], + "name": "ConflictingBlockHeader", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "InvalidBlockHeaderLength", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBlockHeaderRLP", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "emitter", + "type": "address" + }, + { + "internalType": "uint16", + "name": "chainId", + "type": "uint16" + } + ], + "name": "InvalidEmitterChainId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "emitter", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8" + }, + { + "internalType": "uint32", + "name": "timestamp", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "nonce", + "type": "uint32" + }, + { + "internalType": "uint16", + "name": "emitterChainId", + "type": "uint16" + }, + { + "internalType": "bytes32", + "name": "emitterAddress", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "sequence", + "type": "uint64" + }, + { + "internalType": "uint8", + "name": "consistencyLevel", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "payload", + "type": "bytes" + }, + { + "internalType": "uint32", + "name": "guardianSetIndex", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "guardianIndex", + "type": "uint8" + } + ], + "internalType": "struct Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "internalType": "struct VM", + "name": "vm", + "type": "tuple" + }, + { + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "name": "InvalidMessage", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "emitter", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "reporter", + "type": "bytes32" + } + ], + "name": "InvalidReporter", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "hashes", + "type": "bytes32" + } + ], + "name": "HashStored", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "domain", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getHashFromOracle", + "outputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "hashes", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "blockHeaders", + "type": "bytes[]" + } + ], + "name": "proveAncestralBlockHashes", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "reporter", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "sourceChainId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "encodedVM", + "type": "bytes" + } + ], + "name": "storeHashesByEncodedVM", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "wormhole", + "outputs": [ + { + "internalType": "contract IWormhole", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "wormholeSourceChainId", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/packages/reporter/src/ABIs/WormhomeHeaderReporterABI.json b/packages/reporter/src/ABIs/WormhomeHeaderReporterABI.json new file mode 100644 index 00000000..0e80a16f --- /dev/null +++ b/packages/reporter/src/ABIs/WormhomeHeaderReporterABI.json @@ -0,0 +1,63 @@ +[ + { + "inputs": [ + { + "internalType": "contract IWormhole", + "name": "wormhole_", + "type": "address" + }, + { + "internalType": "contract IHeaderStorage", + "name": "headerStorage_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "headerStorage", + "outputs": [ + { + "internalType": "contract IHeaderStorage", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + } + ], + "name": "reportHeaders", + "outputs": [ + { + "internalType": "uint64", + "name": "sequence", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "wormhole", + "outputs": [ + { + "internalType": "contract IWormhole", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/packages/reporter/src/controllers/WormholeReporterController.ts b/packages/reporter/src/controllers/WormholeReporterController.ts new file mode 100644 index 00000000..ccd3f261 --- /dev/null +++ b/packages/reporter/src/controllers/WormholeReporterController.ts @@ -0,0 +1,97 @@ +import axios, { AxiosInstance } from "axios" +import HeaderReporterABI from "../ABIs/WormhomeHeaderReporterABI.json" +import AdapterABI from "../ABIs/WormholeAdapterABI.json" +import WormholeABI from "../ABIs/WormholeABI.json" +import { Mutex } from "async-mutex" + +import BaseController from "./BaseController" +import sleep from "../utils/sleep" + +import { BaseControllerConfigs } from "./BaseController" + +interface WormholeReporterControllerConfigs extends BaseControllerConfigs { + wormholeScanBaseUrl: string + wormholeAddress: `0x${string}` + wormholeChainIds: { [chainName: string]: number } +} + +class WormholeReporterController extends BaseController { + private _wormholeAddress: `0x${string}` + private _wormholeScanClient: AxiosInstance + private _wormholeChainIds: { [chainName: string]: number } + private _mutex: Mutex + + constructor(_configs: WormholeReporterControllerConfigs) { + super(_configs, "WormholeReporterController") + this._wormholeScanClient = axios.create({ baseURL: _configs.wormholeScanBaseUrl }) + this._mutex = new Mutex() + this._wormholeAddress = _configs.wormholeAddress + this._wormholeChainIds = _configs.wormholeChainIds + } + + async onBlocks(_blockNumbers: bigint[]) { + const release = await this._mutex.acquire() + try { + const wormholeChainId = this._wormholeChainIds[this.sourceChain.name] + const client = this.multiClient.getClientByChain(this.sourceChain) + const blockNumber = _blockNumbers[_blockNumbers.length - 1] + + const nextSequence = await client.readContract({ + address: this._wormholeAddress as `0x${string}`, + abi: WormholeABI, + functionName: "nextSequence", + args: [this.reporterAddress], + }) + + this.logger.info(`reporting block header for block ${blockNumber} ...`) + const { request } = await client.simulateContract({ + address: this.reporterAddress as `0x${string}`, + abi: HeaderReporterABI, + functionName: "reportHeaders", + args: [[blockNumber]], + }) + + let txHash = await client.writeContract(request) + this.logger.info(`header reported from ${this.sourceChain.name} to Wormhole Network: ${txHash}`) + + let vaaBytes = null + while (true) { + try { + this.logger.info("Waiting for signed VAA ...") + const { data } = await this._wormholeScanClient.get( + `v1/signed_vaa/${wormholeChainId}/000000000000000000000000${this.reporterAddress?.slice( + wormholeChainId, + )}/${Number(nextSequence)}`, + ) + vaaBytes = "0x" + Buffer.from(data.vaaBytes, "base64").toString("hex") + this.logger.info("Signed VAA available! Proceeding ...") + break + } catch (_err) { + this.logger.info("VAA not available yet ...") + } + await sleep(20000) + } + + for (const chain of this.destinationChains) { + const destinationChainClient = this.multiClient.getClientByChain(chain) + + this.logger.info(`Storing header on ${chain.name} ...`) + const { request } = await destinationChainClient.simulateContract({ + address: this.adapterAddresses[chain.name], + abi: AdapterABI, + functionName: "storeHashesByEncodedVM", + args: [vaaBytes], + }) + + txHash = await destinationChainClient.writeContract(request) + this.logger.info(`Header stored on ${chain.name}: ${txHash}!`) + } + } catch (_error) { + this.logger.error(_error) + } finally { + release() + } + } +} + +export default WormholeReporterController diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index d6d314a1..e4a3c506 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -1,11 +1,12 @@ import * as chains from "viem/chains" -import { gnosis, mainnet, goerli, polygon, optimism, bsc, arbitrum } from "viem/chains" +import { avalanche, gnosis, mainnet, goerli, polygon, optimism, bsc, arbitrum } from "viem/chains" import { Chain } from "viem" import Multiclient from "./MultiClient" import AMBReporterController from "./controllers/AMBReporterController" import SygmaReporterController from "./controllers/SygmaReporterController" import TelepathyReporterController from "./controllers/TelepathyReporterController" +import WormholeReporterController from "./controllers/WormholeReporterController" import Coordinator from "./Coordinator" import { settings } from "./settings/index" import logger from "./utils/logger" @@ -80,10 +81,32 @@ const main = () => { }, }) + const wormholeReporterController = new WormholeReporterController({ + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddress: settings.contractAddresses.Ethereum.WormholeHeaderReporter, + adapterAddresses: { + [gnosis.name]: settings.contractAddresses.Gnosis.WormholeAdapter, + [optimism.name]: settings.contractAddresses["OP Mainnet"].WormholeAdapter, + [bsc.name]: settings.contractAddresses["BNB Smart Chain"].WormholeAdapter, + [polygon.name]: settings.contractAddresses.Polygon.WormholeAdapter, + [avalanche.name]: settings.contractAddresses.Avalanche.WormholeAdapter, + }, + wormholeScanBaseUrl: settings.reporterControllers.WormholeReporterController.wormholeScanBaseUrl, + wormholeAddress: (settings.contractAddresses as any)[sourceChain.name].Wormhole, + wormholeChainIds: settings.reporterControllers.WormholeReporterController.wormholeChainIds, + }) + const coordinator = new Coordinator({ - controllers: [ambReporterController, sygmaReporterController, telepathyReporterController].filter( - (_controller) => controllersEnabled?.includes(_controller.name), - ), + controllers: [ + ambReporterController, + sygmaReporterController, + telepathyReporterController, + wormholeReporterController, + ].filter((_controller) => controllersEnabled?.includes(_controller.name)), intervalFetchBlocksMs: settings.Coordinator.intervalFetchBlocksMs, logger, multiclient: multiClient, diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 7c52d8aa..363ca956 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -1,5 +1,5 @@ import "dotenv/config" -import { gnosis, mainnet, goerli, polygon, optimism, bsc, arbitrum } from "viem/chains" +import { gnosis, mainnet, goerli, polygon, optimism, bsc, arbitrum, avalanche } from "viem/chains" export const settings = { Coordinator: { @@ -23,12 +23,15 @@ export const settings = { [mainnet.name]: { AMBReporter: process.env.MAINNET_AMB_REPORTER as `0x${string}`, AxelarReporter: process.env.MAINNET_HEADER_REPORTER as `0x${string}`, + WormholeHeaderReporter: process.env.MAINNET_WORMHOLE_HEADER_REPORTER as `0x${string}`, + Wormhole: process.env.MAINNET_WORMHOLE_ADDRESS as `0x${string}`, }, [gnosis.name]: { AMBAdapter: process.env.GNOSIS_AMB_ADAPTER as `0x${string}`, SygmaAdapter: process.env.GNOSIS_SYGMA_ADAPTER as `0x${string}`, TelepathyAdapter: process.env.GNOSIS_TELEPATHY_ADAPTER as `0x${string}`, TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, + WormholeAdapter: process.env.GNOSIS_WORMHOLE_ADAPTER as `0x${string}`, }, [goerli.name]: { AMBReporter: "0xedc0b1d3de4496e0d917af42f29cb71eb2982319" as `0x${string}`, @@ -38,22 +41,28 @@ export const settings = { TelepathyAdapter: process.env.POLYGON_TELEPATHY_ADAPTER as `0x${string}`, TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, AxelarAdapter: process.env.POLYGON_AXELAR_ADAPTER as `0x${string}`, + WormholeAdapter: process.env.POLYGON_WORMHOLE_ADAPTER as `0x${string}`, }, [bsc.name]: { TelepathyAdapter: process.env.BSC_TELEPATHY_ADAPTER as `0x${string}`, TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, AxelarAdapter: process.env.BSC_AXELAR_ADAPTER as `0x${string}`, + WormholeAdapter: process.env.BSC_WORMHOLE_ADAPTER as `0x${string}`, }, [optimism.name]: { TelepathyAdapter: process.env.OPTIMISM_TELEPATHY_ADAPTER as `0x${string}`, TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, AxelarAdapter: process.env.OPTIMISM_AXELAR_ADAPTER as `0x${string}`, + WormholeAdapter: process.env.OPTIMISM_WORMHOLE_ADAPTER as `0x${string}`, }, [arbitrum.name]: { TelepathyAdapter: process.env.ARBITRUM_TELEPATHY_ADAPTER as `0x${string}`, TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, AxelarAdapter: process.env.ARBITRUM_AXELAR_ADAPTER as `0x${string}`, }, + [avalanche.name]: { + WormholeAdapter: process.env.AVALANCHE_WORMHOLE_ADAPTER as `0x${string}`, + }, }, reporterControllers: { AMBReporterController: { @@ -69,5 +78,11 @@ export const settings = { TelepathyReporterController: { baseProofUrl: process.env.TELEPATHY_PROOF_API_URL as string, }, + WormholeReporterController: { + wormholeScanBaseUrl: process.env.WORMHOLE_SCAN_BASE_URL as string, + wormholeChainIds: { + [mainnet.name]: 2, + }, + }, }, } diff --git a/packages/reporter/src/utils/sleep.ts b/packages/reporter/src/utils/sleep.ts new file mode 100644 index 00000000..6232eca8 --- /dev/null +++ b/packages/reporter/src/utils/sleep.ts @@ -0,0 +1,8 @@ +const sleep = (_ms: number) => + new Promise((_resolve) => + setTimeout(() => { + _resolve() + }, _ms), + ) + +export default sleep From d08d9c10ef5d5099fa5140c5cc4b0331a20f405c Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Fri, 24 Nov 2023 13:31:17 +0100 Subject: [PATCH 32/81] feat(reporter): adds OptimismReporterController --- packages/reporter/.env.example | 6 ++- ...CrossDomainMessengerHeaderReporterABI.json | 20 ++++++++++ packages/reporter/src/Coordinator.ts | 4 +- .../src/controllers/AMBReporterController.ts | 3 +- .../src/controllers/BaseController.ts | 8 ++-- .../controllers/OptimismReporterController.ts | 37 +++++++++++++++++++ .../controllers/SygmaReporterController.ts | 4 +- .../TelepathyReporterController.ts | 4 +- .../controllers/WormholeReporterController.ts | 9 +++-- packages/reporter/src/index.ts | 14 +++++++ packages/reporter/src/settings/index.ts | 3 ++ 11 files changed, 96 insertions(+), 16 deletions(-) create mode 100644 packages/reporter/src/ABIs/L1CrossDomainMessengerHeaderReporterABI.json create mode 100644 packages/reporter/src/controllers/OptimismReporterController.ts diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index f6317d52..ae91b001 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -1,6 +1,6 @@ PRIVATE_KEY= -REPORTERS_ENABLED=AMBReporterController,SygmaReporterController,TelepathyReporterController,WormholeReporterController +REPORTERS_ENABLED=AMBReporterController,SygmaReporterController,TelepathyReporterController,WormholeReporterController,OptimismReporterController GNOSIS_RPC_URL=https://rpc.ankr.com/gnosis MAINNET_RPC_URL= @@ -44,4 +44,6 @@ BSC_WORMHOLE_ADAPTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a OPTIMISM_WORMHOLE_ADAPTER=0x1fF52708D610b1D17F0830f036e992677CDc508A AVALANCHE_WORMHOLE_ADAPTER=0x6E9ce437c46e7fA4F0888c21AAC0d9099Ad133ea MAINNET_WORMHOLE_HEADER_REPORTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 -MAINNET_WORMHOLE_ADDRESS=0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B \ No newline at end of file +MAINNET_WORMHOLE_ADDRESS=0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B +MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS=0xbA5B3f0643582E75AF252e7631dE62c046970167 +OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS=0xe58E7bF7aCD1396D8F9eAF44DB3D4Fd055DCDb51 \ No newline at end of file diff --git a/packages/reporter/src/ABIs/L1CrossDomainMessengerHeaderReporterABI.json b/packages/reporter/src/ABIs/L1CrossDomainMessengerHeaderReporterABI.json new file mode 100644 index 00000000..f3e794f6 --- /dev/null +++ b/packages/reporter/src/ABIs/L1CrossDomainMessengerHeaderReporterABI.json @@ -0,0 +1,20 @@ +[ + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "adapter", + "type": "address" + } + ], + "name": "reportHeaders", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] diff --git a/packages/reporter/src/Coordinator.ts b/packages/reporter/src/Coordinator.ts index 72dc9d57..65abf2e3 100644 --- a/packages/reporter/src/Coordinator.ts +++ b/packages/reporter/src/Coordinator.ts @@ -83,7 +83,9 @@ class Coordinator { (_, _index) => startBlock + BigInt(_index), ) this.logger.info(`New blocks detected on ${this.sourceChain.name}: [${startBlock},${endBlock}]`) - for (const controller of this.controllers.filter((_controller) => _controller.type === "classic")) { + for (const controller of this.controllers.filter( + (_controller) => _controller.type === "classic" || _controller.type === "native", + )) { const release = await this._mutex.acquire() await controller.onBlocks(blocks) release() diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts index 8a0bf3b2..ef143435 100644 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -1,3 +1,4 @@ +import { Chain } from "viem" import ABI from "../ABIs/AMBReporterContractABI.json" import BaseController from "./BaseController" @@ -20,7 +21,7 @@ class AMBReporterController extends BaseController { try { const client = this.multiClient.getClientByChain(this.sourceChain) - for (const chain of this.destinationChains) { + for (const chain of this.destinationChains as Chain[]) { const blockNumber = _blockNumbers[_blockNumbers.length - 1] this.logger.info( diff --git a/packages/reporter/src/controllers/BaseController.ts b/packages/reporter/src/controllers/BaseController.ts index 1810032c..4aa84866 100644 --- a/packages/reporter/src/controllers/BaseController.ts +++ b/packages/reporter/src/controllers/BaseController.ts @@ -3,13 +3,13 @@ import winston from "winston" import Multiclient from "../MultiClient" -export type ControllerType = "classic" | "lightClient" +export type ControllerType = "classic" | "lightClient" | "native" export type BaseControllerConfigs = { type: ControllerType sourceChain: Chain - destinationChains: Chain[] - reporterAddress?: string + destinationChains?: Chain[] + reporterAddress?: `0x${string}` adapterAddresses: { [chainName: string]: `0x${string}` } logger: winston.Logger multiClient: Multiclient @@ -19,7 +19,7 @@ class BaseController { name: string type: ControllerType sourceChain: Chain - destinationChains: Chain[] + destinationChains?: Chain[] reporterAddress?: `0x${string}` adapterAddresses: { [chainName: string]: `0x${string}` } logger: winston.Logger diff --git a/packages/reporter/src/controllers/OptimismReporterController.ts b/packages/reporter/src/controllers/OptimismReporterController.ts new file mode 100644 index 00000000..64d4cbdb --- /dev/null +++ b/packages/reporter/src/controllers/OptimismReporterController.ts @@ -0,0 +1,37 @@ +import { optimism } from "viem/chains" + +import ABI from "../ABIs/L1CrossDomainMessengerHeaderReporterABI.json" +import BaseController from "./BaseController" + +import { BaseControllerConfigs } from "./BaseController" + +interface OptimismReporterControllerConfigs extends BaseControllerConfigs {} + +class OptimismReporterController extends BaseController { + constructor(_configs: OptimismReporterControllerConfigs) { + super(_configs, "OptimismReporterController") + } + + async onBlocks(_blockNumbers: bigint[]) { + try { + const client = this.multiClient.getClientByChain(this.sourceChain) + const blockNumber = _blockNumbers[_blockNumbers.length - 1] + + this.logger.info(`reporting block header for block ${blockNumber} on ${optimism.name} ...`) + const { request } = await client.simulateContract({ + address: this.reporterAddress as `0x${string}`, + abi: ABI, + functionName: "reportHeaders", + args: [[blockNumber], this.adapterAddresses[optimism.name]], + gas: 300000n, // NOTE: if we don't put the gas here, the tx fails because of out of gas + }) + + const txHash = await client.writeContract(request) + this.logger.info(`headers reporter from ${this.sourceChain.name} to ${optimism.name}: ${txHash}`) + } catch (_error) { + this.logger.error(_error) + } + } +} + +export default OptimismReporterController diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index be1ba6ec..dbfa26db 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -1,4 +1,4 @@ -import { parseEther } from "viem" +import { Chain, parseEther } from "viem" import ABI from "../ABIs/SygmaReporterContractABI.json" import BaseController from "./BaseController" @@ -24,7 +24,7 @@ class SygmaReporterController extends BaseController { try { const client = this.multiClient.getClientByChain(this.sourceChain) - for (const chain of this.destinationChains) { + for (const chain of this.destinationChains as Chain[]) { this.logger.info( `reporting block headers of blocks [${_blockNumbers[0]},${_blockNumbers[_blockNumbers.length - 1]}] on ${ chain.name diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index ac3612a0..5cde600d 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -1,5 +1,5 @@ import axios from "axios" -import { hexToNumber } from "viem" +import { Chain, hexToNumber } from "viem" import { Mutex } from "async-mutex" import LightClientContractABI from "../ABIs/TelepathyContractABI.json" @@ -30,7 +30,7 @@ class TelepathyReporterController extends BaseController { async update() { try { let mutex = new Mutex() - for (const chain of this.destinationChains) { + for (const chain of this.destinationChains as Chain[]) { const client = this.multiClient.getClientByChain(chain) const currentBlockNumber = await client.getBlockNumber() diff --git a/packages/reporter/src/controllers/WormholeReporterController.ts b/packages/reporter/src/controllers/WormholeReporterController.ts index ccd3f261..d320b6a4 100644 --- a/packages/reporter/src/controllers/WormholeReporterController.ts +++ b/packages/reporter/src/controllers/WormholeReporterController.ts @@ -1,11 +1,12 @@ import axios, { AxiosInstance } from "axios" -import HeaderReporterABI from "../ABIs/WormhomeHeaderReporterABI.json" -import AdapterABI from "../ABIs/WormholeAdapterABI.json" -import WormholeABI from "../ABIs/WormholeABI.json" import { Mutex } from "async-mutex" +import { Chain } from "viem" import BaseController from "./BaseController" import sleep from "../utils/sleep" +import HeaderReporterABI from "../ABIs/WormhomeHeaderReporterABI.json" +import AdapterABI from "../ABIs/WormholeAdapterABI.json" +import WormholeABI from "../ABIs/WormholeABI.json" import { BaseControllerConfigs } from "./BaseController" @@ -72,7 +73,7 @@ class WormholeReporterController extends BaseController { await sleep(20000) } - for (const chain of this.destinationChains) { + for (const chain of this.destinationChains as Chain[]) { const destinationChainClient = this.multiClient.getClientByChain(chain) this.logger.info(`Storing header on ${chain.name} ...`) diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index e4a3c506..fdc254eb 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -4,6 +4,7 @@ import { Chain } from "viem" import Multiclient from "./MultiClient" import AMBReporterController from "./controllers/AMBReporterController" +import OptimismReporterController from "./controllers/OptimismReporterController" import SygmaReporterController from "./controllers/SygmaReporterController" import TelepathyReporterController from "./controllers/TelepathyReporterController" import WormholeReporterController from "./controllers/WormholeReporterController" @@ -100,12 +101,25 @@ const main = () => { wormholeChainIds: settings.reporterControllers.WormholeReporterController.wormholeChainIds, }) + // TODO: add check to prevent to always run OptimismReporterController even when destinationChains does not include optimism + const optimismReporterController = new OptimismReporterController({ + type: "native", + sourceChain, + logger, + multiClient, + reporterAddress: settings.contractAddresses.Ethereum.L1CrossDomainMessengerHeaderReporter, + adapterAddresses: { + [optimism.name]: settings.contractAddresses["OP Mainnet"].L2CrossDomainMessengerAdapter, + }, + }) + const coordinator = new Coordinator({ controllers: [ ambReporterController, sygmaReporterController, telepathyReporterController, wormholeReporterController, + optimismReporterController, ].filter((_controller) => controllersEnabled?.includes(_controller.name)), intervalFetchBlocksMs: settings.Coordinator.intervalFetchBlocksMs, logger, diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 363ca956..e2c107d6 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -25,6 +25,8 @@ export const settings = { AxelarReporter: process.env.MAINNET_HEADER_REPORTER as `0x${string}`, WormholeHeaderReporter: process.env.MAINNET_WORMHOLE_HEADER_REPORTER as `0x${string}`, Wormhole: process.env.MAINNET_WORMHOLE_ADDRESS as `0x${string}`, + L1CrossDomainMessengerHeaderReporter: process.env + .MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS as `0x${string}`, }, [gnosis.name]: { AMBAdapter: process.env.GNOSIS_AMB_ADAPTER as `0x${string}`, @@ -54,6 +56,7 @@ export const settings = { TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, AxelarAdapter: process.env.OPTIMISM_AXELAR_ADAPTER as `0x${string}`, WormholeAdapter: process.env.OPTIMISM_WORMHOLE_ADAPTER as `0x${string}`, + L2CrossDomainMessengerAdapter: process.env.OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS as `0x${string}`, }, [arbitrum.name]: { TelepathyAdapter: process.env.ARBITRUM_TELEPATHY_ADAPTER as `0x${string}`, From ae7a3f6fe7eb54af02be9b8a3e169f8d2e2420c7 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Fri, 24 Nov 2023 16:45:11 +0100 Subject: [PATCH 33/81] feat(reporter): adds AxelarReporterController --- packages/reporter/.env.example | 10 ++--- .../src/ABIs/AxelarHeaderReporter.json | 20 +++++++++ .../controllers/AxelarReporterController.ts | 42 +++++++++++++++++++ .../controllers/SygmaReporterController.ts | 2 + .../controllers/WormholeReporterController.ts | 2 + packages/reporter/src/index.ts | 16 ++++++- packages/reporter/src/settings/index.ts | 7 +--- 7 files changed, 87 insertions(+), 12 deletions(-) create mode 100644 packages/reporter/src/ABIs/AxelarHeaderReporter.json create mode 100644 packages/reporter/src/controllers/AxelarReporterController.ts diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index ae91b001..44068632 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -1,6 +1,6 @@ PRIVATE_KEY= -REPORTERS_ENABLED=AMBReporterController,SygmaReporterController,TelepathyReporterController,WormholeReporterController,OptimismReporterController +REPORTERS_ENABLED=AMBReporterController,SygmaReporterController,TelepathyReporterController,WormholeReporterController,OptimismReporterController,AxelarReporterController GNOSIS_RPC_URL=https://rpc.ankr.com/gnosis MAINNET_RPC_URL= @@ -31,13 +31,9 @@ GNOSIS_TELEPATHY_ADAPTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 MAINNET_AMB_REPORTER=0x6be796cb66CdB3566b8AbebA2C516CbDF93fE831 MAINNET_HEADER_REPORTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a POLYGON_TELEPATHY_ADAPTER=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 -POLYGON_AXELAR_ADAPTER=0x4694E10017Ed7E0E87bfE386e5f051a7C64286A2 BSC_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 -BSC_AXELAR_ADAPTER=0x856dcc80f75a9737D9D498266E1Af013668316Fb OPTIMISM_TELEPATHY_ADAPTER=0x856dcc80f75a9737D9D498266E1Af013668316Fb -OPTIMISM_AXELAR_ADAPTER=0x6E9ce437c46e7fA4F0888c21AAC0d9099Ad133ea ARBITRUM_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 -ARBITRUM_AXELAR_ADAPTER=0x6E9ce437c46e7fA4F0888c21AAC0d9099Ad133ea GNOSIS_WORMHOLE_ADAPTER=0x8EA3F385be8FCB98eB4dBfad2D00846860Bf648D POLYGON_WORMHOLE_ADAPTER=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 BSC_WORMHOLE_ADAPTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a @@ -46,4 +42,6 @@ AVALANCHE_WORMHOLE_ADAPTER=0x6E9ce437c46e7fA4F0888c21AAC0d9099Ad133ea MAINNET_WORMHOLE_HEADER_REPORTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 MAINNET_WORMHOLE_ADDRESS=0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS=0xbA5B3f0643582E75AF252e7631dE62c046970167 -OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS=0xe58E7bF7aCD1396D8F9eAF44DB3D4Fd055DCDb51 \ No newline at end of file +OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS=0xe58E7bF7aCD1396D8F9eAF44DB3D4Fd055DCDb51 +MAINNET_AXELAR_HEADER_REPORTER_BSC= +BSC_AXELAR_ADAPTER_MAINNET= \ No newline at end of file diff --git a/packages/reporter/src/ABIs/AxelarHeaderReporter.json b/packages/reporter/src/ABIs/AxelarHeaderReporter.json new file mode 100644 index 00000000..f3e794f6 --- /dev/null +++ b/packages/reporter/src/ABIs/AxelarHeaderReporter.json @@ -0,0 +1,20 @@ +[ + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "adapter", + "type": "address" + } + ], + "name": "reportHeaders", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] diff --git a/packages/reporter/src/controllers/AxelarReporterController.ts b/packages/reporter/src/controllers/AxelarReporterController.ts new file mode 100644 index 00000000..d1cab795 --- /dev/null +++ b/packages/reporter/src/controllers/AxelarReporterController.ts @@ -0,0 +1,42 @@ +import { Chain, formatEther } from "viem" +import ABI from "../ABIs/AxelarHeaderReporter.json" + +import BaseController from "./BaseController" + +import { BaseControllerConfigs } from "./BaseController" + +interface AxelaReporterControllerConfigs extends BaseControllerConfigs {} + +class AxelarReporterController extends BaseController { + constructor(_configs: AxelaReporterControllerConfigs) { + super(_configs, "AxelarReporterController") + } + + async onBlocks(_blockNumbers: bigint[]) { + try { + const client = this.multiClient.getClientByChain(this.sourceChain) + + for (const chain of this.destinationChains as Chain[]) { + if (!this.adapterAddresses[chain.name]) continue + + const blockNumber = _blockNumbers[_blockNumbers.length - 1] + + this.logger.info(`reporting block header for block ${blockNumber} on ${chain.name} ...`) + const { request } = await client.simulateContract({ + address: this.reporterAddress as `0x${string}`, + abi: ABI, + functionName: "reportHeaders", + args: [[blockNumber], this.adapterAddresses[chain.name]], + value: BigInt(0.0001 * 10 ** 18), + }) + + const txHash = await client.writeContract(request) + this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) + } + } catch (_error) { + this.logger.error(_error) + } + } +} + +export default AxelarReporterController diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index dbfa26db..0156fce2 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -25,6 +25,8 @@ class SygmaReporterController extends BaseController { const client = this.multiClient.getClientByChain(this.sourceChain) for (const chain of this.destinationChains as Chain[]) { + if (!this.adapterAddresses[chain.name]) continue + this.logger.info( `reporting block headers of blocks [${_blockNumbers[0]},${_blockNumbers[_blockNumbers.length - 1]}] on ${ chain.name diff --git a/packages/reporter/src/controllers/WormholeReporterController.ts b/packages/reporter/src/controllers/WormholeReporterController.ts index d320b6a4..5f378a55 100644 --- a/packages/reporter/src/controllers/WormholeReporterController.ts +++ b/packages/reporter/src/controllers/WormholeReporterController.ts @@ -74,6 +74,8 @@ class WormholeReporterController extends BaseController { } for (const chain of this.destinationChains as Chain[]) { + if (!this.adapterAddresses[chain.name]) continue + const destinationChainClient = this.multiClient.getClientByChain(chain) this.logger.info(`Storing header on ${chain.name} ...`) diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index fdc254eb..f78a0734 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -4,6 +4,7 @@ import { Chain } from "viem" import Multiclient from "./MultiClient" import AMBReporterController from "./controllers/AMBReporterController" +import AxelarReporterController from "./controllers/AxelarReporterController" import OptimismReporterController from "./controllers/OptimismReporterController" import SygmaReporterController from "./controllers/SygmaReporterController" import TelepathyReporterController from "./controllers/TelepathyReporterController" @@ -37,7 +38,7 @@ const main = () => { const ambReporterController = new AMBReporterController({ type: "classic", sourceChain, - destinationChains, + destinationChains: destinationChains.filter(({ name }) => name === gnosis.name), logger, multiClient, reporterAddress: settings.contractAddresses.Goerli.AMBReporter, @@ -113,6 +114,18 @@ const main = () => { }, }) + const axelarReporterControllerMainnetBsc = new AxelarReporterController({ + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddress: settings.contractAddresses.Ethereum.AxelarReporterBsc, + adapterAddresses: { + [bsc.name]: settings.contractAddresses["BNB Smart Chain"].AxelarAdapterMainnet, + }, + }) + const coordinator = new Coordinator({ controllers: [ ambReporterController, @@ -120,6 +133,7 @@ const main = () => { telepathyReporterController, wormholeReporterController, optimismReporterController, + axelarReporterControllerMainnetBsc, ].filter((_controller) => controllersEnabled?.includes(_controller.name)), intervalFetchBlocksMs: settings.Coordinator.intervalFetchBlocksMs, logger, diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index e2c107d6..433a8679 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -22,7 +22,7 @@ export const settings = { contractAddresses: { [mainnet.name]: { AMBReporter: process.env.MAINNET_AMB_REPORTER as `0x${string}`, - AxelarReporter: process.env.MAINNET_HEADER_REPORTER as `0x${string}`, + AxelarReporterBsc: process.env.MAINNET_AXELAR_HEADER_REPORTER_BSC as `0x${string}`, WormholeHeaderReporter: process.env.MAINNET_WORMHOLE_HEADER_REPORTER as `0x${string}`, Wormhole: process.env.MAINNET_WORMHOLE_ADDRESS as `0x${string}`, L1CrossDomainMessengerHeaderReporter: process.env @@ -42,26 +42,23 @@ export const settings = { [polygon.name]: { TelepathyAdapter: process.env.POLYGON_TELEPATHY_ADAPTER as `0x${string}`, TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, - AxelarAdapter: process.env.POLYGON_AXELAR_ADAPTER as `0x${string}`, WormholeAdapter: process.env.POLYGON_WORMHOLE_ADAPTER as `0x${string}`, }, [bsc.name]: { TelepathyAdapter: process.env.BSC_TELEPATHY_ADAPTER as `0x${string}`, TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, - AxelarAdapter: process.env.BSC_AXELAR_ADAPTER as `0x${string}`, + AxelarAdapterMainnet: process.env.BSC_AXELAR_ADAPTER_MAINNET as `0x${string}`, WormholeAdapter: process.env.BSC_WORMHOLE_ADAPTER as `0x${string}`, }, [optimism.name]: { TelepathyAdapter: process.env.OPTIMISM_TELEPATHY_ADAPTER as `0x${string}`, TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, - AxelarAdapter: process.env.OPTIMISM_AXELAR_ADAPTER as `0x${string}`, WormholeAdapter: process.env.OPTIMISM_WORMHOLE_ADAPTER as `0x${string}`, L2CrossDomainMessengerAdapter: process.env.OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS as `0x${string}`, }, [arbitrum.name]: { TelepathyAdapter: process.env.ARBITRUM_TELEPATHY_ADAPTER as `0x${string}`, TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, - AxelarAdapter: process.env.ARBITRUM_AXELAR_ADAPTER as `0x${string}`, }, [avalanche.name]: { WormholeAdapter: process.env.AVALANCHE_WORMHOLE_ADAPTER as `0x${string}`, From 3e27cfdc5b2f980e607030f520cf9e196fbce57f Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Mon, 27 Nov 2023 08:15:56 +0100 Subject: [PATCH 34/81] refactor(reporter): adds reporterAddresses within BaseController --- packages/reporter/.env.example | 4 +- ...rter.json => AxelarHeaderReporterABI.json} | 0 .../controllers/AxelarReporterController.ts | 8 +- .../src/controllers/BaseController.ts | 5 +- packages/reporter/src/index.ts | 63 ++++++----- packages/reporter/src/settings/index.ts | 100 ++++++++++++------ 6 files changed, 115 insertions(+), 65 deletions(-) rename packages/reporter/src/ABIs/{AxelarHeaderReporter.json => AxelarHeaderReporterABI.json} (100%) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index 44068632..c2a2721f 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -43,5 +43,5 @@ MAINNET_WORMHOLE_HEADER_REPORTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 MAINNET_WORMHOLE_ADDRESS=0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS=0xbA5B3f0643582E75AF252e7631dE62c046970167 OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS=0xe58E7bF7aCD1396D8F9eAF44DB3D4Fd055DCDb51 -MAINNET_AXELAR_HEADER_REPORTER_BSC= -BSC_AXELAR_ADAPTER_MAINNET= \ No newline at end of file +MAINNET_AXELAR_HEADER_REPORTER_BSC=0xBfd877753F8B4f4117a08aD54DcBE69cF3165d81 +BSC_AXELAR_ADAPTER_MAINNET=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 \ No newline at end of file diff --git a/packages/reporter/src/ABIs/AxelarHeaderReporter.json b/packages/reporter/src/ABIs/AxelarHeaderReporterABI.json similarity index 100% rename from packages/reporter/src/ABIs/AxelarHeaderReporter.json rename to packages/reporter/src/ABIs/AxelarHeaderReporterABI.json diff --git a/packages/reporter/src/controllers/AxelarReporterController.ts b/packages/reporter/src/controllers/AxelarReporterController.ts index d1cab795..b5a577be 100644 --- a/packages/reporter/src/controllers/AxelarReporterController.ts +++ b/packages/reporter/src/controllers/AxelarReporterController.ts @@ -1,14 +1,14 @@ import { Chain, formatEther } from "viem" -import ABI from "../ABIs/AxelarHeaderReporter.json" +import ABI from "../ABIs/AxelarHeaderReporterABI.json" import BaseController from "./BaseController" import { BaseControllerConfigs } from "./BaseController" -interface AxelaReporterControllerConfigs extends BaseControllerConfigs {} +interface AxelarReporterControllerConfigs extends BaseControllerConfigs {} class AxelarReporterController extends BaseController { - constructor(_configs: AxelaReporterControllerConfigs) { + constructor(_configs: AxelarReporterControllerConfigs) { super(_configs, "AxelarReporterController") } @@ -23,7 +23,7 @@ class AxelarReporterController extends BaseController { this.logger.info(`reporting block header for block ${blockNumber} on ${chain.name} ...`) const { request } = await client.simulateContract({ - address: this.reporterAddress as `0x${string}`, + address: this.reporterAddresses[chain.name], abi: ABI, functionName: "reportHeaders", args: [[blockNumber], this.adapterAddresses[chain.name]], diff --git a/packages/reporter/src/controllers/BaseController.ts b/packages/reporter/src/controllers/BaseController.ts index 4aa84866..60465898 100644 --- a/packages/reporter/src/controllers/BaseController.ts +++ b/packages/reporter/src/controllers/BaseController.ts @@ -10,6 +10,7 @@ export type BaseControllerConfigs = { sourceChain: Chain destinationChains?: Chain[] reporterAddress?: `0x${string}` + reporterAddresses?: { [chainName: string]: `0x${string}` } adapterAddresses: { [chainName: string]: `0x${string}` } logger: winston.Logger multiClient: Multiclient @@ -21,6 +22,7 @@ class BaseController { sourceChain: Chain destinationChains?: Chain[] reporterAddress?: `0x${string}` + reporterAddresses: { [chainName: string]: `0x${string}` } adapterAddresses: { [chainName: string]: `0x${string}` } logger: winston.Logger multiClient: Multiclient @@ -28,7 +30,8 @@ class BaseController { constructor(configs: BaseControllerConfigs, name: string) { this.sourceChain = configs.sourceChain this.destinationChains = configs.destinationChains - this.reporterAddress = configs.reporterAddress as `0x${string}` + this.reporterAddress = configs.reporterAddress + this.reporterAddresses = configs.reporterAddresses || {} this.adapterAddresses = configs.adapterAddresses this.multiClient = configs.multiClient this.type = configs.type diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index f78a0734..0bf8e1ab 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -6,7 +6,7 @@ import Multiclient from "./MultiClient" import AMBReporterController from "./controllers/AMBReporterController" import AxelarReporterController from "./controllers/AxelarReporterController" import OptimismReporterController from "./controllers/OptimismReporterController" -import SygmaReporterController from "./controllers/SygmaReporterController" +// import SygmaReporterController from "./controllers/SygmaReporterController" import TelepathyReporterController from "./controllers/TelepathyReporterController" import WormholeReporterController from "./controllers/WormholeReporterController" import Coordinator from "./Coordinator" @@ -21,6 +21,9 @@ const main = () => { const sourceChain = Object.values(chains).find((_chain) => _chain.id === sourceChainId) as Chain const destinationChains = Object.values(chains).filter((_chain) => destinationChainIds?.includes(_chain.id)) + const unidirectionalAdaptersAddresses = settings.contractAddresses.adapterAddresses.unidirectional as any + const unidirectionalReportersAddresses = settings.contractAddresses.reporterAddresses.unidirectional as any + const multiClient = new Multiclient({ chains: [sourceChain, ...destinationChains], privateKey: process.env.PRIVATE_KEY as `0x${string}`, @@ -41,14 +44,14 @@ const main = () => { destinationChains: destinationChains.filter(({ name }) => name === gnosis.name), logger, multiClient, - reporterAddress: settings.contractAddresses.Goerli.AMBReporter, + reporterAddress: unidirectionalReportersAddresses[sourceChain.name].Gnosis.AMBReporter, adapterAddresses: { - [gnosis.name]: settings.contractAddresses.Gnosis.AMBAdapter, + [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name].Gnosis.AMBAdapter, }, reportHeadersGas: settings.reporterControllers.AMBReporterController.reportHeadersGas, }) - const sygmaReporterController = new SygmaReporterController({ + /*const sygmaReporterController = new SygmaReporterController({ type: "classic", sourceChain, destinationChains, @@ -58,7 +61,7 @@ const main = () => { adapterAddresses: { [gnosis.name]: settings.contractAddresses.Gnosis.SygmaAdapter }, reportHeadersToDomainMsgValue: settings.reporterControllers.SygmaReporterController.reportHeadersToDomainMsgValue, domainIds: settings.reporterControllers.SygmaReporterController.domainIds, - }) + })*/ const telepathyReporterController = new TelepathyReporterController({ type: "lightClient", @@ -67,19 +70,19 @@ const main = () => { logger, multiClient, adapterAddresses: { - [gnosis.name]: settings.contractAddresses.Gnosis.TelepathyAdapter, - [arbitrum.name]: settings.contractAddresses["Arbitrum One"].TelepathyAdapter, - [optimism.name]: settings.contractAddresses["OP Mainnet"].TelepathyAdapter, - [bsc.name]: settings.contractAddresses["BNB Smart Chain"].TelepathyAdapter, - [polygon.name]: settings.contractAddresses.Polygon.TelepathyAdapter, + [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name].Gnosis.TelepathyAdapter, + [arbitrum.name]: unidirectionalAdaptersAddresses[sourceChain.name]["Arbitrum One"].TelepathyAdapter, + [optimism.name]: unidirectionalAdaptersAddresses[sourceChain.name]["OP Mainnet"].TelepathyAdapter, + [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]["BNB Smart Chain"].TelepathyAdapter, + [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name].Polygon.TelepathyAdapter, }, baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, lightClientAddresses: { - [gnosis.name]: settings.contractAddresses.Gnosis.TelepathyLightClient, - [arbitrum.name]: settings.contractAddresses["Arbitrum One"].TelepathyLightClient, - [optimism.name]: settings.contractAddresses["OP Mainnet"].TelepathyLightClient, - [bsc.name]: settings.contractAddresses["BNB Smart Chain"].TelepathyLightClient, - [polygon.name]: settings.contractAddresses.Polygon.TelepathyLightClient, + [gnosis.name]: settings.contractAddresses.Gnosis.TelepathyLightClientMainnet, + [arbitrum.name]: settings.contractAddresses["Arbitrum One"].TelepathyLightClientMainnet, + [optimism.name]: settings.contractAddresses["OP Mainnet"].TelepathyLightClientMainnet, + [bsc.name]: settings.contractAddresses["BNB Smart Chain"].TelepathyLightClientMainnet, + [polygon.name]: settings.contractAddresses.Polygon.TelepathyLightClientMainnet, }, }) @@ -89,13 +92,13 @@ const main = () => { destinationChains, logger, multiClient, - reporterAddress: settings.contractAddresses.Ethereum.WormholeHeaderReporter, + reporterAddress: (settings.contractAddresses.reporterAddresses as any)[sourceChain.name].WormholeHeaderReporter, adapterAddresses: { - [gnosis.name]: settings.contractAddresses.Gnosis.WormholeAdapter, - [optimism.name]: settings.contractAddresses["OP Mainnet"].WormholeAdapter, - [bsc.name]: settings.contractAddresses["BNB Smart Chain"].WormholeAdapter, - [polygon.name]: settings.contractAddresses.Polygon.WormholeAdapter, - [avalanche.name]: settings.contractAddresses.Avalanche.WormholeAdapter, + [gnosis.name]: (settings.contractAddresses.adapterAddresses as any).Gnosis.WormholeAdapter, + [optimism.name]: (settings.contractAddresses.adapterAddresses as any)["OP Mainnet"].WormholeAdapter, + [bsc.name]: (settings.contractAddresses.adapterAddresses as any)["BNB Smart Chain"].WormholeAdapter, + [polygon.name]: (settings.contractAddresses.adapterAddresses as any).Polygon.WormholeAdapter, + [avalanche.name]: (settings.contractAddresses.adapterAddresses as any).Avalanche.WormholeAdapter, }, wormholeScanBaseUrl: settings.reporterControllers.WormholeReporterController.wormholeScanBaseUrl, wormholeAddress: (settings.contractAddresses as any)[sourceChain.name].Wormhole, @@ -108,32 +111,36 @@ const main = () => { sourceChain, logger, multiClient, - reporterAddress: settings.contractAddresses.Ethereum.L1CrossDomainMessengerHeaderReporter, + reporterAddress: + settings.contractAddresses.reporterAddresses.unidirectional.Ethereum["OP Mainnet"].L1CrossDomainMessengerHeaderReporter, adapterAddresses: { - [optimism.name]: settings.contractAddresses["OP Mainnet"].L2CrossDomainMessengerAdapter, + [optimism.name]: + settings.contractAddresses.adapterAddresses.unidirectional.Ethereum["OP Mainnet"].L2CrossDomainMessengerAdapter, }, }) - const axelarReporterControllerMainnetBsc = new AxelarReporterController({ + const axelarReporterController = new AxelarReporterController({ type: "classic", sourceChain, destinationChains, logger, multiClient, - reporterAddress: settings.contractAddresses.Ethereum.AxelarReporterBsc, + reporterAddresses: { + [bsc.name]: unidirectionalReportersAddresses[sourceChain.name][bsc.name].AxelarReporter, + }, adapterAddresses: { - [bsc.name]: settings.contractAddresses["BNB Smart Chain"].AxelarAdapterMainnet, + [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name][bsc.name].AxelarAdapter, }, }) const coordinator = new Coordinator({ controllers: [ ambReporterController, - sygmaReporterController, + // sygmaReporterController, telepathyReporterController, wormholeReporterController, optimismReporterController, - axelarReporterControllerMainnetBsc, + axelarReporterController, ].filter((_controller) => controllersEnabled?.includes(_controller.name)), intervalFetchBlocksMs: settings.Coordinator.intervalFetchBlocksMs, logger, diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 433a8679..5f71a0d1 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -20,48 +20,88 @@ export const settings = { [arbitrum.name]: process.env.ARBITRUM_RPC_URL as string, }, contractAddresses: { + adapterAddresses: { + unidirectional: { + [mainnet.name]: { + [bsc.name]: { + AxelarAdapter: process.env.BSC_AXELAR_ADAPTER_MAINNET as `0x${string}`, + TelepathyAdapter: process.env.BSC_TELEPATHY_ADAPTER as `0x${string}`, + }, + [gnosis.name]: { + TelepathyAdapter: process.env.GNOSIS_TELEPATHY_ADAPTER as `0x${string}`, + AMBAdapter: process.env.GNOSIS_AMB_ADAPTER as `0x${string}`, + // SygmaAdapter: process.env.GNOSIS_SYGMA_ADAPTER as `0x${string}`, + }, + [polygon.name]: { + TelepathyAdapter: process.env.POLYGON_TELEPATHY_ADAPTER as `0x${string}`, + }, + [optimism.name]: { + TelepathyAdapter: process.env.OPTIMISM_TELEPATHY_ADAPTER as `0x${string}`, + L2CrossDomainMessengerAdapter: process.env + .OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS as `0x${string}`, + }, + [arbitrum.name]: { + TelepathyAdapter: process.env.ARBITRUM_TELEPATHY_ADAPTER as `0x${string}`, + }, + /*[goerli.name]: { + AMBReporter: "0xedc0b1d3de4496e0d917af42f29cb71eb2982319" as `0x${string}`, + SygmaReporter: "0x2f96d347c932ac73b56e9352ecc0707e25173d88" as `0x${string}`, + },*/ + }, + }, + [gnosis.name]: { + WormholeAdapter: process.env.GNOSIS_WORMHOLE_ADAPTER as `0x${string}`, + }, + [polygon.name]: { + WormholeAdapter: process.env.POLYGON_WORMHOLE_ADAPTER as `0x${string}`, + }, + [bsc.name]: { + WormholeAdapter: process.env.BSC_WORMHOLE_ADAPTER as `0x${string}`, + }, + [optimism.name]: { + WormholeAdapter: process.env.OPTIMISM_WORMHOLE_ADAPTER as `0x${string}`, + }, + [avalanche.name]: { + WormholeAdapter: process.env.AVALANCHE_WORMHOLE_ADAPTER as `0x${string}`, + }, + }, + reporterAddresses: { + unidirectional: { + [mainnet.name]: { + [bsc.name]: { + AxelarReporter: process.env.MAINNET_AXELAR_HEADER_REPORTER_BSC as `0x${string}`, + }, + [gnosis.name]: { + AMBReporter: process.env.MAINNET_AMB_REPORTER as `0x${string}`, + }, + [optimism.name]: { + L1CrossDomainMessengerHeaderReporter: process.env + .MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS as `0x${string}`, + }, + }, + }, + + [mainnet.name]: { + WormholeHeaderReporter: process.env.MAINNET_WORMHOLE_HEADER_REPORTER as `0x${string}`, + } + }, [mainnet.name]: { - AMBReporter: process.env.MAINNET_AMB_REPORTER as `0x${string}`, - AxelarReporterBsc: process.env.MAINNET_AXELAR_HEADER_REPORTER_BSC as `0x${string}`, - WormholeHeaderReporter: process.env.MAINNET_WORMHOLE_HEADER_REPORTER as `0x${string}`, Wormhole: process.env.MAINNET_WORMHOLE_ADDRESS as `0x${string}`, - L1CrossDomainMessengerHeaderReporter: process.env - .MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS as `0x${string}`, }, [gnosis.name]: { - AMBAdapter: process.env.GNOSIS_AMB_ADAPTER as `0x${string}`, - SygmaAdapter: process.env.GNOSIS_SYGMA_ADAPTER as `0x${string}`, - TelepathyAdapter: process.env.GNOSIS_TELEPATHY_ADAPTER as `0x${string}`, - TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, - WormholeAdapter: process.env.GNOSIS_WORMHOLE_ADAPTER as `0x${string}`, - }, - [goerli.name]: { - AMBReporter: "0xedc0b1d3de4496e0d917af42f29cb71eb2982319" as `0x${string}`, - SygmaReporter: "0x2f96d347c932ac73b56e9352ecc0707e25173d88" as `0x${string}`, + TelepathyLightClientMainnet: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, }, [polygon.name]: { - TelepathyAdapter: process.env.POLYGON_TELEPATHY_ADAPTER as `0x${string}`, - TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, - WormholeAdapter: process.env.POLYGON_WORMHOLE_ADAPTER as `0x${string}`, + TelepathyLightClientMainnet: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, }, [bsc.name]: { - TelepathyAdapter: process.env.BSC_TELEPATHY_ADAPTER as `0x${string}`, - TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, - AxelarAdapterMainnet: process.env.BSC_AXELAR_ADAPTER_MAINNET as `0x${string}`, - WormholeAdapter: process.env.BSC_WORMHOLE_ADAPTER as `0x${string}`, + TelepathyLightClientMainnet: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, }, [optimism.name]: { - TelepathyAdapter: process.env.OPTIMISM_TELEPATHY_ADAPTER as `0x${string}`, - TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, - WormholeAdapter: process.env.OPTIMISM_WORMHOLE_ADAPTER as `0x${string}`, - L2CrossDomainMessengerAdapter: process.env.OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS as `0x${string}`, + TelepathyLightClientMainnet: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, }, [arbitrum.name]: { - TelepathyAdapter: process.env.ARBITRUM_TELEPATHY_ADAPTER as `0x${string}`, - TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, - }, - [avalanche.name]: { - WormholeAdapter: process.env.AVALANCHE_WORMHOLE_ADAPTER as `0x${string}`, + TelepathyLightClientMainnet: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, }, }, reporterControllers: { From e4a95a3dbfb4d1cb9c93af3f79e7fdffb3f960ec Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Mon, 27 Nov 2023 13:12:41 +0100 Subject: [PATCH 35/81] feat(reporter): adds ConnextReporterController --- .../src/ABIs/ConnextHeaderReporterABI.json | 20 +++++++++ .../controllers/ConnextReporterController.ts | 41 +++++++++++++++++++ packages/reporter/src/index.ts | 16 ++++++++ packages/reporter/src/settings/index.ts | 2 + 4 files changed, 79 insertions(+) create mode 100644 packages/reporter/src/ABIs/ConnextHeaderReporterABI.json create mode 100644 packages/reporter/src/controllers/ConnextReporterController.ts diff --git a/packages/reporter/src/ABIs/ConnextHeaderReporterABI.json b/packages/reporter/src/ABIs/ConnextHeaderReporterABI.json new file mode 100644 index 00000000..f3e794f6 --- /dev/null +++ b/packages/reporter/src/ABIs/ConnextHeaderReporterABI.json @@ -0,0 +1,20 @@ +[ + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "adapter", + "type": "address" + } + ], + "name": "reportHeaders", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] diff --git a/packages/reporter/src/controllers/ConnextReporterController.ts b/packages/reporter/src/controllers/ConnextReporterController.ts new file mode 100644 index 00000000..3804f89f --- /dev/null +++ b/packages/reporter/src/controllers/ConnextReporterController.ts @@ -0,0 +1,41 @@ +import { Chain, formatEther } from "viem" +import ABI from "../ABIs/ConnextHeaderReporterABI.json" + +import BaseController from "./BaseController" + +import { BaseControllerConfigs } from "./BaseController" + +interface ConnextReporterControllerConfigs extends BaseControllerConfigs {} + +class ConnextReporterController extends BaseController { + constructor(_configs: ConnextReporterControllerConfigs) { + super(_configs, "ConnextReporterController") + } + + async onBlocks(_blockNumbers: bigint[]) { + try { + const client = this.multiClient.getClientByChain(this.sourceChain) + + for (const chain of this.destinationChains as Chain[]) { + if (!this.adapterAddresses[chain.name]) continue + + const blockNumber = _blockNumbers[_blockNumbers.length - 1] + + this.logger.info(`reporting block header for block ${blockNumber} on ${chain.name} ...`) + const { request } = await client.simulateContract({ + address: this.reporterAddresses[chain.name], + abi: ABI, + functionName: "reportHeaders", + args: [[blockNumber], this.adapterAddresses[chain.name]], + }) + + const txHash = await client.writeContract(request) + this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) + } + } catch (_error) { + this.logger.error(_error) + } + } +} + +export default ConnextReporterController diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 0bf8e1ab..67670f3f 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -5,6 +5,7 @@ import { Chain } from "viem" import Multiclient from "./MultiClient" import AMBReporterController from "./controllers/AMBReporterController" import AxelarReporterController from "./controllers/AxelarReporterController" +import ConnextReporterController from "./controllers/ConnextReporterController" import OptimismReporterController from "./controllers/OptimismReporterController" // import SygmaReporterController from "./controllers/SygmaReporterController" import TelepathyReporterController from "./controllers/TelepathyReporterController" @@ -133,6 +134,20 @@ const main = () => { }, }) + const connextReporterController = new ConnextReporterController({ + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddresses: { + [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name][gnosis.name].ConnextReporter + }, + adapterAddresses: { + [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name][gnosis.name].ConnextAdapter + }, + }) + const coordinator = new Coordinator({ controllers: [ ambReporterController, @@ -141,6 +156,7 @@ const main = () => { wormholeReporterController, optimismReporterController, axelarReporterController, + connextReporterController ].filter((_controller) => controllersEnabled?.includes(_controller.name)), intervalFetchBlocksMs: settings.Coordinator.intervalFetchBlocksMs, logger, diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 5f71a0d1..758a619b 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -30,6 +30,7 @@ export const settings = { [gnosis.name]: { TelepathyAdapter: process.env.GNOSIS_TELEPATHY_ADAPTER as `0x${string}`, AMBAdapter: process.env.GNOSIS_AMB_ADAPTER as `0x${string}`, + ConnextAdapter: process.env.GNOSIS_CONNEXT_ADAPTER_MAINNET as `0x${string}`, // SygmaAdapter: process.env.GNOSIS_SYGMA_ADAPTER as `0x${string}`, }, [polygon.name]: { @@ -73,6 +74,7 @@ export const settings = { }, [gnosis.name]: { AMBReporter: process.env.MAINNET_AMB_REPORTER as `0x${string}`, + ConnextReporter: process.env.MAINNET_REPORTER_GNOSIS as `0x${string}`, }, [optimism.name]: { L1CrossDomainMessengerHeaderReporter: process.env From 94cd1c48680253a11f7c454e0ec946710e28c149 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Mon, 27 Nov 2023 18:31:26 +0100 Subject: [PATCH 36/81] feat(reporter): adds StandardReporterController and adds support to celer --- packages/reporter/.env.example | 8 +++- .../src/ABIs/ConnextHeaderReporterABI.json | 20 --------- ....json => StandardReporterContractABI.json} | 0 .../controllers/ConnextReporterController.ts | 41 ------------------- ...oller.ts => StandardReporterController.ts} | 21 ++++++---- .../controllers/SygmaReporterController.ts | 8 ++-- packages/reporter/src/index.ts | 40 +++++++++++++----- packages/reporter/src/settings/index.ts | 20 +++++++-- 8 files changed, 70 insertions(+), 88 deletions(-) delete mode 100644 packages/reporter/src/ABIs/ConnextHeaderReporterABI.json rename packages/reporter/src/ABIs/{AxelarHeaderReporterABI.json => StandardReporterContractABI.json} (100%) delete mode 100644 packages/reporter/src/controllers/ConnextReporterController.ts rename packages/reporter/src/controllers/{AxelarReporterController.ts => StandardReporterController.ts} (66%) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index c2a2721f..a16a2c43 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -10,7 +10,9 @@ OPTIMISM_RPC_URL=https://optimism.llamarpc.com ARBITRUM_RPC_URL=https://arbitrum.llamarpc.com AMB_REPORTER_HEADERS_GAS=300000 +AXELAR_REPORT_HEADERS_VALUE=0.0001 SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE=0.0001 +CELER_REPORT_HEADERS_VALUE=0.0001 TELEPATHY_PROOF_API_URL= TELEPATHY_BLOCK_BUFFER=10 @@ -43,5 +45,7 @@ MAINNET_WORMHOLE_HEADER_REPORTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 MAINNET_WORMHOLE_ADDRESS=0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS=0xbA5B3f0643582E75AF252e7631dE62c046970167 OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS=0xe58E7bF7aCD1396D8F9eAF44DB3D4Fd055DCDb51 -MAINNET_AXELAR_HEADER_REPORTER_BSC=0xBfd877753F8B4f4117a08aD54DcBE69cF3165d81 -BSC_AXELAR_ADAPTER_MAINNET=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 \ No newline at end of file +MAINNET_AXELAR_REPORTER_BSC=0xBfd877753F8B4f4117a08aD54DcBE69cF3165d81 +BSC_AXELAR_ADAPTER_MAINNET=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 +POLYGON_CELER_ADAPTER_MAINNET= +MAINNET_CELER_REPORTER_POLYGON= \ No newline at end of file diff --git a/packages/reporter/src/ABIs/ConnextHeaderReporterABI.json b/packages/reporter/src/ABIs/ConnextHeaderReporterABI.json deleted file mode 100644 index f3e794f6..00000000 --- a/packages/reporter/src/ABIs/ConnextHeaderReporterABI.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "blockNumbers", - "type": "uint256[]" - }, - { - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "name": "reportHeaders", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } -] diff --git a/packages/reporter/src/ABIs/AxelarHeaderReporterABI.json b/packages/reporter/src/ABIs/StandardReporterContractABI.json similarity index 100% rename from packages/reporter/src/ABIs/AxelarHeaderReporterABI.json rename to packages/reporter/src/ABIs/StandardReporterContractABI.json diff --git a/packages/reporter/src/controllers/ConnextReporterController.ts b/packages/reporter/src/controllers/ConnextReporterController.ts deleted file mode 100644 index 3804f89f..00000000 --- a/packages/reporter/src/controllers/ConnextReporterController.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Chain, formatEther } from "viem" -import ABI from "../ABIs/ConnextHeaderReporterABI.json" - -import BaseController from "./BaseController" - -import { BaseControllerConfigs } from "./BaseController" - -interface ConnextReporterControllerConfigs extends BaseControllerConfigs {} - -class ConnextReporterController extends BaseController { - constructor(_configs: ConnextReporterControllerConfigs) { - super(_configs, "ConnextReporterController") - } - - async onBlocks(_blockNumbers: bigint[]) { - try { - const client = this.multiClient.getClientByChain(this.sourceChain) - - for (const chain of this.destinationChains as Chain[]) { - if (!this.adapterAddresses[chain.name]) continue - - const blockNumber = _blockNumbers[_blockNumbers.length - 1] - - this.logger.info(`reporting block header for block ${blockNumber} on ${chain.name} ...`) - const { request } = await client.simulateContract({ - address: this.reporterAddresses[chain.name], - abi: ABI, - functionName: "reportHeaders", - args: [[blockNumber], this.adapterAddresses[chain.name]], - }) - - const txHash = await client.writeContract(request) - this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) - } - } catch (_error) { - this.logger.error(_error) - } - } -} - -export default ConnextReporterController diff --git a/packages/reporter/src/controllers/AxelarReporterController.ts b/packages/reporter/src/controllers/StandardReporterController.ts similarity index 66% rename from packages/reporter/src/controllers/AxelarReporterController.ts rename to packages/reporter/src/controllers/StandardReporterController.ts index b5a577be..648a2e8f 100644 --- a/packages/reporter/src/controllers/AxelarReporterController.ts +++ b/packages/reporter/src/controllers/StandardReporterController.ts @@ -1,15 +1,22 @@ import { Chain, formatEther } from "viem" -import ABI from "../ABIs/AxelarHeaderReporterABI.json" +import ABI from "../ABIs/StandardReporterContractABI.json" import BaseController from "./BaseController" import { BaseControllerConfigs } from "./BaseController" -interface AxelarReporterControllerConfigs extends BaseControllerConfigs {} +interface StandardReporterControllerConfigs extends BaseControllerConfigs { + name: string + reportHeadersValue?: bigint +} + +class StandardReporterController extends BaseController { + private _reportHeadersValue: bigint + + constructor(_configs: StandardReporterControllerConfigs) { + super(_configs, _configs.name) -class AxelarReporterController extends BaseController { - constructor(_configs: AxelarReporterControllerConfigs) { - super(_configs, "AxelarReporterController") + this._reportHeadersValue = _configs.reportHeadersValue || BigInt(0) } async onBlocks(_blockNumbers: bigint[]) { @@ -27,7 +34,7 @@ class AxelarReporterController extends BaseController { abi: ABI, functionName: "reportHeaders", args: [[blockNumber], this.adapterAddresses[chain.name]], - value: BigInt(0.0001 * 10 ** 18), + value: this._reportHeadersValue, }) const txHash = await client.writeContract(request) @@ -39,4 +46,4 @@ class AxelarReporterController extends BaseController { } } -export default AxelarReporterController +export default StandardReporterController diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index 0156fce2..a84e8bf8 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -6,18 +6,18 @@ import BaseController from "./BaseController" import { BaseControllerConfigs } from "./BaseController" interface SygmaReporterControllerConfigs extends BaseControllerConfigs { - reportHeadersToDomainMsgValue: string + reportHeadersToDomainValue: bigint domainIds: { [chainName: string]: number } } class SygmaReporterController extends BaseController { private _domainIds: { [chainName: string]: number } - private _reportHeadersToDomainMsgValue: string + private _reportHeadersToDomainValue: bigint constructor(_configs: SygmaReporterControllerConfigs) { super(_configs, "SygmaReporterController") this._domainIds = _configs.domainIds - this._reportHeadersToDomainMsgValue = _configs.reportHeadersToDomainMsgValue + this._reportHeadersToDomainValue = _configs.reportHeadersToDomainValue } async onBlocks(_blockNumbers: bigint[]) { @@ -43,7 +43,7 @@ class SygmaReporterController extends BaseController { this._domainIds[chain.name as keyof typeof this._domainIds], "0x", ], - value: parseEther(this._reportHeadersToDomainMsgValue), + value: this._reportHeadersToDomainValue, }) const txHash = await client.writeContract(request) this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 67670f3f..19889817 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -4,10 +4,9 @@ import { Chain } from "viem" import Multiclient from "./MultiClient" import AMBReporterController from "./controllers/AMBReporterController" -import AxelarReporterController from "./controllers/AxelarReporterController" -import ConnextReporterController from "./controllers/ConnextReporterController" import OptimismReporterController from "./controllers/OptimismReporterController" // import SygmaReporterController from "./controllers/SygmaReporterController" +import StandardReporterController from "./controllers/StandardReporterController" import TelepathyReporterController from "./controllers/TelepathyReporterController" import WormholeReporterController from "./controllers/WormholeReporterController" import Coordinator from "./Coordinator" @@ -60,7 +59,7 @@ const main = () => { multiClient, reporterAddress: settings.contractAddresses.Goerli.SygmaReporter, adapterAddresses: { [gnosis.name]: settings.contractAddresses.Gnosis.SygmaAdapter }, - reportHeadersToDomainMsgValue: settings.reporterControllers.SygmaReporterController.reportHeadersToDomainMsgValue, + reportHeadersToDomainValue: settings.reporterControllers.SygmaReporterController.reportHeadersToDomainValue, domainIds: settings.reporterControllers.SygmaReporterController.domainIds, })*/ @@ -113,14 +112,16 @@ const main = () => { logger, multiClient, reporterAddress: - settings.contractAddresses.reporterAddresses.unidirectional.Ethereum["OP Mainnet"].L1CrossDomainMessengerHeaderReporter, + settings.contractAddresses.reporterAddresses.unidirectional.Ethereum["OP Mainnet"] + .L1CrossDomainMessengerHeaderReporter, adapterAddresses: { [optimism.name]: settings.contractAddresses.adapterAddresses.unidirectional.Ethereum["OP Mainnet"].L2CrossDomainMessengerAdapter, }, }) - const axelarReporterController = new AxelarReporterController({ + const axelarReporterController = new StandardReporterController({ + name: "AxelarReporterController", type: "classic", sourceChain, destinationChains, @@ -132,31 +133,50 @@ const main = () => { adapterAddresses: { [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name][bsc.name].AxelarAdapter, }, + reportHeadersValue: settings.reporterControllers.AxelarReporterController.reportHeadersValue, }) - const connextReporterController = new ConnextReporterController({ + const connextReporterController = new StandardReporterController({ + name: "ConnextReporterController", type: "classic", sourceChain, destinationChains, logger, multiClient, reporterAddresses: { - [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name][gnosis.name].ConnextReporter + [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name][gnosis.name].ConnextReporter, }, adapterAddresses: { - [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name][gnosis.name].ConnextAdapter + [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name][gnosis.name].ConnextAdapter, }, }) + const celerReporterController = new StandardReporterController({ + name: "CelerReporterController", + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddresses: { + [polygon.name]: unidirectionalReportersAddresses[sourceChain.name][polygon.name].CelerReporter, + }, + adapterAddresses: { + [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name][polygon.name].CelerAdapter, + }, + reportHeadersValue: settings.reporterControllers.AxelarReporterController.reportHeadersValue, + }) + const coordinator = new Coordinator({ controllers: [ ambReporterController, - // sygmaReporterController, + // sygmaReporterController, telepathyReporterController, wormholeReporterController, optimismReporterController, axelarReporterController, - connextReporterController + connextReporterController, + celerReporterController, ].filter((_controller) => controllersEnabled?.includes(_controller.name)), intervalFetchBlocksMs: settings.Coordinator.intervalFetchBlocksMs, logger, diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 758a619b..7d780185 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -1,4 +1,5 @@ import "dotenv/config" +import { parseEther } from "viem" import { gnosis, mainnet, goerli, polygon, optimism, bsc, arbitrum, avalanche } from "viem/chains" export const settings = { @@ -44,6 +45,9 @@ export const settings = { [arbitrum.name]: { TelepathyAdapter: process.env.ARBITRUM_TELEPATHY_ADAPTER as `0x${string}`, }, + [polygon.name]: { + CelerAdapter: process.env.POLYGON_CELER_ADAPTER_MAINNET as `0x${string}`, + }, /*[goerli.name]: { AMBReporter: "0xedc0b1d3de4496e0d917af42f29cb71eb2982319" as `0x${string}`, SygmaReporter: "0x2f96d347c932ac73b56e9352ecc0707e25173d88" as `0x${string}`, @@ -70,7 +74,7 @@ export const settings = { unidirectional: { [mainnet.name]: { [bsc.name]: { - AxelarReporter: process.env.MAINNET_AXELAR_HEADER_REPORTER_BSC as `0x${string}`, + AxelarReporter: process.env.MAINNET_AXELAR_REPORTER_BSC as `0x${string}`, }, [gnosis.name]: { AMBReporter: process.env.MAINNET_AMB_REPORTER as `0x${string}`, @@ -80,12 +84,14 @@ export const settings = { L1CrossDomainMessengerHeaderReporter: process.env .MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS as `0x${string}`, }, + [polygon.name]: { + CelerAdapter: process.env.MAINNET_CELER_REPORTER_POLYGON as `0x${string}`, + }, }, }, - [mainnet.name]: { WormholeHeaderReporter: process.env.MAINNET_WORMHOLE_HEADER_REPORTER as `0x${string}`, - } + }, }, [mainnet.name]: { Wormhole: process.env.MAINNET_WORMHOLE_ADDRESS as `0x${string}`, @@ -107,11 +113,17 @@ export const settings = { }, }, reporterControllers: { + AxelarReporterController: { + reportHeadersValue: parseEther(process.env.AXELAR_REPORT_HEADERS_VALUE as string), + }, AMBReporterController: { reportHeadersGas: Number(process.env.AMB_REPORTER_HEADERS_GAS), }, + CelerReporterController: { + reportHeadersValue: parseEther(process.env.CELER_REPORT_HEADERS_VALUE as string), + }, SygmaReporterController: { - reportHeadersToDomainMsgValue: process.env.SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE as string, + reportHeadersToDomainValue: parseEther(process.env.SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE as string), domainIds: { [gnosis.name]: 101, [mainnet.name]: 1, From ec2db7081d5e0a3fef9f914a27008521cb94d987 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Mon, 27 Nov 2023 18:56:03 +0100 Subject: [PATCH 37/81] fix(reporter): fixes wrong param --- packages/reporter/src/index.ts | 2 +- packages/reporter/src/settings/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 19889817..14dd177c 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -164,7 +164,7 @@ const main = () => { adapterAddresses: { [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name][polygon.name].CelerAdapter, }, - reportHeadersValue: settings.reporterControllers.AxelarReporterController.reportHeadersValue, + reportHeadersValue: settings.reporterControllers.CelerReporterController.reportHeadersValue, }) const coordinator = new Coordinator({ diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 7d780185..d9712d50 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -85,7 +85,7 @@ export const settings = { .MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS as `0x${string}`, }, [polygon.name]: { - CelerAdapter: process.env.MAINNET_CELER_REPORTER_POLYGON as `0x${string}`, + CelerReporter: process.env.MAINNET_CELER_REPORTER_POLYGON as `0x${string}`, }, }, }, From 7fc61c0b41e840cfe4811977d9fb742f09a040b2 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Tue, 28 Nov 2023 13:00:17 +0100 Subject: [PATCH 38/81] feat(reporter): adds support for ccip, hyperlane and l0 --- packages/reporter/.env.example | 15 +++- packages/reporter/src/index.ts | 104 +++++++++++++++++------- packages/reporter/src/settings/index.ts | 45 +++++++++- 3 files changed, 130 insertions(+), 34 deletions(-) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index a16a2c43..ed93fd2a 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -1,6 +1,6 @@ PRIVATE_KEY= -REPORTERS_ENABLED=AMBReporterController,SygmaReporterController,TelepathyReporterController,WormholeReporterController,OptimismReporterController,AxelarReporterController +REPORTERS_ENABLED=AMBReporterController,SygmaReporterController,TelepathyReporterController,WormholeReporterController,OptimismReporterController,AxelarReporterController,LayerZeroReporterController GNOSIS_RPC_URL=https://rpc.ankr.com/gnosis MAINNET_RPC_URL= @@ -8,11 +8,14 @@ GOERLI_RPC_URL= POLYGON_RPC_URL= OPTIMISM_RPC_URL=https://optimism.llamarpc.com ARBITRUM_RPC_URL=https://arbitrum.llamarpc.com +SEPOLIA_RPC_URL= AMB_REPORTER_HEADERS_GAS=300000 AXELAR_REPORT_HEADERS_VALUE=0.0001 SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE=0.0001 CELER_REPORT_HEADERS_VALUE=0.0001 +LAYER_ZERO_REPORT_HEADERS_VALUE=0.0007 +CCIP_REPORT_HEADERS_VALUE=0.0002 TELEPATHY_PROOF_API_URL= TELEPATHY_BLOCK_BUFFER=10 @@ -47,5 +50,11 @@ MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS=0xbA5B3f0643582E75AF25 OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS=0xe58E7bF7aCD1396D8F9eAF44DB3D4Fd055DCDb51 MAINNET_AXELAR_REPORTER_BSC=0xBfd877753F8B4f4117a08aD54DcBE69cF3165d81 BSC_AXELAR_ADAPTER_MAINNET=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 -POLYGON_CELER_ADAPTER_MAINNET= -MAINNET_CELER_REPORTER_POLYGON= \ No newline at end of file +POLYGON_CELER_ADAPTER_MAINNET=0x1fF52708D610b1D17F0830f036e992677CDc508A +MAINNET_CELER_REPORTER_POLYGON=0x52258b83051B7031483740aC9EcAa07926392ea0 +AVALANCHE_LAYER_ZERO_ADAPTER_MAINNET=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a +MAINNET_LAYER_ZERO_REPORTER_AVALANCHE=0x16B43E348e0A19E9196ae79D172aDC52B3Aa3E20 +OPTIMISM_GOERLI_CCIP_ADAPTER_SEPOLIA=0x520185210Aa645220a49afD9C33d28b73494e14d +SEPOLIA_CCIP_REPORTER_OPTIMISM_GOERLI=0xF3D2877866cd8E6771843b96B66aFcE425B2353C +BSC_TESTNET_CCIP_ADAPTER_SEPOLIA=0xB6133Ab655B990E80Af3E948852C8ec2a46651A5 +SEPOLIA_CCIP_REPORTER_BSC_TESTNET=0x855A2814E0DFf8327f1a52aCC9537772B829e226 \ No newline at end of file diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 14dd177c..3a704d3f 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -1,5 +1,5 @@ import * as chains from "viem/chains" -import { avalanche, gnosis, mainnet, goerli, polygon, optimism, bsc, arbitrum } from "viem/chains" +import { arbitrum, avalanche, bsc, bscTestnet, gnosis, optimism, optimismGoerli, polygon } from "viem/chains" import { Chain } from "viem" import Multiclient from "./MultiClient" @@ -27,15 +27,7 @@ const main = () => { const multiClient = new Multiclient({ chains: [sourceChain, ...destinationChains], privateKey: process.env.PRIVATE_KEY as `0x${string}`, - rpcUrls: { - [goerli.name]: settings.rpcUrls.Goerli, - [gnosis.name]: settings.rpcUrls.Gnosis, - [mainnet.name]: settings.rpcUrls.Ethereum, - [arbitrum.name]: settings.rpcUrls["Arbitrum One"], - [optimism.name]: settings.rpcUrls["OP Mainnet"], - [bsc.name]: settings.rpcUrls["BNB Smart Chain"], - [polygon.name]: settings.rpcUrls.Polygon, - }, + rpcUrls: settings.rpcUrls, }) const ambReporterController = new AMBReporterController({ @@ -44,9 +36,9 @@ const main = () => { destinationChains: destinationChains.filter(({ name }) => name === gnosis.name), logger, multiClient, - reporterAddress: unidirectionalReportersAddresses[sourceChain.name].Gnosis.AMBReporter, + reporterAddress: unidirectionalReportersAddresses[sourceChain.name]?.Gnosis?.AMBReporter, adapterAddresses: { - [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name].Gnosis.AMBAdapter, + [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Gnosis?.AMBAdapter, }, reportHeadersGas: settings.reporterControllers.AMBReporterController.reportHeadersGas, }) @@ -70,11 +62,11 @@ const main = () => { logger, multiClient, adapterAddresses: { - [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name].Gnosis.TelepathyAdapter, - [arbitrum.name]: unidirectionalAdaptersAddresses[sourceChain.name]["Arbitrum One"].TelepathyAdapter, - [optimism.name]: unidirectionalAdaptersAddresses[sourceChain.name]["OP Mainnet"].TelepathyAdapter, - [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]["BNB Smart Chain"].TelepathyAdapter, - [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name].Polygon.TelepathyAdapter, + [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Gnosis?.TelepathyAdapter, + [arbitrum.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["Arbitrum One"]?.TelepathyAdapter, + [optimism.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["OP Mainnet"]?.TelepathyAdapter, + [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["BNB Smart Chain"]?.TelepathyAdapter, + [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Polygon?.TelepathyAdapter, }, baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, lightClientAddresses: { @@ -92,16 +84,16 @@ const main = () => { destinationChains, logger, multiClient, - reporterAddress: (settings.contractAddresses.reporterAddresses as any)[sourceChain.name].WormholeHeaderReporter, + reporterAddress: (settings.contractAddresses.reporterAddresses as any)[sourceChain.name]?.WormholeHeaderReporter, adapterAddresses: { - [gnosis.name]: (settings.contractAddresses.adapterAddresses as any).Gnosis.WormholeAdapter, - [optimism.name]: (settings.contractAddresses.adapterAddresses as any)["OP Mainnet"].WormholeAdapter, - [bsc.name]: (settings.contractAddresses.adapterAddresses as any)["BNB Smart Chain"].WormholeAdapter, - [polygon.name]: (settings.contractAddresses.adapterAddresses as any).Polygon.WormholeAdapter, - [avalanche.name]: (settings.contractAddresses.adapterAddresses as any).Avalanche.WormholeAdapter, + [gnosis.name]: (settings.contractAddresses.adapterAddresses as any)?.Gnosis?.WormholeAdapter, + [optimism.name]: (settings.contractAddresses.adapterAddresses as any)["OP Mainnet"]?.WormholeAdapter, + [bsc.name]: (settings.contractAddresses.adapterAddresses as any)["BNB Smart Chain"]?.WormholeAdapter, + [polygon.name]: (settings.contractAddresses.adapterAddresses as any)?.Polygon.WormholeAdapter, + [avalanche.name]: (settings.contractAddresses.adapterAddresses as any)?.Avalanche.WormholeAdapter, }, wormholeScanBaseUrl: settings.reporterControllers.WormholeReporterController.wormholeScanBaseUrl, - wormholeAddress: (settings.contractAddresses as any)[sourceChain.name].Wormhole, + wormholeAddress: (settings.contractAddresses as any)[sourceChain.name]?.Wormhole, wormholeChainIds: settings.reporterControllers.WormholeReporterController.wormholeChainIds, }) @@ -128,10 +120,10 @@ const main = () => { logger, multiClient, reporterAddresses: { - [bsc.name]: unidirectionalReportersAddresses[sourceChain.name][bsc.name].AxelarReporter, + [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.AxelarReporter, }, adapterAddresses: { - [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name][bsc.name].AxelarAdapter, + [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.AxelarAdapter, }, reportHeadersValue: settings.reporterControllers.AxelarReporterController.reportHeadersValue, }) @@ -144,10 +136,10 @@ const main = () => { logger, multiClient, reporterAddresses: { - [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name][gnosis.name].ConnextReporter, + [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosis.name]?.ConnextReporter, }, adapterAddresses: { - [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name][gnosis.name].ConnextAdapter, + [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[gnosis.name]?.ConnextAdapter, }, }) @@ -159,14 +151,63 @@ const main = () => { logger, multiClient, reporterAddresses: { - [polygon.name]: unidirectionalReportersAddresses[sourceChain.name][polygon.name].CelerReporter, + [polygon.name]: unidirectionalReportersAddresses[sourceChain.name]?.[polygon.name]?.CelerReporter, }, adapterAddresses: { - [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name][polygon.name].CelerAdapter, + [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[polygon.name]?.CelerAdapter, }, reportHeadersValue: settings.reporterControllers.CelerReporterController.reportHeadersValue, }) + const layerZeroReporterController = new StandardReporterController({ + name: "LayerZeroReporterController", + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddresses: { + [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroReporter, + }, + adapterAddresses: { + [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroAdapter, + }, + reportHeadersValue: settings.reporterControllers.LayerZeroReporterController.reportHeadersValue, + }) + + const hyperlaneReporterController = new StandardReporterController({ + name: "HyperlaneReporterController", + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddresses: { + [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.HyperlaneReporter, + }, + adapterAddresses: { + [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.HyperlaneAdapter, + }, + }) + + const ccipReporterController = new StandardReporterController({ + name: "CCIPReporterController", + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddresses: { + [optimismGoerli.name]: unidirectionalReportersAddresses[sourceChain.name]?.[optimismGoerli.name]?.CCIPReporter, + [bscTestnet.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bscTestnet.name]?.CCIPReporter, + }, + adapterAddresses: { + [optimismGoerli.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[optimismGoerli.name]?.CCIPAdapter, + [bscTestnet.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bscTestnet.name]?.CCIPAdapter, + }, + reportHeadersValue: settings.reporterControllers.CCIPReporterController.reportHeadersValue, + }) + const coordinator = new Coordinator({ controllers: [ ambReporterController, @@ -177,6 +218,9 @@ const main = () => { axelarReporterController, connextReporterController, celerReporterController, + layerZeroReporterController, + hyperlaneReporterController, + ccipReporterController, ].filter((_controller) => controllersEnabled?.includes(_controller.name)), intervalFetchBlocksMs: settings.Coordinator.intervalFetchBlocksMs, logger, diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index d9712d50..cc882f9f 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -1,6 +1,18 @@ import "dotenv/config" import { parseEther } from "viem" -import { gnosis, mainnet, goerli, polygon, optimism, bsc, arbitrum, avalanche } from "viem/chains" +import { + arbitrum, + avalanche, + bsc, + bscTestnet, + gnosis, + goerli, + mainnet, + optimism, + optimismGoerli, + polygon, + sepolia, +} from "viem/chains" export const settings = { Coordinator: { @@ -19,6 +31,7 @@ export const settings = { [optimism.name]: process.env.OPTIMISM_RPC_URL as string, [bsc.name]: process.env.BSC_RPC_URL as string, [arbitrum.name]: process.env.ARBITRUM_RPC_URL as string, + [sepolia.name]: process.env.SEPOLIA_RPC_URL as string, }, contractAddresses: { adapterAddresses: { @@ -27,6 +40,7 @@ export const settings = { [bsc.name]: { AxelarAdapter: process.env.BSC_AXELAR_ADAPTER_MAINNET as `0x${string}`, TelepathyAdapter: process.env.BSC_TELEPATHY_ADAPTER as `0x${string}`, + HyperlaneAdapter: process.env.BSC_HYPERLANE_ADAPTER as `0x${string}`, }, [gnosis.name]: { TelepathyAdapter: process.env.GNOSIS_TELEPATHY_ADAPTER as `0x${string}`, @@ -48,11 +62,22 @@ export const settings = { [polygon.name]: { CelerAdapter: process.env.POLYGON_CELER_ADAPTER_MAINNET as `0x${string}`, }, + [avalanche.name]: { + LayerZeroAdapter: process.env.AVALANCHE_LAYER_ZERO_ADAPTER_MAINNET as `0x${string}`, + }, /*[goerli.name]: { AMBReporter: "0xedc0b1d3de4496e0d917af42f29cb71eb2982319" as `0x${string}`, SygmaReporter: "0x2f96d347c932ac73b56e9352ecc0707e25173d88" as `0x${string}`, },*/ }, + [sepolia.name]: { + [optimismGoerli.name]: { + CCIPAdapter: process.env.OPTIMISM_GOERLI_CCIP_ADAPTER_SEPOLIA as `0x${string}`, + }, + [bscTestnet.name]: { + CCIPAdapter: process.env.BSC_TESTNET_CCIP_ADAPTER_SEPOLIA as `0x${string}`, + }, + }, }, [gnosis.name]: { WormholeAdapter: process.env.GNOSIS_WORMHOLE_ADAPTER as `0x${string}`, @@ -75,6 +100,7 @@ export const settings = { [mainnet.name]: { [bsc.name]: { AxelarReporter: process.env.MAINNET_AXELAR_REPORTER_BSC as `0x${string}`, + HyperlaneReporter: process.env.MAINNET_HYPERLANE_REPORTER_BSC as `0x${string}`, }, [gnosis.name]: { AMBReporter: process.env.MAINNET_AMB_REPORTER as `0x${string}`, @@ -87,6 +113,17 @@ export const settings = { [polygon.name]: { CelerReporter: process.env.MAINNET_CELER_REPORTER_POLYGON as `0x${string}`, }, + [avalanche.name]: { + LayerZeroReporter: process.env.MAINNET_LAYER_ZERO_REPORTER_AVALANCHE as `0x${string}`, + }, + }, + [sepolia.name]: { + [optimismGoerli.name]: { + CCIPReporter: process.env.SEPOLIA_CCIP_REPORTER_OPTIMISM_GOERLI as `0x${string}`, + }, + [bscTestnet.name]: { + CCIPReporter: process.env.SEPOLIA_CCIP_REPORTER_BSC_TESTNET as `0x${string}`, + }, }, }, [mainnet.name]: { @@ -122,6 +159,12 @@ export const settings = { CelerReporterController: { reportHeadersValue: parseEther(process.env.CELER_REPORT_HEADERS_VALUE as string), }, + CCIPReporterController: { + reportHeadersValue: parseEther(process.env.CCIP_REPORT_HEADERS_VALUE as string), + }, + LayerZeroReporterController: { + reportHeadersValue: parseEther(process.env.LAYER_ZERO_REPORT_HEADERS_VALUE as string), + }, SygmaReporterController: { reportHeadersToDomainValue: parseEther(process.env.SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE as string), domainIds: { From 25f3abf69ea4aff913a506cf5208c95e4e0c74e2 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Wed, 29 Nov 2023 07:34:44 +0100 Subject: [PATCH 39/81] fix(reporter): fixes lastProcessedBlock within TelepathyReporterController --- .../reporter/src/controllers/TelepathyReporterController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index 5cde600d..06cfeb3e 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -24,7 +24,7 @@ class TelepathyReporterController extends BaseController { this.lightClientAddresses = _configs.lightClientAddresses this._baseProofUrl = _configs.baseProofUrl - this.lastProcessedBlock = 30946038n + this.lastProcessedBlock = 0n } async update() { From c2812c7ae10ce03dd70039f08dc6e18f1c6504a0 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Wed, 29 Nov 2023 13:00:37 +0100 Subject: [PATCH 40/81] feat(reporter): adds new l0 and ccip adapters and adds support for zetachain --- packages/reporter/.env.example | 12 ++++++++-- packages/reporter/src/index.ts | 22 +++++++++++++++++ packages/reporter/src/settings/index.ts | 32 ++++++++++++++++++++----- 3 files changed, 58 insertions(+), 8 deletions(-) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index ed93fd2a..7cb6e65f 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -1,6 +1,6 @@ PRIVATE_KEY= -REPORTERS_ENABLED=AMBReporterController,SygmaReporterController,TelepathyReporterController,WormholeReporterController,OptimismReporterController,AxelarReporterController,LayerZeroReporterController +REPORTERS_ENABLED=AMBReporterController,SygmaReporterController,TelepathyReporterController,WormholeReporterController,OptimismReporterController,AxelarReporterController,ConnextReporterController,CelerReporterController,LayerZeroReporterController,CCIPReporterController,ZetaReporterController GNOSIS_RPC_URL=https://rpc.ankr.com/gnosis MAINNET_RPC_URL= @@ -16,6 +16,8 @@ SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE=0.0001 CELER_REPORT_HEADERS_VALUE=0.0001 LAYER_ZERO_REPORT_HEADERS_VALUE=0.0007 CCIP_REPORT_HEADERS_VALUE=0.0002 +CONNEXT_REPORT_HEADERS_VALUE=0.00003 +ZETA_CHAIN_REPORT_HEADERS_VALUE=0.001 TELEPATHY_PROOF_API_URL= TELEPATHY_BLOCK_BUFFER=10 @@ -57,4 +59,10 @@ MAINNET_LAYER_ZERO_REPORTER_AVALANCHE=0x16B43E348e0A19E9196ae79D172aDC52B3Aa3E20 OPTIMISM_GOERLI_CCIP_ADAPTER_SEPOLIA=0x520185210Aa645220a49afD9C33d28b73494e14d SEPOLIA_CCIP_REPORTER_OPTIMISM_GOERLI=0xF3D2877866cd8E6771843b96B66aFcE425B2353C BSC_TESTNET_CCIP_ADAPTER_SEPOLIA=0xB6133Ab655B990E80Af3E948852C8ec2a46651A5 -SEPOLIA_CCIP_REPORTER_BSC_TESTNET=0x855A2814E0DFf8327f1a52aCC9537772B829e226 \ No newline at end of file +SEPOLIA_CCIP_REPORTER_BSC_TESTNET=0x855A2814E0DFf8327f1a52aCC9537772B829e226 +MAINNET_LAYER_ZERO_REPORTER_BSC=0x6E8793E22480e9Bfd6031E2230e68e1822193717 +BSC_LAYER_ZERO_ADAPTER_MAINNET=0xaC3c8D19A64B98d62ED16FFf8a4229E8ED36A469 +GOERLI_ZETA_REPORTER_BSC_TESTNET=0x9a9fc484D3F83B489bc58c2A3EeeA8331F21796B +BSC_TESTNET_ZETA_ADAPTER_GOERLI=0x2829D554678a767c5B091D28A0A294dB7643ec05 +MAINNET_CCIP_REPORTER_AVALANCHE=0xeEFD0D67E4eF9330870961C38a3e25ECE369B141 +AVALANCHE_CCIP_ADAPTER_MAINNET=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 \ No newline at end of file diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 3a704d3f..129a1764 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -141,6 +141,7 @@ const main = () => { adapterAddresses: { [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[gnosis.name]?.ConnextAdapter, }, + reportHeadersValue: settings.reporterControllers.ConnextReporterController.reportHeadersValue, }) const celerReporterController = new StandardReporterController({ @@ -168,9 +169,11 @@ const main = () => { multiClient, reporterAddresses: { [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroReporter, + [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroReporter, }, adapterAddresses: { [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroAdapter, + [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroAdapter, }, reportHeadersValue: settings.reporterControllers.LayerZeroReporterController.reportHeadersValue, }) @@ -200,14 +203,32 @@ const main = () => { reporterAddresses: { [optimismGoerli.name]: unidirectionalReportersAddresses[sourceChain.name]?.[optimismGoerli.name]?.CCIPReporter, [bscTestnet.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bscTestnet.name]?.CCIPReporter, + [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.CCIPReporter, }, adapterAddresses: { [optimismGoerli.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[optimismGoerli.name]?.CCIPAdapter, [bscTestnet.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bscTestnet.name]?.CCIPAdapter, + [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.CCIPAdapter, }, reportHeadersValue: settings.reporterControllers.CCIPReporterController.reportHeadersValue, }) + const zetaReporterController = new StandardReporterController({ + name: "ZetaReporterController", + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddresses: { + [bscTestnet.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bscTestnet.name]?.ZetaChainReporter, + }, + adapterAddresses: { + [bscTestnet.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bscTestnet.name]?.ZetaChainAdapter, + }, + reportHeadersValue: settings.reporterControllers.ZetaReporterController.reportHeadersValue, + }) + const coordinator = new Coordinator({ controllers: [ ambReporterController, @@ -221,6 +242,7 @@ const main = () => { layerZeroReporterController, hyperlaneReporterController, ccipReporterController, + zetaReporterController, ].filter((_controller) => controllersEnabled?.includes(_controller.name)), intervalFetchBlocksMs: settings.Coordinator.intervalFetchBlocksMs, logger, diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index cc882f9f..bf70a5f3 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -41,6 +41,7 @@ export const settings = { AxelarAdapter: process.env.BSC_AXELAR_ADAPTER_MAINNET as `0x${string}`, TelepathyAdapter: process.env.BSC_TELEPATHY_ADAPTER as `0x${string}`, HyperlaneAdapter: process.env.BSC_HYPERLANE_ADAPTER as `0x${string}`, + LayerZeroAdapter: process.env.BSC_LAYER_ZERO_ADAPTER_MAINNET as `0x${string}`, }, [gnosis.name]: { TelepathyAdapter: process.env.GNOSIS_TELEPATHY_ADAPTER as `0x${string}`, @@ -64,6 +65,7 @@ export const settings = { }, [avalanche.name]: { LayerZeroAdapter: process.env.AVALANCHE_LAYER_ZERO_ADAPTER_MAINNET as `0x${string}`, + CCIPAdapter: process.env.AVALANCHE_CCIP_ADAPTER_MAINNET as `0x${string}`, }, /*[goerli.name]: { AMBReporter: "0xedc0b1d3de4496e0d917af42f29cb71eb2982319" as `0x${string}`, @@ -78,6 +80,11 @@ export const settings = { CCIPAdapter: process.env.BSC_TESTNET_CCIP_ADAPTER_SEPOLIA as `0x${string}`, }, }, + [goerli.name]: { + [bscTestnet.name]: { + ZetaChainAdapter: process.env.BSC_TESTNET_ZETA_ADAPTER_GOERLI as `0x${string}`, + }, + }, }, [gnosis.name]: { WormholeAdapter: process.env.GNOSIS_WORMHOLE_ADAPTER as `0x${string}`, @@ -101,6 +108,7 @@ export const settings = { [bsc.name]: { AxelarReporter: process.env.MAINNET_AXELAR_REPORTER_BSC as `0x${string}`, HyperlaneReporter: process.env.MAINNET_HYPERLANE_REPORTER_BSC as `0x${string}`, + LayerZeroReporter: process.env.MAINNET_LAYER_ZERO_REPORTER_BSC as `0x${string}`, }, [gnosis.name]: { AMBReporter: process.env.MAINNET_AMB_REPORTER as `0x${string}`, @@ -115,6 +123,7 @@ export const settings = { }, [avalanche.name]: { LayerZeroReporter: process.env.MAINNET_LAYER_ZERO_REPORTER_AVALANCHE as `0x${string}`, + CCIPReporter: process.env.MAINNET_CCIP_REPORTER_AVALANCHE as `0x${string}`, }, }, [sepolia.name]: { @@ -125,6 +134,11 @@ export const settings = { CCIPReporter: process.env.SEPOLIA_CCIP_REPORTER_BSC_TESTNET as `0x${string}`, }, }, + [goerli.name]: { + [bscTestnet.name]: { + ZetaChainReporter: process.env.GOERLI_ZETA_REPORTER_BSC_TESTNET as `0x${string}`, + }, + }, }, [mainnet.name]: { WormholeHeaderReporter: process.env.MAINNET_WORMHOLE_HEADER_REPORTER as `0x${string}`, @@ -150,36 +164,42 @@ export const settings = { }, }, reporterControllers: { + AMBReporterController: { + reportHeadersGas: Number(process.env.AMB_REPORTER_HEADERS_GAS), + }, AxelarReporterController: { reportHeadersValue: parseEther(process.env.AXELAR_REPORT_HEADERS_VALUE as string), }, - AMBReporterController: { - reportHeadersGas: Number(process.env.AMB_REPORTER_HEADERS_GAS), + CCIPReporterController: { + reportHeadersValue: parseEther(process.env.CCIP_REPORT_HEADERS_VALUE as string), }, CelerReporterController: { reportHeadersValue: parseEther(process.env.CELER_REPORT_HEADERS_VALUE as string), }, - CCIPReporterController: { - reportHeadersValue: parseEther(process.env.CCIP_REPORT_HEADERS_VALUE as string), + ConnextReporterController: { + reportHeadersValue: parseEther(process.env.CONNEXT_REPORT_HEADERS_VALUE as string), }, LayerZeroReporterController: { reportHeadersValue: parseEther(process.env.LAYER_ZERO_REPORT_HEADERS_VALUE as string), }, SygmaReporterController: { - reportHeadersToDomainValue: parseEther(process.env.SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE as string), domainIds: { [gnosis.name]: 101, [mainnet.name]: 1, }, + reportHeadersToDomainValue: parseEther(process.env.SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE as string), }, TelepathyReporterController: { baseProofUrl: process.env.TELEPATHY_PROOF_API_URL as string, }, WormholeReporterController: { - wormholeScanBaseUrl: process.env.WORMHOLE_SCAN_BASE_URL as string, wormholeChainIds: { [mainnet.name]: 2, }, + wormholeScanBaseUrl: process.env.WORMHOLE_SCAN_BASE_URL as string, + }, + ZetaReporterController: { + reportHeadersValue: parseEther(process.env.ZETA_CHAIN_REPORT_HEADERS_VALUE as string), }, }, } From 6eb858640b11dc0e9b5a33d68fa71febde7512ef Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Fri, 1 Dec 2023 12:25:15 +0100 Subject: [PATCH 41/81] feat(reporter): enabled SygmaReporterController --- packages/reporter/.env.example | 5 +++-- .../controllers/StandardReporterController.ts | 3 +-- .../src/controllers/SygmaReporterController.ts | 15 ++++----------- packages/reporter/src/index.ts | 17 ++++++++++------- packages/reporter/src/settings/index.ts | 8 ++++---- 5 files changed, 22 insertions(+), 26 deletions(-) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index 7cb6e65f..427fbb48 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -12,7 +12,6 @@ SEPOLIA_RPC_URL= AMB_REPORTER_HEADERS_GAS=300000 AXELAR_REPORT_HEADERS_VALUE=0.0001 -SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE=0.0001 CELER_REPORT_HEADERS_VALUE=0.0001 LAYER_ZERO_REPORT_HEADERS_VALUE=0.0007 CCIP_REPORT_HEADERS_VALUE=0.0002 @@ -65,4 +64,6 @@ BSC_LAYER_ZERO_ADAPTER_MAINNET=0xaC3c8D19A64B98d62ED16FFf8a4229E8ED36A469 GOERLI_ZETA_REPORTER_BSC_TESTNET=0x9a9fc484D3F83B489bc58c2A3EeeA8331F21796B BSC_TESTNET_ZETA_ADAPTER_GOERLI=0x2829D554678a767c5B091D28A0A294dB7643ec05 MAINNET_CCIP_REPORTER_AVALANCHE=0xeEFD0D67E4eF9330870961C38a3e25ECE369B141 -AVALANCHE_CCIP_ADAPTER_MAINNET=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 \ No newline at end of file +AVALANCHE_CCIP_ADAPTER_MAINNET=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 +GNOSIS_SYGMA_ADAPTER=0x483285D0e24401D0C5DB6cF1FAC4f79f412079C0 +MAINNET_SYGMA_REPORTER_GNOSIS=0x973bB99db211755b80c9087fe436fBb81A45AD5E \ No newline at end of file diff --git a/packages/reporter/src/controllers/StandardReporterController.ts b/packages/reporter/src/controllers/StandardReporterController.ts index 648a2e8f..9e6b81a3 100644 --- a/packages/reporter/src/controllers/StandardReporterController.ts +++ b/packages/reporter/src/controllers/StandardReporterController.ts @@ -22,12 +22,11 @@ class StandardReporterController extends BaseController { async onBlocks(_blockNumbers: bigint[]) { try { const client = this.multiClient.getClientByChain(this.sourceChain) + const blockNumber = _blockNumbers[_blockNumbers.length - 1] for (const chain of this.destinationChains as Chain[]) { if (!this.adapterAddresses[chain.name]) continue - const blockNumber = _blockNumbers[_blockNumbers.length - 1] - this.logger.info(`reporting block header for block ${blockNumber} on ${chain.name} ...`) const { request } = await client.simulateContract({ address: this.reporterAddresses[chain.name], diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index a84e8bf8..699acdcc 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -6,44 +6,37 @@ import BaseController from "./BaseController" import { BaseControllerConfigs } from "./BaseController" interface SygmaReporterControllerConfigs extends BaseControllerConfigs { - reportHeadersToDomainValue: bigint domainIds: { [chainName: string]: number } } class SygmaReporterController extends BaseController { private _domainIds: { [chainName: string]: number } - private _reportHeadersToDomainValue: bigint constructor(_configs: SygmaReporterControllerConfigs) { super(_configs, "SygmaReporterController") this._domainIds = _configs.domainIds - this._reportHeadersToDomainValue = _configs.reportHeadersToDomainValue } async onBlocks(_blockNumbers: bigint[]) { try { const client = this.multiClient.getClientByChain(this.sourceChain) + const blockNumber = _blockNumbers[_blockNumbers.length - 1] for (const chain of this.destinationChains as Chain[]) { if (!this.adapterAddresses[chain.name]) continue - this.logger.info( - `reporting block headers of blocks [${_blockNumbers[0]},${_blockNumbers[_blockNumbers.length - 1]}] on ${ - chain.name - } ...`, - ) + this.logger.info(`reporting block header for block ${blockNumber} on ${chain.name} ...`) const { request } = await client.simulateContract({ - address: this.reporterAddress as `0x${string}`, + address: this.reporterAddresses[chain.name], abi: ABI, functionName: "reportHeadersToDomain", args: [ - _blockNumbers, + [blockNumber], this.adapterAddresses[chain.name], this._domainIds[chain.name as keyof typeof this._domainIds], "0x", ], - value: this._reportHeadersToDomainValue, }) const txHash = await client.writeContract(request) this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 129a1764..e57156a1 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -5,7 +5,7 @@ import { Chain } from "viem" import Multiclient from "./MultiClient" import AMBReporterController from "./controllers/AMBReporterController" import OptimismReporterController from "./controllers/OptimismReporterController" -// import SygmaReporterController from "./controllers/SygmaReporterController" +import SygmaReporterController from "./controllers/SygmaReporterController" import StandardReporterController from "./controllers/StandardReporterController" import TelepathyReporterController from "./controllers/TelepathyReporterController" import WormholeReporterController from "./controllers/WormholeReporterController" @@ -43,17 +43,20 @@ const main = () => { reportHeadersGas: settings.reporterControllers.AMBReporterController.reportHeadersGas, }) - /*const sygmaReporterController = new SygmaReporterController({ + const sygmaReporterController = new SygmaReporterController({ type: "classic", sourceChain, destinationChains, logger, multiClient, - reporterAddress: settings.contractAddresses.Goerli.SygmaReporter, - adapterAddresses: { [gnosis.name]: settings.contractAddresses.Gnosis.SygmaAdapter }, - reportHeadersToDomainValue: settings.reporterControllers.SygmaReporterController.reportHeadersToDomainValue, + reporterAddresses: { + [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosis.name]?.SygmaReporter, + }, + adapterAddresses: { + [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Gnosis?.SygmaAdapter, + }, domainIds: settings.reporterControllers.SygmaReporterController.domainIds, - })*/ + }) const telepathyReporterController = new TelepathyReporterController({ type: "lightClient", @@ -232,7 +235,7 @@ const main = () => { const coordinator = new Coordinator({ controllers: [ ambReporterController, - // sygmaReporterController, + sygmaReporterController, telepathyReporterController, wormholeReporterController, optimismReporterController, diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index bf70a5f3..856fd325 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -47,7 +47,7 @@ export const settings = { TelepathyAdapter: process.env.GNOSIS_TELEPATHY_ADAPTER as `0x${string}`, AMBAdapter: process.env.GNOSIS_AMB_ADAPTER as `0x${string}`, ConnextAdapter: process.env.GNOSIS_CONNEXT_ADAPTER_MAINNET as `0x${string}`, - // SygmaAdapter: process.env.GNOSIS_SYGMA_ADAPTER as `0x${string}`, + SygmaAdapter: process.env.GNOSIS_SYGMA_ADAPTER as `0x${string}`, // this works with many chains }, [polygon.name]: { TelepathyAdapter: process.env.POLYGON_TELEPATHY_ADAPTER as `0x${string}`, @@ -112,7 +112,8 @@ export const settings = { }, [gnosis.name]: { AMBReporter: process.env.MAINNET_AMB_REPORTER as `0x${string}`, - ConnextReporter: process.env.MAINNET_REPORTER_GNOSIS as `0x${string}`, + ConnextReporter: process.env.MAINNET_CONNEXT_REPORTER_GNOSIS as `0x${string}`, + SygmaReporter: process.env.MAINNET_SYGMA_REPORTER_GNOSIS as `0x${string}`, }, [optimism.name]: { L1CrossDomainMessengerHeaderReporter: process.env @@ -184,10 +185,9 @@ export const settings = { }, SygmaReporterController: { domainIds: { - [gnosis.name]: 101, + [gnosis.name]: 6, [mainnet.name]: 1, }, - reportHeadersToDomainValue: parseEther(process.env.SYGMA_REPORT_HEADERS_TO_DOMAIN_MSG_VALUE as string), }, TelepathyReporterController: { baseProofUrl: process.env.TELEPATHY_PROOF_API_URL as string, From e49c49f2234974c75671b41a0184eecf666d95ea Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Thu, 7 Dec 2023 19:32:48 +0100 Subject: [PATCH 42/81] feat(reporter): adds ElectronReporterController and changes tsconfig.json --- packages/reporter/.env.example | 10 +- packages/reporter/nodemon.json | 2 +- packages/reporter/package.json | 8 + .../reporter/src/ABIs/ElectronAdapterABI.json | 311 +++++++++++ .../src/ABIs/ElectronLightClientABI.json | 15 + .../reporter/src/ABIs/HeaderStorageABI.json | 56 ++ packages/reporter/src/Coordinator.ts | 4 +- .../src/controllers/AMBReporterController.ts | 6 +- .../src/controllers/BaseController.ts | 2 +- .../controllers/ElectronReporterController.ts | 177 ++++++ .../controllers/OptimismReporterController.ts | 6 +- .../controllers/StandardReporterController.ts | 6 +- .../controllers/SygmaReporterController.ts | 6 +- .../TelepathyReporterController.ts | 8 +- .../controllers/WormholeReporterController.ts | 12 +- packages/reporter/src/index.ts | 71 ++- packages/reporter/src/settings/index.ts | 72 ++- packages/reporter/src/utils/proofs.ts | 152 ++++++ packages/reporter/tsconfig.json | 5 +- packages/reporter/yarn.lock | 415 +++++++++++++- yarn.lock | 505 +++++++++--------- 21 files changed, 1516 insertions(+), 333 deletions(-) create mode 100644 packages/reporter/src/ABIs/ElectronAdapterABI.json create mode 100644 packages/reporter/src/ABIs/ElectronLightClientABI.json create mode 100644 packages/reporter/src/ABIs/HeaderStorageABI.json create mode 100644 packages/reporter/src/controllers/ElectronReporterController.ts create mode 100644 packages/reporter/src/utils/proofs.ts diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index 427fbb48..552241eb 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -9,6 +9,7 @@ POLYGON_RPC_URL= OPTIMISM_RPC_URL=https://optimism.llamarpc.com ARBITRUM_RPC_URL=https://arbitrum.llamarpc.com SEPOLIA_RPC_URL= +GOERLI_BEACON_API_URL= AMB_REPORTER_HEADERS_GAS=300000 AXELAR_REPORT_HEADERS_VALUE=0.0001 @@ -20,7 +21,8 @@ ZETA_CHAIN_REPORT_HEADERS_VALUE=0.001 TELEPATHY_PROOF_API_URL= TELEPATHY_BLOCK_BUFFER=10 -TELEPATHY_INTERVAL_FETCH_HEAD_UPDATES=30000 +TELEPATHY_INTERVAL_UPDATE=30000 +ELECTRON_INTERVAL_UPDATE=30000 WORMHOLE_SCAN_BASE_URL=https://api.wormholescan.io @@ -66,4 +68,8 @@ BSC_TESTNET_ZETA_ADAPTER_GOERLI=0x2829D554678a767c5B091D28A0A294dB7643ec05 MAINNET_CCIP_REPORTER_AVALANCHE=0xeEFD0D67E4eF9330870961C38a3e25ECE369B141 AVALANCHE_CCIP_ADAPTER_MAINNET=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 GNOSIS_SYGMA_ADAPTER=0x483285D0e24401D0C5DB6cF1FAC4f79f412079C0 -MAINNET_SYGMA_REPORTER_GNOSIS=0x973bB99db211755b80c9087fe436fBb81A45AD5E \ No newline at end of file +MAINNET_SYGMA_REPORTER_GNOSIS=0x973bB99db211755b80c9087fe436fBb81A45AD5E +MAINNET_HEADER_STORAGE=0x22F1fc71A505c0b2bf4D5075801cc5E0ec84B09e +GOERLI_HEADER_STORAGE=0x4cD014AC64AAa899b46BF3a477B68bb67e33eDC4 +CHIADO_ELECTRON_ADAPTER_GOERLI=0x66fBC348aef3797fb885f8073173E5064bf7ABBb +CHIADO_ELECTRON_LIGHT_CLIENT_GOERLI=0xc01707bD835f6108785DF081C943C7C108FC3D89 \ No newline at end of file diff --git a/packages/reporter/nodemon.json b/packages/reporter/nodemon.json index 58b690d4..06dbc7b5 100644 --- a/packages/reporter/nodemon.json +++ b/packages/reporter/nodemon.json @@ -2,5 +2,5 @@ "watch": ["src"], "ext": "ts,json", "ignore": ["src/**/*.spec.ts"], - "exec": "ts-node ./src/index.ts" + "exec": "ts-node --esm ./src/index.ts" } diff --git a/packages/reporter/package.json b/packages/reporter/package.json index cb529b7f..02b1c133 100644 --- a/packages/reporter/package.json +++ b/packages/reporter/package.json @@ -4,6 +4,7 @@ "name": "gnosis", "url": "https://github.com/gnosis" }, + "type": "module", "scripts": { "compile": "tsc", "lint": "eslint --ignore-path ./.eslintignore --ext .js,.ts .", @@ -13,6 +14,13 @@ }, "packageManager": "yarn@3.2.1", "dependencies": { + "@chainsafe/persistent-merkle-tree": "^0.6.1", + "@chainsafe/ssz": "^0.14.0", + "@ethereumjs/rlp": "^5.0.1", + "@ethereumjs/trie": "^6.0.1", + "@ethereumjs/util": "^9.0.1", + "@ethereumjs/vm": "^7.1.0", + "@lodestar/types": "^1.12.0", "async-mutex": "^0.4.0", "axios": "^1.5.1", "dotenv": "^16.3.1", diff --git a/packages/reporter/src/ABIs/ElectronAdapterABI.json b/packages/reporter/src/ABIs/ElectronAdapterABI.json new file mode 100644 index 00000000..f42cd269 --- /dev/null +++ b/packages/reporter/src/ABIs/ElectronAdapterABI.json @@ -0,0 +1,311 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_lightClientAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "_eventSourceAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_chainIdSource", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "reportedBlockHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "storedBlockHash", + "type": "bytes32" + } + ], + "name": "ConflictingBlockHeader", + "type": "error" + }, + { + "inputs": [], + "name": "ErrorParseReceipt", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "InvalidBlockHeaderLength", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBlockHeaderRLP", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidEventSignature", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidEventSource", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidReceiptsRoot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "slot", + "type": "uint256" + } + ], + "name": "MissingHeaderOnLC", + "type": "error" + }, + { + "inputs": [], + "name": "UnsupportedTxType", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "hashes", + "type": "bytes32" + } + ], + "name": "HashStored", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "EVENT_SIG_HASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "chainIdSource", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eventSource", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "domain", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getHashFromOracle", + "outputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "hashes", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lightClient", + "outputs": [ + { + "internalType": "contract ILightClient", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "blockHeaders", + "type": "bytes[]" + } + ], + "name": "proveAncestralBlockHashes", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "lightclientAddress", + "type": "address" + } + ], + "name": "setLightClientAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_metadata", + "type": "bytes" + } + ], + "name": "storeHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/packages/reporter/src/ABIs/ElectronLightClientABI.json b/packages/reporter/src/ABIs/ElectronLightClientABI.json new file mode 100644 index 00000000..24ee582b --- /dev/null +++ b/packages/reporter/src/ABIs/ElectronLightClientABI.json @@ -0,0 +1,15 @@ +[ + { + "inputs": [], + "name": "head", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/packages/reporter/src/ABIs/HeaderStorageABI.json b/packages/reporter/src/ABIs/HeaderStorageABI.json new file mode 100644 index 00000000..94234d20 --- /dev/null +++ b/packages/reporter/src/ABIs/HeaderStorageABI.json @@ -0,0 +1,56 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "emitter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "HeaderOutOfRange", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "blockHeader", + "type": "bytes32" + } + ], + "name": "HeaderStored", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "storeBlockHeader", + "outputs": [ + { + "internalType": "bytes32", + "name": "blockHeader", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/packages/reporter/src/Coordinator.ts b/packages/reporter/src/Coordinator.ts index 65abf2e3..aa97f878 100644 --- a/packages/reporter/src/Coordinator.ts +++ b/packages/reporter/src/Coordinator.ts @@ -2,8 +2,8 @@ import { Chain } from "viem" import winston from "winston" import { Mutex } from "async-mutex" -import Multiclient from "./MultiClient" -import BaseController from "./controllers/BaseController" +import Multiclient from "./MultiClient.js" +import BaseController from "./controllers/BaseController.js" interface BlockListenerConfigs { controllers: any[] diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts index ef143435..7eaf8947 100644 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -1,9 +1,9 @@ import { Chain } from "viem" -import ABI from "../ABIs/AMBReporterContractABI.json" +import ABI from "../ABIs/AMBReporterContractABI.json" assert { type: "json" } -import BaseController from "./BaseController" +import BaseController from "./BaseController.js" -import { BaseControllerConfigs } from "./BaseController" +import { BaseControllerConfigs } from "./BaseController.js" interface AMBReporterControllerConfigs extends BaseControllerConfigs { reportHeadersGas: number diff --git a/packages/reporter/src/controllers/BaseController.ts b/packages/reporter/src/controllers/BaseController.ts index 60465898..0964dddc 100644 --- a/packages/reporter/src/controllers/BaseController.ts +++ b/packages/reporter/src/controllers/BaseController.ts @@ -1,7 +1,7 @@ import { Chain } from "viem" import winston from "winston" -import Multiclient from "../MultiClient" +import Multiclient from "../MultiClient.js" export type ControllerType = "classic" | "lightClient" | "native" diff --git a/packages/reporter/src/controllers/ElectronReporterController.ts b/packages/reporter/src/controllers/ElectronReporterController.ts new file mode 100644 index 00000000..0c06ceef --- /dev/null +++ b/packages/reporter/src/controllers/ElectronReporterController.ts @@ -0,0 +1,177 @@ +import axios from "axios" +import { RLP } from "@ethereumjs/rlp" +import { bytesToHex } from "@ethereumjs/util" +import { Chain, encodeAbiParameters } from "viem" +import { Mutex } from "async-mutex" + +import { getReceiptsRootProof, getReceiptProof } from "../utils/proofs.js" +import HeaderStorageABI from "../ABIs/HeaderStorageABI.json" assert { type: "json" } +import AdapterContractABI from "../ABIs/ElectronAdapterABI.json" assert { type: "json" } +import ElectronLightClientABI from "../ABIs/ElectronLightClientABI.json" assert { type: "json" } +import BaseController from "./BaseController.js" +import { BaseControllerConfigs } from "./BaseController.js" +import sleep from "../utils/sleep.js" + +const EXPECTED_TOPIC = "0xf7df17dce0093aedfcbae24b4f04e823f9e863c97986ab1ba6c5267ace49ddea" //HeaderStored(uint256,bytes32) + +interface TelepathyReporterControllerConfigs extends BaseControllerConfigs { + headerStorageAddress: `0x${string}` + lightClientAddresses: { [chainName: string]: `0x${string}` } + beaconchaBaseUrl: string + beaconApiBaseUrl: string +} + +class ElectronReporterController extends BaseController { + headerStorageAddress: `0x${string}` + lastProcessedBlock: bigint + lightClientAddresses: { [chainName: string]: `0x${string}` } + private _mutex: Mutex + private _beaconchaBaseUrl: string + private _beaconApiBaseUrl: string + + constructor(_configs: TelepathyReporterControllerConfigs) { + super(_configs, "ElectronReporterController") + + this.headerStorageAddress = _configs.headerStorageAddress + this.lightClientAddresses = _configs.lightClientAddresses + this._beaconchaBaseUrl = _configs.beaconchaBaseUrl + this._beaconApiBaseUrl = _configs.beaconApiBaseUrl + this.lastProcessedBlock = 0n + this._mutex = new Mutex() + } + + async update() { + const release = await this._mutex.acquire() + try { + if (!this.headerStorageAddress || this.destinationChains?.length === 0) { + release() + return + } + + const sourceClient = this.multiClient.getClientByChain(this.sourceChain) + const blockNumber = await sourceClient.getBlockNumber() + + this.logger.info(`storing a block header for block ${blockNumber - 1n} on ${this.sourceChain.name} ...`) + const { request } = await sourceClient.simulateContract({ + address: this.headerStorageAddress as `0x${string}`, + abi: HeaderStorageABI, + functionName: "storeBlockHeader", + args: [blockNumber - 1n], + }) + + const hash = await sourceClient.writeContract(request) + this.logger.info( + `header reported from ${this.sourceChain.name} to ${ + this.destinationChains![0].name + }: ${hash} Waiting for the receipt ...`, + ) + const receipt = await sourceClient.waitForTransactionReceipt({ hash }) + + this.logger.info("Calculating receipt proof ...") + const { receiptProof, receiptsRoot } = await getReceiptProof(hash, sourceClient) + + this.logger.info("Getting log index ...") + const logIndex = receipt.logs.findIndex( + ({ address, topics }) => + address.toLowerCase() === this.headerStorageAddress.toLowerCase() && topics[0] === EXPECTED_TOPIC, + ) + + this.logger.info("Getting transaction slot ...") + let transactionSlot + while (true) { + try { + this.logger.info("Waiting for finality ...") + const { + data: { data }, + } = await axios.get(`${this._beaconchaBaseUrl}/api/v1/execution/block/${receipt.blockNumber}`) + const [ + { + posConsensus: { slot, finalized }, + }, + ] = data + if (finalized) { + transactionSlot = slot + break + } + await sleep(10000) + } catch (_err) { + await sleep(10000) + } + } + + const proof = { + lcSlotTxSlotPack: "0x" as `0x${string}`, + logIndex: BigInt(logIndex), + receiptProof: receiptProof.map((_el) => bytesToHex(_el)) as `0x${string}`[], + receiptsRoot, + receiptsRootProof: [] as string[], + txIndexRLP: ("0x" + Buffer.from(RLP.encode(receipt.transactionIndex)).toString("hex")) as `0x${string}`, + } + + for (const chain of this.destinationChains as Chain[]) { + const destinationClient = this.multiClient.getClientByChain(chain) + const lightClientSlot: bigint = (await destinationClient.readContract({ + address: this.lightClientAddresses[chain.name], + abi: ElectronLightClientABI, + functionName: "head", + args: [], + })) as bigint + + // TODO: check that head is greater than transactionSlot + + proof.lcSlotTxSlotPack = encodeAbiParameters( + [{ type: "uint64" }, { type: "uint64" }], + [lightClientSlot, transactionSlot], + ) + + this.logger.info("Calculating receipts root proof ...") + const { receiptsRootProof } = await getReceiptsRootProof( + Number(lightClientSlot), + Number(transactionSlot), + axios.create({ + baseURL: this._beaconApiBaseUrl, + responseType: "json", + headers: { "Content-Type": "application/json" }, + }), + ) + proof.receiptsRootProof = receiptsRootProof + + const encodedProof = encodeAbiParameters( + [ + { type: "bytes" }, + { type: "bytes32[]" }, + { type: "bytes32" }, + { type: "bytes[]" }, + { type: "bytes" }, + { type: "uint256" }, + ], + [ + proof.lcSlotTxSlotPack, + proof.receiptsRootProof as `0x${string}`[], + proof.receiptsRoot, + proof.receiptProof, + proof.txIndexRLP, + proof.logIndex, + ], + ) + + this.logger.info(`Storing block header for ${blockNumber} on contract ${chain.name} ...`) + const { request } = await destinationClient.simulateContract({ + address: this.adapterAddresses[chain.name], + abi: AdapterContractABI, + functionName: "storeHash", + args: [encodedProof], + }) + const txHash = await destinationClient.writeContract(request) + this.logger.info(`tx sent on ${chain.name}: ${txHash}`) + } + this.lastProcessedBlock = blockNumber + } catch (_error) { + this.logger.error(_error) + } finally { + release() + } + } +} + +export default ElectronReporterController diff --git a/packages/reporter/src/controllers/OptimismReporterController.ts b/packages/reporter/src/controllers/OptimismReporterController.ts index 64d4cbdb..8ac1c9e8 100644 --- a/packages/reporter/src/controllers/OptimismReporterController.ts +++ b/packages/reporter/src/controllers/OptimismReporterController.ts @@ -1,9 +1,9 @@ import { optimism } from "viem/chains" -import ABI from "../ABIs/L1CrossDomainMessengerHeaderReporterABI.json" -import BaseController from "./BaseController" +import ABI from "../ABIs/L1CrossDomainMessengerHeaderReporterABI.json" assert { type: "json" } +import BaseController from "./BaseController.js" -import { BaseControllerConfigs } from "./BaseController" +import { BaseControllerConfigs } from "./BaseController.js" interface OptimismReporterControllerConfigs extends BaseControllerConfigs {} diff --git a/packages/reporter/src/controllers/StandardReporterController.ts b/packages/reporter/src/controllers/StandardReporterController.ts index 9e6b81a3..8920beea 100644 --- a/packages/reporter/src/controllers/StandardReporterController.ts +++ b/packages/reporter/src/controllers/StandardReporterController.ts @@ -1,9 +1,9 @@ import { Chain, formatEther } from "viem" -import ABI from "../ABIs/StandardReporterContractABI.json" +import ABI from "../ABIs/StandardReporterContractABI.json" assert { type: "json" } -import BaseController from "./BaseController" +import BaseController from "./BaseController.js" -import { BaseControllerConfigs } from "./BaseController" +import { BaseControllerConfigs } from "./BaseController.js" interface StandardReporterControllerConfigs extends BaseControllerConfigs { name: string diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index 699acdcc..bbd3a4d0 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -1,9 +1,9 @@ import { Chain, parseEther } from "viem" -import ABI from "../ABIs/SygmaReporterContractABI.json" -import BaseController from "./BaseController" +import ABI from "../ABIs/SygmaReporterContractABI.json" assert { type: "json" } +import BaseController from "./BaseController.js" -import { BaseControllerConfigs } from "./BaseController" +import { BaseControllerConfigs } from "./BaseController.js" interface SygmaReporterControllerConfigs extends BaseControllerConfigs { domainIds: { [chainName: string]: number } diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index 06cfeb3e..c3a09de1 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -2,11 +2,11 @@ import axios from "axios" import { Chain, hexToNumber } from "viem" import { Mutex } from "async-mutex" -import LightClientContractABI from "../ABIs/TelepathyContractABI.json" -import AdapterContractABI from "../ABIs/TelepathyAdapterABI.json" -import BaseController from "./BaseController" +import LightClientContractABI from "../ABIs/TelepathyContractABI.json" assert { type: "json" } +import AdapterContractABI from "../ABIs/TelepathyAdapterABI.json" assert { type: "json" } +import BaseController from "./BaseController.js" -import { BaseControllerConfigs } from "./BaseController" +import { BaseControllerConfigs } from "./BaseController.js" interface TelepathyReporterControllerConfigs extends BaseControllerConfigs { lightClientAddresses: { [chainName: string]: `0x${string}` } diff --git a/packages/reporter/src/controllers/WormholeReporterController.ts b/packages/reporter/src/controllers/WormholeReporterController.ts index 5f378a55..56584eb4 100644 --- a/packages/reporter/src/controllers/WormholeReporterController.ts +++ b/packages/reporter/src/controllers/WormholeReporterController.ts @@ -2,13 +2,13 @@ import axios, { AxiosInstance } from "axios" import { Mutex } from "async-mutex" import { Chain } from "viem" -import BaseController from "./BaseController" -import sleep from "../utils/sleep" -import HeaderReporterABI from "../ABIs/WormhomeHeaderReporterABI.json" -import AdapterABI from "../ABIs/WormholeAdapterABI.json" -import WormholeABI from "../ABIs/WormholeABI.json" +import BaseController from "./BaseController.js" +import sleep from "../utils/sleep.js" +import HeaderReporterABI from "../ABIs/WormhomeHeaderReporterABI.json" assert { type: "json" } +import AdapterABI from "../ABIs/WormholeAdapterABI.json" assert { type: "json" } +import WormholeABI from "../ABIs/WormholeABI.json" assert { type: "json" } -import { BaseControllerConfigs } from "./BaseController" +import { BaseControllerConfigs } from "./BaseController.js" interface WormholeReporterControllerConfigs extends BaseControllerConfigs { wormholeScanBaseUrl: string diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index e57156a1..774e0ab1 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -1,28 +1,41 @@ -import * as chains from "viem/chains" -import { arbitrum, avalanche, bsc, bscTestnet, gnosis, optimism, optimismGoerli, polygon } from "viem/chains" +import { + arbitrum, + avalanche, + bsc, + bscTestnet, + gnosis, + gnosisChiado, + goerli, + optimism, + optimismGoerli, + polygon, +} from "viem/chains" import { Chain } from "viem" -import Multiclient from "./MultiClient" -import AMBReporterController from "./controllers/AMBReporterController" -import OptimismReporterController from "./controllers/OptimismReporterController" -import SygmaReporterController from "./controllers/SygmaReporterController" -import StandardReporterController from "./controllers/StandardReporterController" -import TelepathyReporterController from "./controllers/TelepathyReporterController" -import WormholeReporterController from "./controllers/WormholeReporterController" -import Coordinator from "./Coordinator" -import { settings } from "./settings/index" -import logger from "./utils/logger" +import Multiclient from "./MultiClient.js" +import AMBReporterController from "./controllers/AMBReporterController.js" +import ElectronReporterController from "./controllers/ElectronReporterController.js" +import OptimismReporterController from "./controllers/OptimismReporterController.js" +import SygmaReporterController from "./controllers/SygmaReporterController.js" +import StandardReporterController from "./controllers/StandardReporterController.js" +import TelepathyReporterController from "./controllers/TelepathyReporterController.js" +import WormholeReporterController from "./controllers/WormholeReporterController.js" +import Coordinator from "./Coordinator.js" +import { settings } from "./settings/index.js" +import logger from "./utils/logger.js" const main = () => { const controllersEnabled = process.env.REPORTERS_ENABLED?.split(",") const sourceChainId = Number(process.env.SOURCE_CHAIN_ID) const destinationChainIds = process.env.DESTINATION_CHAIN_IDS?.split(",").map((_chainId) => Number(_chainId)) - const sourceChain = Object.values(chains).find((_chain) => _chain.id === sourceChainId) as Chain - const destinationChains = Object.values(chains).filter((_chain) => destinationChainIds?.includes(_chain.id)) + const chains = [arbitrum, avalanche, bsc, bscTestnet, gnosis, gnosisChiado, goerli, optimism, optimismGoerli, polygon] + const sourceChain: Chain = Object.values(chains).find((_chain) => _chain.id === sourceChainId) as Chain + const destinationChains: Chain[] = Object.values(chains).filter((_chain) => destinationChainIds?.includes(_chain.id)) const unidirectionalAdaptersAddresses = settings.contractAddresses.adapterAddresses.unidirectional as any const unidirectionalReportersAddresses = settings.contractAddresses.reporterAddresses.unidirectional as any + const lightClientAddresses = settings.contractAddresses.lightClientAddresses as any const multiClient = new Multiclient({ chains: [sourceChain, ...destinationChains], @@ -73,11 +86,11 @@ const main = () => { }, baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, lightClientAddresses: { - [gnosis.name]: settings.contractAddresses.Gnosis.TelepathyLightClientMainnet, - [arbitrum.name]: settings.contractAddresses["Arbitrum One"].TelepathyLightClientMainnet, - [optimism.name]: settings.contractAddresses["OP Mainnet"].TelepathyLightClientMainnet, - [bsc.name]: settings.contractAddresses["BNB Smart Chain"].TelepathyLightClientMainnet, - [polygon.name]: settings.contractAddresses.Polygon.TelepathyLightClientMainnet, + [gnosis.name]: lightClientAddresses.Gnosis?.[sourceChain.name]?.TelepathyLightClient, + [arbitrum.name]: lightClientAddresses["Arbitrum One"]?.[sourceChain.name]?.TelepathyLightClient, + [optimism.name]: lightClientAddresses["OP Mainnet"]?.[sourceChain.name]?.TelepathyLightClient, + [bsc.name]: lightClientAddresses["BNB Smart Chain"]?.[sourceChain.name]?.TelepathyLightClient, + [polygon.name]: lightClientAddresses.Polygon?.[sourceChain.name]?.TelepathyLightClient, }, }) @@ -232,6 +245,25 @@ const main = () => { reportHeadersValue: settings.reporterControllers.ZetaReporterController.reportHeadersValue, }) + const electronReporterController = new ElectronReporterController({ + type: "lightClient", + sourceChain, + destinationChains, + logger, + multiClient, + adapterAddresses: { + [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["Gnosis Chiado"]?.ElectronAdapter, + }, + headerStorageAddress: (settings.contractAddresses as any)[sourceChain.name].HeaderStorage, + lightClientAddresses: { + [gnosisChiado.name]: lightClientAddresses["Gnosis Chiado"]?.[sourceChain.name]?.ElectronLightClient, + }, + beaconchaBaseUrl: (settings.reporterControllers.ElectronReporterController.beaconchaBaseUrls as any)[ + sourceChain.name + ], + beaconApiBaseUrl: (settings.beaconApiUrls as any)[sourceChain.name], + }) + const coordinator = new Coordinator({ controllers: [ ambReporterController, @@ -246,6 +278,7 @@ const main = () => { hyperlaneReporterController, ccipReporterController, zetaReporterController, + electronReporterController, ].filter((_controller) => controllersEnabled?.includes(_controller.name)), intervalFetchBlocksMs: settings.Coordinator.intervalFetchBlocksMs, logger, diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 856fd325..bfa0f700 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -6,6 +6,7 @@ import { bsc, bscTestnet, gnosis, + gnosisChiado, goerli, mainnet, optimism, @@ -20,7 +21,8 @@ export const settings = { queryBlockLength: Number(process.env.QUERY_BLOCK_LENGTH), intervalFetchBlocksMs: Number(process.env.TIME_FETCH_BLOCKS_MS), intervalsUpdateLightClients: { - TelepathyReporterController: Number(process.env.TELEPATHY_INTERVAL_FETCH_HEAD_UPDATES), + TelepathyReporterController: Number(process.env.TELEPATHY_INTERVAL_UPDATE), + ElectronReporterController: Number(process.env.ELECTRON_INTERVAL_UPDATE), }, }, rpcUrls: { @@ -33,6 +35,9 @@ export const settings = { [arbitrum.name]: process.env.ARBITRUM_RPC_URL as string, [sepolia.name]: process.env.SEPOLIA_RPC_URL as string, }, + beaconApiUrls: { + [goerli.name]: process.env.GOERLI_BEACON_API_URL as string, + }, contractAddresses: { adapterAddresses: { unidirectional: { @@ -51,6 +56,7 @@ export const settings = { }, [polygon.name]: { TelepathyAdapter: process.env.POLYGON_TELEPATHY_ADAPTER as `0x${string}`, + CelerAdapter: process.env.POLYGON_CELER_ADAPTER_MAINNET as `0x${string}`, }, [optimism.name]: { TelepathyAdapter: process.env.OPTIMISM_TELEPATHY_ADAPTER as `0x${string}`, @@ -60,9 +66,6 @@ export const settings = { [arbitrum.name]: { TelepathyAdapter: process.env.ARBITRUM_TELEPATHY_ADAPTER as `0x${string}`, }, - [polygon.name]: { - CelerAdapter: process.env.POLYGON_CELER_ADAPTER_MAINNET as `0x${string}`, - }, [avalanche.name]: { LayerZeroAdapter: process.env.AVALANCHE_LAYER_ZERO_ADAPTER_MAINNET as `0x${string}`, CCIPAdapter: process.env.AVALANCHE_CCIP_ADAPTER_MAINNET as `0x${string}`, @@ -84,6 +87,9 @@ export const settings = { [bscTestnet.name]: { ZetaChainAdapter: process.env.BSC_TESTNET_ZETA_ADAPTER_GOERLI as `0x${string}`, }, + [gnosisChiado.name]: { + ElectronAdapter: process.env.CHIADO_ELECTRON_ADAPTER_GOERLI as `0x${string}`, + }, }, }, [gnosis.name]: { @@ -145,23 +151,44 @@ export const settings = { WormholeHeaderReporter: process.env.MAINNET_WORMHOLE_HEADER_REPORTER as `0x${string}`, }, }, - [mainnet.name]: { - Wormhole: process.env.MAINNET_WORMHOLE_ADDRESS as `0x${string}`, - }, - [gnosis.name]: { - TelepathyLightClientMainnet: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, - }, - [polygon.name]: { - TelepathyLightClientMainnet: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, - }, - [bsc.name]: { - TelepathyLightClientMainnet: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, + lightClientAddresses: { + [gnosisChiado.name]: { + [goerli.name]: { + ElectronLightClient: process.env.CHIADO_ELECTRON_LIGHT_CLIENT_GOERLI as `0x${string}`, + }, + }, + [gnosis.name]: { + [mainnet.name]: { + TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, + }, + }, + [polygon.name]: { + [mainnet.name]: { + TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, + }, + }, + [bsc.name]: { + [mainnet.name]: { + TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, + }, + }, + [optimism.name]: { + [mainnet.name]: { + TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, + }, + }, + [arbitrum.name]: { + [mainnet.name]: { + TelepathyLightClient: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, + }, + }, }, - [optimism.name]: { - TelepathyLightClientMainnet: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, + [goerli.name]: { + HeaderStorage: process.env.GOERLI_HEADER_STORAGE as `0x${string}`, }, - [arbitrum.name]: { - TelepathyLightClientMainnet: "0x34b5378DE786389a477b40dD710812c250185f83" as `0x${string}`, + [mainnet.name]: { + Wormhole: process.env.MAINNET_WORMHOLE_ADDRESS as `0x${string}`, + HeaderStorage: process.env.MAINNET_HEADER_STORAGE as `0x${string}`, }, }, reporterControllers: { @@ -180,6 +207,11 @@ export const settings = { ConnextReporterController: { reportHeadersValue: parseEther(process.env.CONNEXT_REPORT_HEADERS_VALUE as string), }, + ElectronReporterController: { + beaconchaBaseUrls: { + [goerli.name]: "https://goerli.beaconcha.in", + }, + }, LayerZeroReporterController: { reportHeadersValue: parseEther(process.env.LAYER_ZERO_REPORT_HEADERS_VALUE as string), }, @@ -196,7 +228,7 @@ export const settings = { wormholeChainIds: { [mainnet.name]: 2, }, - wormholeScanBaseUrl: process.env.WORMHOLE_SCAN_BASE_URL as string, + wormholeScanBaseUrl: "https://api.wormholescan.io", }, ZetaReporterController: { reportHeadersValue: parseEther(process.env.ZETA_CHAIN_REPORT_HEADERS_VALUE as string), diff --git a/packages/reporter/src/utils/proofs.ts b/packages/reporter/src/utils/proofs.ts new file mode 100644 index 00000000..3fa41b00 --- /dev/null +++ b/packages/reporter/src/utils/proofs.ts @@ -0,0 +1,152 @@ +import { AxiosInstance } from "axios" +import { capella, ssz, phase0 } from "@lodestar/types" +import { ProofType, createProof, SingleProof } from "@chainsafe/persistent-merkle-tree" +import { TransactionType } from "@ethereumjs/tx" +import { hexToBytes, concatBytes, bigIntToBytes, intToBytes } from "@ethereumjs/util" +import { TxReceipt, PostByzantiumTxReceipt, PreByzantiumTxReceipt } from "@ethereumjs/vm" +import { toHexString, fromHexString } from "@chainsafe/ssz" +import { RLP } from "@ethereumjs/rlp" +import { WalletClient, PublicClient, TransactionReceipt, Log } from "viem" +import { Trie } from "@ethereumjs/trie" +import fs from "fs" + +const SLOTS_PER_HISTORICAL_ROOT = 8192 + +export type BeaconId = number | Uint8Array | string + +export const toStringFromBeaconId = (identifier: BeaconId) => { + if (identifier instanceof Uint8Array) { + return toHexString(identifier) + } + return identifier.toString() +} + +export const getState = async (_stateId: BeaconId, _client: AxiosInstance): Promise => { + const { data } = await _client.get(`/eth/v2/debug/beacon/states/${toStringFromBeaconId(_stateId)}`) + return ssz.capella.BeaconState.fromJson(data.data) as capella.BeaconState +} + +export const getHeader = async (_blockId: BeaconId, _client: AxiosInstance): Promise => { + const { data } = await _client.get(`/eth/v1/beacon/headers/${toStringFromBeaconId(_blockId)}`) + const header = ssz.phase0.BeaconBlockHeader.fromJson(data.data.header.message) + return header +} + +export const getReceiptsRootProof = async (_srcBlockId: BeaconId, _targetBlockId: BeaconId, _client: AxiosInstance) => { + const srcState = await getState(toStringFromBeaconId(_srcBlockId), _client) + const targetState = await getState(toStringFromBeaconId(_targetBlockId), _client) + + const srcView = ssz.capella.BeaconState.toView(srcState as capella.BeaconState) + const targetView = ssz.capella.BeaconState.toView(targetState as capella.BeaconState) + const srcSlot = srcState.slot + const targetSlot = targetState.slot + + const srcHeader = await getHeader(_srcBlockId, _client) + const srcHeaderView = ssz.phase0.BeaconBlockHeader.toView(srcHeader as phase0.BeaconBlockHeader) + + let receiptsRootProof + let receiptsRoot + if (srcSlot == targetSlot) { + const receiptGindex = ssz.capella.BeaconState.getPathInfo(["latestExecutionPayloadHeader", "receiptsRoot"]).gindex + const receiptProof = createProof(targetView.node, { + type: ProofType.single, + gindex: receiptGindex, + }) as SingleProof + receiptsRootProof = receiptProof.witnesses.map(toHexString) + receiptsRoot = toHexString(receiptProof.leaf) + } else if (srcSlot - targetSlot < 8192) { + const headerGindex = ssz.phase0.BeaconBlockHeader.getPathInfo(["stateRoot"]).gindex + const headerProof = createProof(srcHeaderView.node, { + type: ProofType.single, + gindex: headerGindex, + }) as SingleProof + + const stateRootGindex = ssz.capella.BeaconState.getPathInfo([ + "stateRoots", + targetSlot % SLOTS_PER_HISTORICAL_ROOT, + ]).gindex + const proof = createProof(srcView.node, { + type: ProofType.single, + gindex: stateRootGindex, + }) as SingleProof + + const receiptGindex = ssz.capella.BeaconState.getPathInfo(["latestExecutionPayloadHeader", "receiptsRoot"]).gindex + const receiptProof = createProof(targetView.node, { + type: ProofType.single, + gindex: receiptGindex, + }) as SingleProof + receiptsRootProof = receiptProof.witnesses.concat(proof.witnesses).concat(headerProof.witnesses).map(toHexString) + receiptsRoot = toHexString(receiptProof.leaf) + } else { + throw Error("slots are too far") + } + return { receiptsRootProof, receiptsRoot } +} + +// copied from here: https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/vm/src/runBlock.ts +export const encodeReceipt = (receipt: TxReceipt, txType: TransactionType) => { + const encoded = RLP.encode([ + (receipt as PreByzantiumTxReceipt).stateRoot ?? + ((receipt as PostByzantiumTxReceipt).status === 0 ? Uint8Array.from([]) : hexToBytes("0x01")), + bigIntToBytes(receipt.cumulativeBlockGasUsed), + receipt.bitvector, + receipt.logs, + ]) + + if (txType === TransactionType.Legacy) { + return encoded + } + + // Serialize receipt according to EIP-2718: + // `typed-receipt = tx-type || receipt-data` + return concatBytes(intToBytes(txType), encoded) +} + +export const getReceiptProof = async (_hash: `0x${string}`, _client: PublicClient & WalletClient) => { + const receipt = await _client.getTransactionReceipt({ hash: _hash }) + const block = await _client.getBlock({ blockNumber: receipt.blockNumber }) + const receipts = [] as TransactionReceipt[] + for (const hash of block.transactions) { + receipts.push(await _client.getTransactionReceipt({ hash })) + } + + const trie = new Trie() + const encodedReceipts = receipts.map((_receipt) => { + let type = 0 + if (_receipt.type == "eip2930") { + type = 1 + } else if (_receipt.type == "eip1559") { + type = 2 + } else if (_receipt.type != "legacy") { + throw Error(`Unknown receipt type ${_receipt.type}`) + } + + return encodeReceipt( + { + bitvector: fromHexString(_receipt.logsBloom), + cumulativeBlockGasUsed: BigInt(_receipt.cumulativeGasUsed), + logs: _receipt.logs.map((_log: Log) => { + return [ + fromHexString(_log.address), + _log.topics.map((_topic: `0x${string}`) => fromHexString(_topic)), + fromHexString(_log.data), + ] + }), + status: _receipt.status === "success" ? 1 : 0, + } as TxReceipt, + type, + ) + }) + + await Promise.all( + receipts.map((_receipt, _index) => trie.put(RLP.encode(_receipt.transactionIndex), encodedReceipts[_index])), + ) + const receiptKey = RLP.encode(receipt.transactionIndex) + + const root = toHexString(trie.root()) + if (root !== block.receiptsRoot) { + throw Error("The trie.root() and block.receiptsRoot do not match") + } + + return { receiptProof: await trie.createProof(receiptKey), receiptsRoot: block.receiptsRoot } +} diff --git a/packages/reporter/tsconfig.json b/packages/reporter/tsconfig.json index c5ce31cd..22729817 100644 --- a/packages/reporter/tsconfig.json +++ b/packages/reporter/tsconfig.json @@ -7,15 +7,14 @@ "experimentalDecorators": true, "forceConsistentCasingInFileNames": true, "lib": ["es6", "ESNext", "DOM"], - "module": "commonjs", - "moduleResolution": "node", + "module": "NodeNext", "noImplicitAny": true, "outDir": "./dist", "removeComments": true, "resolveJsonModule": true, "sourceMap": true, "strict": true, - "target": "ESNext" + "target": "ES2020" }, "exclude": ["node_modules"], "include": ["./src/**/*"] diff --git a/packages/reporter/yarn.lock b/packages/reporter/yarn.lock index fa27ca5b..a76b4abf 100644 --- a/packages/reporter/yarn.lock +++ b/packages/reporter/yarn.lock @@ -12,6 +12,13 @@ __metadata: languageName: node linkType: hard +"@adraffy/ens-normalize@npm:1.10.0": + version: 1.10.0 + resolution: "@adraffy/ens-normalize@npm:1.10.0" + checksum: af0540f963a2632da2bbc37e36ea6593dcfc607b937857133791781e246d47f870d5e3d21fa70d5cfe94e772c284588c81ea3f5b7f4ea8fbb824369444e4dbcb + languageName: node + linkType: hard + "@adraffy/ens-normalize@npm:1.9.4": version: 1.9.4 resolution: "@adraffy/ens-normalize@npm:1.9.4" @@ -19,6 +26,33 @@ __metadata: languageName: node linkType: hard +"@chainsafe/as-sha256@npm:^0.4.1": + version: 0.4.1 + resolution: "@chainsafe/as-sha256@npm:0.4.1" + checksum: 6d86975e648ecdafd366802278ac15b392b252e967f3681412ec48b5a3518b936cc5e977517499882b084991446d25787d98f8f585891943688cc81549a44e9a + languageName: node + linkType: hard + +"@chainsafe/persistent-merkle-tree@npm:^0.6.1": + version: 0.6.1 + resolution: "@chainsafe/persistent-merkle-tree@npm:0.6.1" + dependencies: + "@chainsafe/as-sha256": ^0.4.1 + "@noble/hashes": ^1.3.0 + checksum: 74614b8d40970dc930d5bf741619498b0bbbde5ff24ce45fce6ad122143aa77bf57249a28175b1b972cf56bff57d529a4258b7222ab4e60c1261119b5986c51b + languageName: node + linkType: hard + +"@chainsafe/ssz@npm:^0.14.0": + version: 0.14.0 + resolution: "@chainsafe/ssz@npm:0.14.0" + dependencies: + "@chainsafe/as-sha256": ^0.4.1 + "@chainsafe/persistent-merkle-tree": ^0.6.1 + checksum: fffec7b8966edb24a146b3c4ada23c9d9b2159c60327eaba2174c7175355f8c750646816a187b439da861fc3cdad5e93a9c0387c1758a3e97d7b4d79a36480c9 + languageName: node + linkType: hard + "@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0": version: 1.6.0 resolution: "@colors/colors@npm:1.6.0" @@ -88,6 +122,168 @@ __metadata: languageName: node linkType: hard +"@ethereumjs/block@npm:^5.0.1": + version: 5.0.1 + resolution: "@ethereumjs/block@npm:5.0.1" + dependencies: + "@ethereumjs/common": ^4.1.0 + "@ethereumjs/rlp": ^5.0.1 + "@ethereumjs/trie": ^6.0.1 + "@ethereumjs/tx": ^5.1.0 + "@ethereumjs/util": ^9.0.1 + ethereum-cryptography: ^2.1.2 + checksum: 6bee1189bf097b8a7ea328cdef50ffce352698f4bac4e594b0d721ee715626947e3863e7a546a55ec88547dd50c57447ecbb44b4e0fee746290745ac081566c0 + languageName: node + linkType: hard + +"@ethereumjs/blockchain@npm:^7.0.1": + version: 7.0.1 + resolution: "@ethereumjs/blockchain@npm:7.0.1" + dependencies: + "@ethereumjs/block": ^5.0.1 + "@ethereumjs/common": ^4.1.0 + "@ethereumjs/ethash": ^3.0.1 + "@ethereumjs/rlp": ^5.0.1 + "@ethereumjs/trie": ^6.0.1 + "@ethereumjs/tx": ^5.1.0 + "@ethereumjs/util": ^9.0.1 + debug: ^4.3.3 + ethereum-cryptography: ^2.1.2 + lru-cache: ^10.0.0 + checksum: 54c3019f66528e8549aa48ebe9e700017551c74491cd168353a43af25493e2cddd6f995575bfbcedb31f4b3a55f76f76c5393687495851b57a2024edad01ffa4 + languageName: node + linkType: hard + +"@ethereumjs/common@npm:^4.1.0": + version: 4.1.0 + resolution: "@ethereumjs/common@npm:4.1.0" + dependencies: + "@ethereumjs/util": ^9.0.1 + crc: ^4.3.2 + checksum: 8494e6d179fe3949d8d8285badfb7be9ade71864e477da5dbf432ecc8046a58a0db73e99b5543c807fdc1b3f5959ed9c85ba99536b2f4753e08eaeb096af4beb + languageName: node + linkType: hard + +"@ethereumjs/ethash@npm:^3.0.1": + version: 3.0.1 + resolution: "@ethereumjs/ethash@npm:3.0.1" + dependencies: + "@ethereumjs/block": ^5.0.1 + "@ethereumjs/rlp": ^5.0.1 + "@ethereumjs/util": ^9.0.1 + bigint-crypto-utils: ^3.2.2 + ethereum-cryptography: ^2.1.2 + checksum: 9d613e1bb3c58a4f33b99588cdeeae79c4481f4a368e98bbbf8249883fdc0f66806b7644b4e4420b096711da859982ca5764a9076df3f767f5e73cc291ca81c5 + languageName: node + linkType: hard + +"@ethereumjs/evm@npm:^2.1.0": + version: 2.1.0 + resolution: "@ethereumjs/evm@npm:2.1.0" + dependencies: + "@ethereumjs/common": ^4.1.0 + "@ethereumjs/statemanager": ^2.1.0 + "@ethereumjs/tx": ^5.1.0 + "@ethereumjs/util": ^9.0.1 + "@types/debug": ^4.1.9 + debug: ^4.3.3 + ethereum-cryptography: ^2.1.2 + rustbn-wasm: ^0.2.0 + checksum: 27561150def4e23d91ed6443e0354a7d93f6e94aaefc60fb34016f71e49806012425e3b2b8b76eeef40fc5a1b2b95438e3d7827b8b1b4c8af3766af28877fdf1 + languageName: node + linkType: hard + +"@ethereumjs/rlp@npm:^5.0.1": + version: 5.0.1 + resolution: "@ethereumjs/rlp@npm:5.0.1" + bin: + rlp: bin/rlp.cjs + checksum: eddff08718c3b8312007ef51a951dff6b2c1152f9f9ea6fb9eec65d50caf3fa53f5894d79d6d450eef70a5ef3b0688be044912096aa8d263345a0d9debb4d477 + languageName: node + linkType: hard + +"@ethereumjs/statemanager@npm:^2.1.0": + version: 2.1.0 + resolution: "@ethereumjs/statemanager@npm:2.1.0" + dependencies: + "@ethereumjs/common": ^4.1.0 + "@ethereumjs/rlp": ^5.0.1 + "@ethereumjs/trie": ^6.0.1 + "@ethereumjs/util": ^9.0.1 + debug: ^4.3.3 + ethereum-cryptography: ^2.1.2 + ethers: ^6.4.0 + js-sdsl: ^4.1.4 + lru-cache: ^10.0.0 + checksum: 07e1b5b9d00851328c2ebf12df3ea0440012b9fcdcb8ce3f5301c74dd71d6192cdee197c2c040b11a6e95b466f255f532c4dc337f95585eaadc0e3919245190c + languageName: node + linkType: hard + +"@ethereumjs/trie@npm:^6.0.1": + version: 6.0.1 + resolution: "@ethereumjs/trie@npm:6.0.1" + dependencies: + "@ethereumjs/rlp": ^5.0.1 + "@ethereumjs/util": ^9.0.1 + "@types/readable-stream": ^2.3.13 + ethereum-cryptography: ^2.1.2 + lru-cache: ^10.0.0 + readable-stream: ^3.6.0 + checksum: 6773fc54f2dbdab2afa230cd9ebca16a14f774c7bc5c51c2ee0d51cd6a14cabbceac87a3d1100adf5b8e19a28c7ac4056f1879274a6ec5c22c3f40e2068e060d + languageName: node + linkType: hard + +"@ethereumjs/tx@npm:^5.1.0": + version: 5.1.0 + resolution: "@ethereumjs/tx@npm:5.1.0" + dependencies: + "@ethereumjs/common": ^4.1.0 + "@ethereumjs/rlp": ^5.0.1 + "@ethereumjs/util": ^9.0.1 + ethereum-cryptography: ^2.1.2 + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true + checksum: fd17b337f7a64a6a29b1d279c52ac5bfb9655cda06858b198b85a306cc978d25b871acc4ec57e0c29bab50a7c9600d934837fb62052cbde7dc88223be7ebc740 + languageName: node + linkType: hard + +"@ethereumjs/util@npm:^9.0.1": + version: 9.0.1 + resolution: "@ethereumjs/util@npm:9.0.1" + dependencies: + "@ethereumjs/rlp": ^5.0.1 + ethereum-cryptography: ^2.1.2 + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true + checksum: 3569dcc0106f5e962e62811be66b5f49529c9d1a29671908568528b2b45d6cae03cb497fc755a1ae4144170f749133308494be42255ac98b61c930d143ed26f4 + languageName: node + linkType: hard + +"@ethereumjs/vm@npm:^7.1.0": + version: 7.1.0 + resolution: "@ethereumjs/vm@npm:7.1.0" + dependencies: + "@ethereumjs/block": ^5.0.1 + "@ethereumjs/blockchain": ^7.0.1 + "@ethereumjs/common": ^4.1.0 + "@ethereumjs/evm": ^2.1.0 + "@ethereumjs/rlp": ^5.0.1 + "@ethereumjs/statemanager": ^2.1.0 + "@ethereumjs/trie": ^6.0.1 + "@ethereumjs/tx": ^5.1.0 + "@ethereumjs/util": ^9.0.1 + debug: ^4.3.3 + ethereum-cryptography: ^2.1.2 + checksum: 03ef823f33b92057b64884a9c96893517d3bc24c6fae1251373c2247be48cdc05b4d88c5fdbd23701944af185c13c751c1b7aa430dabfc32b1cc08a135dfc9d2 + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.11.13": version: 0.11.13 resolution: "@humanwhocodes/config-array@npm:0.11.13" @@ -151,6 +347,32 @@ __metadata: languageName: node linkType: hard +"@lodestar/params@npm:^1.12.0": + version: 1.12.0 + resolution: "@lodestar/params@npm:1.12.0" + checksum: 572a75b14163b0b742f7e75692e995b1cd4b01420e9a59305d124b941660185bf70315779f62a135ddc17ed7db7109a5a564588187c3ebe3fbbee0107a7c2ea8 + languageName: node + linkType: hard + +"@lodestar/types@npm:^1.12.0": + version: 1.12.0 + resolution: "@lodestar/types@npm:1.12.0" + dependencies: + "@chainsafe/ssz": ^0.14.0 + "@lodestar/params": ^1.12.0 + checksum: ebba20b637ae4ace22ffacadf2b0a7c0dd72701354042ff7508630f82657942672c6247899ecbe618cc4cc74af6dd2b6e87b0aff18735698a591e21f5f819761 + languageName: node + linkType: hard + +"@noble/curves@npm:1.1.0, @noble/curves@npm:~1.1.0": + version: 1.1.0 + resolution: "@noble/curves@npm:1.1.0" + dependencies: + "@noble/hashes": 1.3.1 + checksum: 2658cdd3f84f71079b4e3516c47559d22cf4b55c23ac8ee9d2b1f8e5b72916d9689e59820e0f9d9cb4a46a8423af5b56dc6bb7782405c88be06a015180508db5 + languageName: node + linkType: hard + "@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": version: 1.2.0 resolution: "@noble/curves@npm:1.2.0" @@ -160,7 +382,14 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.3.2, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.2": +"@noble/hashes@npm:1.3.1": + version: 1.3.1 + resolution: "@noble/hashes@npm:1.3.1" + checksum: 7fdefc0f7a0c1ec27acc6ff88841793e3f93ec4ce6b8a6a12bfc0dd70ae6b7c4c82fe305fdfeda1735d5ad4a9eebe761e6693b3d355689c559e91242f4bc95b1 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.2, @noble/hashes@npm:^1.3.0, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.1, @noble/hashes@npm:~1.3.2": version: 1.3.2 resolution: "@noble/hashes@npm:1.3.2" checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 @@ -210,13 +439,24 @@ __metadata: languageName: node linkType: hard -"@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2": +"@scure/base@npm:^1.1.1, @scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2": version: 1.1.3 resolution: "@scure/base@npm:1.1.3" checksum: 1606ab8a4db898cb3a1ada16c15437c3bce4e25854fadc8eb03ae93cbbbac1ed90655af4b0be3da37e12056fef11c0374499f69b9e658c9e5b7b3e06353c630c languageName: node linkType: hard +"@scure/bip32@npm:1.3.1": + version: 1.3.1 + resolution: "@scure/bip32@npm:1.3.1" + dependencies: + "@noble/curves": ~1.1.0 + "@noble/hashes": ~1.3.1 + "@scure/base": ~1.1.0 + checksum: 394d65f77a40651eba21a5096da0f4233c3b50d422864751d373fcf142eeedb94a1149f9ab1dbb078086dab2d0bc27e2b1afec8321bf22d4403c7df2fea5bfe2 + languageName: node + linkType: hard + "@scure/bip32@npm:1.3.2": version: 1.3.2 resolution: "@scure/bip32@npm:1.3.2" @@ -273,6 +513,15 @@ __metadata: languageName: node linkType: hard +"@types/debug@npm:^4.1.9": + version: 4.1.12 + resolution: "@types/debug@npm:4.1.12" + dependencies: + "@types/ms": "*" + checksum: 47876a852de8240bfdaf7481357af2b88cb660d30c72e73789abf00c499d6bc7cd5e52f41c915d1b9cd8ec9fef5b05688d7b7aef17f7f272c2d04679508d1053 + languageName: node + linkType: hard + "@types/json-schema@npm:^7.0.12": version: 7.0.14 resolution: "@types/json-schema@npm:7.0.14" @@ -280,6 +529,13 @@ __metadata: languageName: node linkType: hard +"@types/ms@npm:*": + version: 0.7.34 + resolution: "@types/ms@npm:0.7.34" + checksum: f38d36e7b6edecd9badc9cf50474159e9da5fa6965a75186cceaf883278611b9df6669dc3a3cc122b7938d317b68a9e3d573d316fcb35d1be47ec9e468c6bd8a + languageName: node + linkType: hard + "@types/node-cron@npm:^3.0.9": version: 3.0.9 resolution: "@types/node-cron@npm:3.0.9" @@ -287,6 +543,22 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:*": + version: 20.10.3 + resolution: "@types/node@npm:20.10.3" + dependencies: + undici-types: ~5.26.4 + checksum: 34a329494f0ea239af05eeb6f00f396963725b3eb9a2f79c5e6a6d37e823f2ab85e1079c2ee56723a37d8b89e7bbe2bd050c97144e5bb06dab93fd1cace65c97 + languageName: node + linkType: hard + +"@types/node@npm:18.15.13": + version: 18.15.13 + resolution: "@types/node@npm:18.15.13" + checksum: 79cc5a2b5f98e8973061a4260a781425efd39161a0e117a69cd089603964816c1a14025e1387b4590c8e82d05133b7b4154fa53a7dffb3877890a66145e76515 + languageName: node + linkType: hard + "@types/node@npm:^20.8.9": version: 20.8.9 resolution: "@types/node@npm:20.8.9" @@ -296,6 +568,16 @@ __metadata: languageName: node linkType: hard +"@types/readable-stream@npm:^2.3.13": + version: 2.3.15 + resolution: "@types/readable-stream@npm:2.3.15" + dependencies: + "@types/node": "*" + safe-buffer: ~5.1.1 + checksum: ec36f525cad09b6c65a1dafcb5ad99b9e2ed824ec49b7aa23180ac427e5d35b8a0706193ecd79ab4253a283ad485ba03d5917a98daaaa144f0ea34f4823e9d82 + languageName: node + linkType: hard + "@types/semver@npm:^7.5.0": version: 7.5.4 resolution: "@types/semver@npm:7.5.4" @@ -486,6 +768,13 @@ __metadata: languageName: node linkType: hard +"aes-js@npm:4.0.0-beta.5": + version: 4.0.0-beta.5 + resolution: "aes-js@npm:4.0.0-beta.5" + checksum: cc2ea969d77df939c32057f7e361b6530aa6cb93cb10617a17a45cd164e6d761002f031ff6330af3e67e58b1f0a3a8fd0b63a720afd591a653b02f649470e15b + languageName: node + linkType: hard + "agent-base@npm:6, agent-base@npm:^6.0.2": version: 6.0.2 resolution: "agent-base@npm:6.0.2" @@ -613,6 +902,15 @@ __metadata: languageName: node linkType: hard +"async-retry@npm:^1.3.3": + version: 1.3.3 + resolution: "async-retry@npm:1.3.3" + dependencies: + retry: 0.13.1 + checksum: 38a7152ff7265a9321ea214b9c69e8224ab1febbdec98efbbde6e562f17ff68405569b796b1c5271f354aef8783665d29953f051f68c1fc45306e61aec82fdc4 + languageName: node + linkType: hard + "async@npm:^3.2.3": version: 3.2.4 resolution: "async@npm:3.2.4" @@ -645,6 +943,13 @@ __metadata: languageName: node linkType: hard +"bigint-crypto-utils@npm:^3.2.2": + version: 3.3.0 + resolution: "bigint-crypto-utils@npm:3.3.0" + checksum: 9598ce57b23f776c8936d44114c9f051e62b5fa654915b664784cbcbacc5aa0485f4479571c51ff58008abb1210c0d6a234853742f07cf84bda890f2a1e01000 + languageName: node + linkType: hard + "binary-extensions@npm:^2.0.0": version: 2.2.0 resolution: "binary-extensions@npm:2.2.0" @@ -844,6 +1149,18 @@ __metadata: languageName: node linkType: hard +"crc@npm:^4.3.2": + version: 4.3.2 + resolution: "crc@npm:4.3.2" + peerDependencies: + buffer: ">=6.0.3" + peerDependenciesMeta: + buffer: + optional: true + checksum: 8231cc25331727083ffd22da3575110fc49b4dc8725de973bd43261d4426aba134ed3a75cc247f7c5e97a6e171f87dffc3325b82890e86d032de2e6bcef09c32 + languageName: node + linkType: hard + "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -1113,6 +1430,33 @@ __metadata: languageName: node linkType: hard +"ethereum-cryptography@npm:^2.1.2": + version: 2.1.2 + resolution: "ethereum-cryptography@npm:2.1.2" + dependencies: + "@noble/curves": 1.1.0 + "@noble/hashes": 1.3.1 + "@scure/bip32": 1.3.1 + "@scure/bip39": 1.2.1 + checksum: 2e8f7b8cc90232ae838ab6a8167708e8362621404d26e79b5d9e762c7b53d699f7520aff358d9254de658fcd54d2d0af168ff909943259ed27dc4cef2736410c + languageName: node + linkType: hard + +"ethers@npm:^6.4.0": + version: 6.9.0 + resolution: "ethers@npm:6.9.0" + dependencies: + "@adraffy/ens-normalize": 1.10.0 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@types/node": 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.5.0 + checksum: e7b3b912b92b818fe65a192b32f4dd87ce0b71f4ffc194b4b3764b4b17d3b6ed953b667293e4c9276f785fa8c8659934c513843350317c61178af8e6165afbdd + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.1 resolution: "exponential-backoff@npm:3.1.1" @@ -1623,6 +1967,13 @@ __metadata: languageName: node linkType: hard +"js-sdsl@npm:^4.1.4": + version: 4.4.2 + resolution: "js-sdsl@npm:4.4.2" + checksum: ba705adc1788bf3c6f6c8e5077824f2bb4f0acab5a984420ce5cc492c7fff3daddc26335ad2c9a67d4f5e3241ec790f9e5b72a625adcf20cf321d2fd85e62b8b + languageName: node + linkType: hard + "js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" @@ -1711,6 +2062,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.0.0": + version: 10.1.0 + resolution: "lru-cache@npm:10.1.0" + checksum: 58056d33e2500fbedce92f8c542e7c11b50d7d086578f14b7074d8c241422004af0718e08a6eaae8705cee09c77e39a61c1c79e9370ba689b7010c152e6a76ab + languageName: node + linkType: hard + "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" @@ -2209,11 +2567,19 @@ __metadata: version: 0.0.0-use.local resolution: "reporter@workspace:." dependencies: + "@chainsafe/persistent-merkle-tree": ^0.6.1 + "@chainsafe/ssz": ^0.14.0 + "@ethereumjs/rlp": ^5.0.1 + "@ethereumjs/trie": ^6.0.1 + "@ethereumjs/util": ^9.0.1 + "@ethereumjs/vm": ^7.1.0 + "@lodestar/types": ^1.12.0 "@types/node": ^20.8.9 "@types/node-cron": ^3.0.9 "@typescript-eslint/eslint-plugin": ^6.7.5 "@typescript-eslint/parser": ^6.7.5 async-mutex: ^0.4.0 + async-retry: ^1.3.3 axios: ^1.5.1 dotenv: ^16.3.1 eslint: ^8.51.0 @@ -2234,6 +2600,13 @@ __metadata: languageName: node linkType: hard +"retry@npm:0.13.1": + version: 0.13.1 + resolution: "retry@npm:0.13.1" + checksum: 47c4d5be674f7c13eee4cfe927345023972197dbbdfba5d3af7e461d13b44de1bfd663bfc80d2f601f8ef3fc8164c16dd99655a221921954a65d044a2fc1233b + languageName: node + linkType: hard + "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -2268,6 +2641,22 @@ __metadata: languageName: node linkType: hard +"rustbn-wasm@npm:^0.2.0": + version: 0.2.0 + resolution: "rustbn-wasm@npm:0.2.0" + dependencies: + "@scure/base": ^1.1.1 + checksum: 9cf89ce88a9d161bce8ea2516b3037fe97e1debb2e9b86d6f3cd133e2c120c844644d37c61c27ae00475e49595a397e61559431875a61c5c52a04c40ba658872 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + "safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" @@ -2582,6 +2971,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:2.4.0": + version: 2.4.0 + resolution: "tslib@npm:2.4.0" + checksum: 8c4aa6a3c5a754bf76aefc38026134180c053b7bd2f81338cb5e5ebf96fefa0f417bff221592bf801077f5bf990562f6264fecbc42cd3309b33872cb6fc3b113 + languageName: node + linkType: hard + "tslib@npm:^2.4.0": version: 2.6.2 resolution: "tslib@npm:2.6.2" @@ -2795,6 +3191,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:8.5.0": + version: 8.5.0 + resolution: "ws@npm:8.5.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 76f2f90e40344bf18fd544194e7067812fb1372b2a37865678d8f12afe4b478ff2ebc0c7c0aff82cd5e6b66fc43d889eec0f1865c2365d8f7a66d92da7744a77 + languageName: node + linkType: hard + "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0" diff --git a/yarn.lock b/yarn.lock index e0311ba7..5064f157 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6,41 +6,42 @@ __metadata: cacheKey: 8 "@babel/code-frame@npm:^7.0.0": - version: 7.21.4 - resolution: "@babel/code-frame@npm:7.21.4" + version: 7.23.5 + resolution: "@babel/code-frame@npm:7.23.5" dependencies: - "@babel/highlight": ^7.18.6 - checksum: e5390e6ec1ac58dcef01d4f18eaf1fd2f1325528661ff6d4a5de8979588b9f5a8e852a54a91b923846f7a5c681b217f0a45c2524eb9560553160cd963b7d592c + "@babel/highlight": ^7.23.4 + chalk: ^2.4.2 + checksum: d90981fdf56a2824a9b14d19a4c0e8db93633fd488c772624b4e83e0ceac6039a27cd298a247c3214faa952bf803ba23696172ae7e7235f3b97f43ba278c569a languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.18.6": - version: 7.19.1 - resolution: "@babel/helper-validator-identifier@npm:7.19.1" - checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a +"@babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc languageName: node linkType: hard -"@babel/highlight@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/highlight@npm:7.18.6" +"@babel/highlight@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/highlight@npm:7.23.4" dependencies: - "@babel/helper-validator-identifier": ^7.18.6 - chalk: ^2.0.0 + "@babel/helper-validator-identifier": ^7.22.20 + chalk: ^2.4.2 js-tokens: ^4.0.0 - checksum: 92d8ee61549de5ff5120e945e774728e5ccd57fd3b2ed6eace020ec744823d4a98e242be1453d21764a30a14769ecd62170fba28539b211799bbaf232bbb2789 + checksum: 643acecdc235f87d925979a979b539a5d7d1f31ae7db8d89047269082694122d11aa85351304c9c978ceeb6d250591ccadb06c366f358ccee08bb9c122476b89 languageName: node linkType: hard "@commitlint/cli@npm:^17.5.1": - version: 17.5.1 - resolution: "@commitlint/cli@npm:17.5.1" - dependencies: - "@commitlint/format": ^17.4.4 - "@commitlint/lint": ^17.4.4 - "@commitlint/load": ^17.5.0 - "@commitlint/read": ^17.5.1 - "@commitlint/types": ^17.4.4 + version: 17.8.1 + resolution: "@commitlint/cli@npm:17.8.1" + dependencies: + "@commitlint/format": ^17.8.1 + "@commitlint/lint": ^17.8.1 + "@commitlint/load": ^17.8.1 + "@commitlint/read": ^17.8.1 + "@commitlint/types": ^17.8.1 execa: ^5.0.0 lodash.isfunction: ^3.0.9 resolve-from: 5.0.0 @@ -48,91 +49,91 @@ __metadata: yargs: ^17.0.0 bin: commitlint: cli.js - checksum: 2bdd26b3215796dccb16b0d7459d3b0db7f6324800aa73b97a8cdf79b77f3691d85ee88f37fa6cf20c97ac664f31dcb6ad7aef1da3c3b32d7bb12f18d49a37f2 + checksum: 293d5868e2f586a9ac5364c40eeb0fe2131ea689312c43d43ababe6f2415c998619c5070cf89e7298125a1d96b9e5912b85f51db75aedbfb189d67554f911dbf languageName: node linkType: hard "@commitlint/config-conventional@npm:^17.4.4": - version: 17.4.4 - resolution: "@commitlint/config-conventional@npm:17.4.4" + version: 17.8.1 + resolution: "@commitlint/config-conventional@npm:17.8.1" dependencies: - conventional-changelog-conventionalcommits: ^5.0.0 - checksum: 679d92509fe6e53ee0cc4202f8069d88360c4f9dbd7ab74114bb28278a196da517ef711dfe69893033a66e54ffc29e8df2ccf63cfd746a89c82a053949473c4b + conventional-changelog-conventionalcommits: ^6.1.0 + checksum: ce8ace1a13f3a797ed699ffa13dc46273a27e1dc3ae8a9d01492c0637a8592e4ed24bb32d9a43f8745a8690a52d77ea4a950d039977b0dbcbf834f8cbacf5def languageName: node linkType: hard -"@commitlint/config-validator@npm:^17.4.4": - version: 17.4.4 - resolution: "@commitlint/config-validator@npm:17.4.4" +"@commitlint/config-validator@npm:^17.8.1": + version: 17.8.1 + resolution: "@commitlint/config-validator@npm:17.8.1" dependencies: - "@commitlint/types": ^17.4.4 + "@commitlint/types": ^17.8.1 ajv: ^8.11.0 - checksum: 71ee818608ed5c74832cdd63531c0f61b21758fba9f8b876205485ece4f047c9582bc3f323a20a5de700e3451296614d15448437270a82194eff7d71317b47ff + checksum: 487051cc36a82ba50f217dfd26721f4fa26d8c4206ee5cb0debd2793aa950280f3ca5bd1a8738e9c71ca8508b58548918b43169c21219ca4cb67f5dcd1e49d9f languageName: node linkType: hard -"@commitlint/ensure@npm:^17.4.4": - version: 17.4.4 - resolution: "@commitlint/ensure@npm:17.4.4" +"@commitlint/ensure@npm:^17.8.1": + version: 17.8.1 + resolution: "@commitlint/ensure@npm:17.8.1" dependencies: - "@commitlint/types": ^17.4.4 + "@commitlint/types": ^17.8.1 lodash.camelcase: ^4.3.0 lodash.kebabcase: ^4.1.1 lodash.snakecase: ^4.1.1 lodash.startcase: ^4.4.0 lodash.upperfirst: ^4.3.1 - checksum: c21c189f22d8d3265e93256d101b72ef7cbdf8660438081799b9a4a8bd47d33133f250bbed858ab9bcc0d249d1c95ac58eddd9e5b46314d64ff049d0479d0d71 + checksum: a4a5d3071df0e52dad0293c649c236f070c4fcd3380f11747a6f9b06b036adea281e557d117156e31313fbe18a7d71bf06e05e92776adbde7867190e1735bc43 languageName: node linkType: hard -"@commitlint/execute-rule@npm:^17.4.0": - version: 17.4.0 - resolution: "@commitlint/execute-rule@npm:17.4.0" - checksum: 17d8e56ab00bd45fdecb0ed33186d2020ce261250d6a516204b6509610b75af8c930e7226b1111af3de298db32a7e4d0ba2c9cc7ed67db5ba5159eeed634f067 +"@commitlint/execute-rule@npm:^17.8.1": + version: 17.8.1 + resolution: "@commitlint/execute-rule@npm:17.8.1" + checksum: 73354b5605931a71f727ee0262a5509277e92f134e2d704d44eafe4da7acb1cd2c7d084dcf8096cc0ac7ce83b023cc0ae8f79b17487b132ccc2e0b3920105a11 languageName: node linkType: hard -"@commitlint/format@npm:^17.4.4": - version: 17.4.4 - resolution: "@commitlint/format@npm:17.4.4" +"@commitlint/format@npm:^17.8.1": + version: 17.8.1 + resolution: "@commitlint/format@npm:17.8.1" dependencies: - "@commitlint/types": ^17.4.4 + "@commitlint/types": ^17.8.1 chalk: ^4.1.0 - checksum: 832d9641129f2da8d32389b4a47db59d41eb1adfab742723972cad64b833c4af9e253f96757b27664fedae61644dd4c01d21f775773b45b604bd7f93b23a27d2 + checksum: 0481e4d49196c942d7723a1abd352c3c884ceb9f434fb4e64bfab71bc264e9b7c643a81069f20d2a035fca70261a472508d73b1a60fe378c60534ca6301408b6 languageName: node linkType: hard -"@commitlint/is-ignored@npm:^17.4.4": - version: 17.4.4 - resolution: "@commitlint/is-ignored@npm:17.4.4" +"@commitlint/is-ignored@npm:^17.8.1": + version: 17.8.1 + resolution: "@commitlint/is-ignored@npm:17.8.1" dependencies: - "@commitlint/types": ^17.4.4 - semver: 7.3.8 - checksum: 716631ecd6aece8642d76c1a99e1cdc24bad79f22199d1d4bad73d9b12edb3578ed7d6f23947ca28d4bb637e08a1738e55dd693c165a2d395c10560a988ffc05 + "@commitlint/types": ^17.8.1 + semver: 7.5.4 + checksum: 26eb2f1a84a774625f3f6fe4fa978c57d81028ee6a6925ab3fb02981ac395f9584ab4a71af59c3f2ac84a06c775e3f52683c033c565d86271a7aa99c2eb6025c languageName: node linkType: hard -"@commitlint/lint@npm:^17.4.4": - version: 17.4.4 - resolution: "@commitlint/lint@npm:17.4.4" +"@commitlint/lint@npm:^17.8.1": + version: 17.8.1 + resolution: "@commitlint/lint@npm:17.8.1" dependencies: - "@commitlint/is-ignored": ^17.4.4 - "@commitlint/parse": ^17.4.4 - "@commitlint/rules": ^17.4.4 - "@commitlint/types": ^17.4.4 - checksum: bf04a9f9a1435e0d3cd03c58b6bf924613d0278b66b0a5d0e18eb96c7af9eeb02871e739a4d7d9312b2b4178f6f8ae9a49ba74382b4e28f623e1bf0af7067946 + "@commitlint/is-ignored": ^17.8.1 + "@commitlint/parse": ^17.8.1 + "@commitlint/rules": ^17.8.1 + "@commitlint/types": ^17.8.1 + checksum: 025712ad928098b3f94d8dc38566785f6c3eeba799725dbd935c5514141ea77b01e036fed1dbbf60cc954736f706ddbb85339751c43f16f5f3f94170d1decb2a languageName: node linkType: hard -"@commitlint/load@npm:^17.5.0": - version: 17.5.0 - resolution: "@commitlint/load@npm:17.5.0" +"@commitlint/load@npm:^17.8.1": + version: 17.8.1 + resolution: "@commitlint/load@npm:17.8.1" dependencies: - "@commitlint/config-validator": ^17.4.4 - "@commitlint/execute-rule": ^17.4.0 - "@commitlint/resolve-extends": ^17.4.4 - "@commitlint/types": ^17.4.4 - "@types/node": "*" + "@commitlint/config-validator": ^17.8.1 + "@commitlint/execute-rule": ^17.8.1 + "@commitlint/resolve-extends": ^17.8.1 + "@commitlint/types": ^17.8.1 + "@types/node": 20.5.1 chalk: ^4.1.0 cosmiconfig: ^8.0.0 cosmiconfig-typescript-loader: ^4.0.0 @@ -141,91 +142,91 @@ __metadata: lodash.uniq: ^4.5.0 resolve-from: ^5.0.0 ts-node: ^10.8.1 - typescript: ^4.6.4 || ^5.0.0 - checksum: c039114b0ad67bb9d8b05ec635d847bd5ab760528f0fb203411f433585bdab5472f4f5c7856dfc417cf64c05576f54c1afc4997a813f529304e0156bfc1d6cc8 + typescript: ^4.6.4 || ^5.2.2 + checksum: 5a9a9f0d4621a4cc61c965c3adc88d04ccac40640b022bb3bbad70ed4435bb0c103647a2e29e37fc3d68021dae041c937bee611fe2e5461bebe997640f4f626b languageName: node linkType: hard -"@commitlint/message@npm:^17.4.2": - version: 17.4.2 - resolution: "@commitlint/message@npm:17.4.2" - checksum: 55b6cfeb57f7c9f913e18821aa4d972a6b6faa78c62741390996151f99554396f6df68ccfee86c163d24d8c27a4dbbcb50ef03c2972ab0a7a21d89daa2f9a519 +"@commitlint/message@npm:^17.8.1": + version: 17.8.1 + resolution: "@commitlint/message@npm:17.8.1" + checksum: ee3ca9bf02828ea322becba47c67f7585aa3fd22b197eab69679961e67e3c7bdf56f6ef41cb3b831b521af7dabd305eb5d7ee053c8294531cc8ca64dbbff82fc languageName: node linkType: hard -"@commitlint/parse@npm:^17.4.4": - version: 17.4.4 - resolution: "@commitlint/parse@npm:17.4.4" +"@commitlint/parse@npm:^17.8.1": + version: 17.8.1 + resolution: "@commitlint/parse@npm:17.8.1" dependencies: - "@commitlint/types": ^17.4.4 - conventional-changelog-angular: ^5.0.11 - conventional-commits-parser: ^3.2.2 - checksum: 2a6e5b0a5cdea21c879a3919a0227c0d7f3fa1f343808bcb09e3e7f25b0dc494dcca8af32982e7a65640b53c3e6cf138ebf685b657dd55173160bc0fa4e58916 + "@commitlint/types": ^17.8.1 + conventional-changelog-angular: ^6.0.0 + conventional-commits-parser: ^4.0.0 + checksum: 5322ae049b43a329761063b6e698714593d84d874147ced6290c8d88a9ebea2ba8c660a5815392a731377ac26fbf6b215bb9b87d84d8b49cb47fa1c62d228b24 languageName: node linkType: hard -"@commitlint/read@npm:^17.5.1": - version: 17.5.1 - resolution: "@commitlint/read@npm:17.5.1" +"@commitlint/read@npm:^17.8.1": + version: 17.8.1 + resolution: "@commitlint/read@npm:17.8.1" dependencies: - "@commitlint/top-level": ^17.4.0 - "@commitlint/types": ^17.4.4 + "@commitlint/top-level": ^17.8.1 + "@commitlint/types": ^17.8.1 fs-extra: ^11.0.0 git-raw-commits: ^2.0.11 minimist: ^1.2.6 - checksum: 62ee4f7a47b22a8571ae313bca36b418805a248f4986557f38f06317c44b6d18072889f95e7bc22bbb33a2f2b08236f74596ff28e3dbd0894249477a9df367c3 + checksum: 122f1842cb8b87b2c447383095420d077dcae6fbb4f871f8b05fa088f99d95d18a8c6675be2eb3e67bf7ff47a9990764261e3eebc5e474404f14e3379f48df42 languageName: node linkType: hard -"@commitlint/resolve-extends@npm:^17.4.4": - version: 17.4.4 - resolution: "@commitlint/resolve-extends@npm:17.4.4" +"@commitlint/resolve-extends@npm:^17.8.1": + version: 17.8.1 + resolution: "@commitlint/resolve-extends@npm:17.8.1" dependencies: - "@commitlint/config-validator": ^17.4.4 - "@commitlint/types": ^17.4.4 + "@commitlint/config-validator": ^17.8.1 + "@commitlint/types": ^17.8.1 import-fresh: ^3.0.0 lodash.mergewith: ^4.6.2 resolve-from: ^5.0.0 resolve-global: ^1.0.0 - checksum: d7bf1ff1ad3db8750421b252d79cf7b96cf07d72cad8cc3f73c1363a8e68c0afde611d38ae6f213bbb54e3248160c6b9425578f3d0f8f790e84aea811d748b3e + checksum: c6fb7d3f263b876ff805396abad27bc514b1a69dcc634903c28782f4f3932eddc37221daa3264a45a5b82d28aa17a57c7bab4830c6efae741cc875f137366608 languageName: node linkType: hard -"@commitlint/rules@npm:^17.4.4": - version: 17.4.4 - resolution: "@commitlint/rules@npm:17.4.4" +"@commitlint/rules@npm:^17.8.1": + version: 17.8.1 + resolution: "@commitlint/rules@npm:17.8.1" dependencies: - "@commitlint/ensure": ^17.4.4 - "@commitlint/message": ^17.4.2 - "@commitlint/to-lines": ^17.4.0 - "@commitlint/types": ^17.4.4 + "@commitlint/ensure": ^17.8.1 + "@commitlint/message": ^17.8.1 + "@commitlint/to-lines": ^17.8.1 + "@commitlint/types": ^17.8.1 execa: ^5.0.0 - checksum: f36525f6e234df6a17d47457b733a1fc10e3e01db1aa6fb45b18cbaf74b7915f634ab65f73d2412787137c366046f8264126c2f21ad9023ac6b68ec8b1cee8f4 + checksum: b284514a4b8dad6bcbbc91c7548d69d0bbe9fcbdb241c15f5f9da413e8577c19d11190f1d709b38487c49dc874359bd9d0b72ab39f91cce06191e4ddaf8ec84d languageName: node linkType: hard -"@commitlint/to-lines@npm:^17.4.0": - version: 17.4.0 - resolution: "@commitlint/to-lines@npm:17.4.0" - checksum: 841f90f606238e145ab4ba02940662d511fc04fe553619900152a8542170fe664031b95d820ffaeb8864d4851344278e662ef29637d763fc19fd828e0f8d139b +"@commitlint/to-lines@npm:^17.8.1": + version: 17.8.1 + resolution: "@commitlint/to-lines@npm:17.8.1" + checksum: ff175c202c89537301f32b6e13ebe6919ac782a6e109cb5f6136566d71555a54f6574caf4d674d3409d32fdea1b4a28518837632ca05c7557d4f18f339574e62 languageName: node linkType: hard -"@commitlint/top-level@npm:^17.4.0": - version: 17.4.0 - resolution: "@commitlint/top-level@npm:17.4.0" +"@commitlint/top-level@npm:^17.8.1": + version: 17.8.1 + resolution: "@commitlint/top-level@npm:17.8.1" dependencies: find-up: ^5.0.0 - checksum: 14cd77e982d2dd7989718dafdbf7a2168a5fb387005e0686c2dfa9ffc36bb9a749e5d80a151884459e4d8c88564339688dca26e9c711abe043beeb3f30c3dfd6 + checksum: 25c8a6f4026c705a5ad4d9358eae7558734f549623da1c5f44cba8d6bc495f20d3ad05418febb8dca4f6b63f40bf44763007a14ab7209c435566843be114e7fc languageName: node linkType: hard -"@commitlint/types@npm:^17.4.4": - version: 17.4.4 - resolution: "@commitlint/types@npm:17.4.4" +"@commitlint/types@npm:^17.8.1": + version: 17.8.1 + resolution: "@commitlint/types@npm:17.8.1" dependencies: chalk: ^4.1.0 - checksum: 03c52429052d161710896d198000196bd2e60be0fd71459b22133dd83dee43e8d05ea8ee703c8369823bc40f77a54881b80d8aa4368ac52aea7f30fb234b73d2 + checksum: a4cfa8c417aa0209694b96da04330282e41150caae1e1d0cec596ea34e3ce15afb84b3263abe5b89758ec1f3f71a9de0ee2d593df66db17b283127dd5e7cd6ac languageName: node linkType: hard @@ -239,16 +240,16 @@ __metadata: linkType: hard "@jridgewell/resolve-uri@npm:^3.0.3": - version: 3.1.0 - resolution: "@jridgewell/resolve-uri@npm:3.1.0" - checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 languageName: node linkType: hard "@jridgewell/sourcemap-codec@npm:^1.4.10": - version: 1.4.14 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" - checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 languageName: node linkType: hard @@ -262,12 +263,12 @@ __metadata: languageName: node linkType: hard -"@solidity-parser/parser@npm:^0.16.0": - version: 0.16.0 - resolution: "@solidity-parser/parser@npm:0.16.0" +"@solidity-parser/parser@npm:^0.16.2": + version: 0.16.2 + resolution: "@solidity-parser/parser@npm:0.16.2" dependencies: antlr4ts: ^0.5.0-alpha.4 - checksum: 6ccbdab334331a58fde2a739cff76d5a99d836186b7899e8e027266f2af2a4bddc77c9c2abd01307cea6c470345d48edc470049e9672143b73f4aff3c8976183 + checksum: 109f7bec5de943c63e444fdde179d9bba6a592c18c836f585753798f428424cfcca72c715e7a345e4b79b83d6548543c9e56cb4b263e9b1e8352af2efcfd224a languageName: node linkType: hard @@ -293,34 +294,34 @@ __metadata: linkType: hard "@tsconfig/node16@npm:^1.0.2": - version: 1.0.3 - resolution: "@tsconfig/node16@npm:1.0.3" - checksum: 3a8b657dd047495b7ad23437d6afd20297ce90380ff0bdee93fc7d39a900dbd8d9e26e53ff6b465e7967ce2adf0b218782590ce9013285121e6a5928fbd6819f + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff languageName: node linkType: hard "@types/minimist@npm:^1.2.0": - version: 1.2.2 - resolution: "@types/minimist@npm:1.2.2" - checksum: b8da83c66eb4aac0440e64674b19564d9d86c80ae273144db9681e5eeff66f238ade9515f5006ffbfa955ceff8b89ad2bd8ec577d7caee74ba101431fb07045d + version: 1.2.5 + resolution: "@types/minimist@npm:1.2.5" + checksum: 477047b606005058ab0263c4f58097136268007f320003c348794f74adedc3166ffc47c80ec3e94687787f2ab7f4e72c468223946e79892cf0fd9e25e9970a90 languageName: node linkType: hard -"@types/node@npm:*": - version: 18.15.11 - resolution: "@types/node@npm:18.15.11" - checksum: 977b4ad04708897ff0eb049ecf82246d210939c82461922d20f7d2dcfd81bbc661582ba3af28869210f7e8b1934529dcd46bff7d448551400f9d48b9d3bddec3 +"@types/node@npm:20.5.1": + version: 20.5.1 + resolution: "@types/node@npm:20.5.1" + checksum: 3dbe611cd67afa987102c8558ee70f848949c5dcfee5f60abc073e55c0d7b048e391bf06bb1e0dc052cb7210ca97136ac496cbaf6e89123c989de6bd125fde82 languageName: node linkType: hard "@types/normalize-package-data@npm:^2.4.0": - version: 2.4.1 - resolution: "@types/normalize-package-data@npm:2.4.1" - checksum: e87bccbf11f95035c89a132b52b79ce69a1e3652fe55962363063c9c0dae0fe2477ebc585e03a9652adc6f381d24ba5589cc5e51849df4ced3d3e004a7d40ed5 + version: 2.4.4 + resolution: "@types/normalize-package-data@npm:2.4.4" + checksum: 65dff72b543997b7be8b0265eca7ace0e34b75c3e5fee31de11179d08fa7124a7a5587265d53d0409532ecb7f7fba662c2012807963e1f9b059653ec2c83ee05 languageName: node linkType: hard -"JSONStream@npm:^1.0.4": +"JSONStream@npm:^1.3.5": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" dependencies: @@ -333,18 +334,18 @@ __metadata: linkType: hard "acorn-walk@npm:^8.1.1": - version: 8.2.0 - resolution: "acorn-walk@npm:8.2.0" - checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 + version: 8.3.1 + resolution: "acorn-walk@npm:8.3.1" + checksum: 5c8926ddb5400bc825b6baca782931f9df4ace603ba1a517f5243290fd9cdb089d52877840687b5d5c939591ebc314e2e63721514feaa37c6829c828f2b940ce languageName: node linkType: hard "acorn@npm:^8.4.1": - version: 8.8.2 - resolution: "acorn@npm:8.8.2" + version: 8.11.2 + resolution: "acorn@npm:8.11.2" bin: acorn: bin/acorn - checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 + checksum: 818450408684da89423e3daae24e4dc9b68692db8ab49ea4569c7c5abb7a3f23669438bf129cc81dfdada95e1c9b944ee1bfca2c57a05a4dc73834a612fbf6a7 languageName: node linkType: hard @@ -454,7 +455,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^2.0.0": +"chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -528,64 +529,64 @@ __metadata: languageName: node linkType: hard -"conventional-changelog-angular@npm:^5.0.11": - version: 5.0.13 - resolution: "conventional-changelog-angular@npm:5.0.13" +"conventional-changelog-angular@npm:^6.0.0": + version: 6.0.0 + resolution: "conventional-changelog-angular@npm:6.0.0" dependencies: compare-func: ^2.0.0 - q: ^1.5.1 - checksum: 6ed4972fce25a50f9f038c749cc9db501363131b0fb2efc1fccecba14e4b1c80651d0d758d4c350a609f32010c66fa343eefd49c02e79e911884be28f53f3f90 + checksum: ddc59ead53a45b817d83208200967f5340866782b8362d5e2e34105fdfa3d3a31585ebbdec7750bdb9de53da869f847e8ca96634a9801f51e27ecf4e7ffe2bad languageName: node linkType: hard -"conventional-changelog-conventionalcommits@npm:^5.0.0": - version: 5.0.0 - resolution: "conventional-changelog-conventionalcommits@npm:5.0.0" +"conventional-changelog-conventionalcommits@npm:^6.1.0": + version: 6.1.0 + resolution: "conventional-changelog-conventionalcommits@npm:6.1.0" dependencies: compare-func: ^2.0.0 - lodash: ^4.17.15 - q: ^1.5.1 - checksum: b67d12e4e0fdde5baa32c3d77af472de38646a18657b26f5543eecce041a318103092fbfcef247e2319a16957c9ac78c6ea78acc11a5db6acf74be79a28c561f + checksum: 4383a35cdf72f5964e194a1146e7f78276e301f73bd993b71627bb93586b6470d411b9613507ceb37e0fed0b023199c95e941541fa47172b4e6a7916fc3a53ff languageName: node linkType: hard -"conventional-commits-parser@npm:^3.2.2": - version: 3.2.4 - resolution: "conventional-commits-parser@npm:3.2.4" +"conventional-commits-parser@npm:^4.0.0": + version: 4.0.0 + resolution: "conventional-commits-parser@npm:4.0.0" dependencies: - JSONStream: ^1.0.4 + JSONStream: ^1.3.5 is-text-path: ^1.0.1 - lodash: ^4.17.15 - meow: ^8.0.0 - split2: ^3.0.0 - through2: ^4.0.0 + meow: ^8.1.2 + split2: ^3.2.2 bin: conventional-commits-parser: cli.js - checksum: 1627ff203bc9586d89e47a7fe63acecf339aba74903b9114e23d28094f79d4e2d6389bf146ae561461dcba8fc42e7bc228165d2b173f15756c43f1d32bc50bfd + checksum: 12d95b5ba8e0710a6d3cd2e01f01dd7818fdf0bb2b33f4b75444e2c9aee49598776b0706a528ed49e83aec5f1896c32cbc7f8e6589f61a15187293707448f928 languageName: node linkType: hard "cosmiconfig-typescript-loader@npm:^4.0.0": - version: 4.3.0 - resolution: "cosmiconfig-typescript-loader@npm:4.3.0" + version: 4.4.0 + resolution: "cosmiconfig-typescript-loader@npm:4.4.0" peerDependencies: "@types/node": "*" cosmiconfig: ">=7" ts-node: ">=10" - typescript: ">=3" - checksum: ea61dfd8e112cf2bb18df0ef89280bd3ae3dd5b997b4a9fc22bbabdc02513aadfbc6d4e15e922b6a9a5d987e9dad42286fa38caf77a9b8dcdbe7d4ce1c9db4fb + typescript: ">=4" + checksum: d6ba546de333f9440226ab2384a7b5355d8d2e278a9ca9d838664181bc27719764af10c69eec6f07189e63121e6d654235c374bd7dc455ac8dfdef3aad6657fd languageName: node linkType: hard "cosmiconfig@npm:^8.0.0": - version: 8.1.3 - resolution: "cosmiconfig@npm:8.1.3" + version: 8.3.6 + resolution: "cosmiconfig@npm:8.3.6" dependencies: - import-fresh: ^3.2.1 + import-fresh: ^3.3.0 js-yaml: ^4.1.0 - parse-json: ^5.0.0 + parse-json: ^5.2.0 path-type: ^4.0.0 - checksum: b3d277bc3a8a9e649bf4c3fc9740f4c52bf07387481302aa79839f595045368903bf26ea24a8f7f7b8b180bf46037b027c5cb63b1391ab099f3f78814a147b2b + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: dc339ebea427898c9e03bf01b56ba7afbac07fc7d2a2d5a15d6e9c14de98275a9565da949375aee1809591c152c0a3877bb86dbeaf74d5bd5aaa79955ad9e7a0 languageName: node linkType: hard @@ -722,20 +723,20 @@ __metadata: linkType: hard "fs-extra@npm:^11.0.0": - version: 11.1.1 - resolution: "fs-extra@npm:11.1.1" + version: 11.2.0 + resolution: "fs-extra@npm:11.2.0" dependencies: graceful-fs: ^4.2.0 jsonfile: ^6.0.1 universalify: ^2.0.0 - checksum: fb883c68245b2d777fbc1f2082c9efb084eaa2bbf9fddaa366130d196c03608eebef7fb490541276429ee1ca99f317e2d73e96f5ca0999eefedf5a624ae1edfd + checksum: b12e42fa40ba47104202f57b8480dd098aa931c2724565e5e70779ab87605665594e76ee5fb00545f772ab9ace167fe06d2ab009c416dc8c842c5ae6df7aa7e8 languageName: node linkType: hard -"function-bind@npm:^1.1.1": - version: 1.1.1 - resolution: "function-bind@npm:1.1.1" - checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 languageName: node linkType: hard @@ -805,15 +806,6 @@ __metadata: languageName: node linkType: hard -"has@npm:^1.0.3": - version: 1.0.3 - resolution: "has@npm:1.0.3" - dependencies: - function-bind: ^1.1.1 - checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 - languageName: node - linkType: hard - "hashi@workspace:.": version: 0.0.0-use.local resolution: "hashi@workspace:." @@ -826,6 +818,15 @@ __metadata: languageName: unknown linkType: soft +"hasown@npm:^2.0.0": + version: 2.0.0 + resolution: "hasown@npm:2.0.0" + dependencies: + function-bind: ^1.1.2 + checksum: 6151c75ca12554565098641c98a40f4cc86b85b0fd5b6fe92360967e4605a4f9610f7757260b4e8098dd1c2ce7f4b095f2006fe72a570e3b6d2d28de0298c176 + languageName: node + linkType: hard + "hosted-git-info@npm:^2.1.4": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" @@ -858,7 +859,7 @@ __metadata: languageName: node linkType: hard -"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": +"import-fresh@npm:^3.0.0, import-fresh@npm:^3.3.0": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" dependencies: @@ -896,12 +897,12 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.5.0, is-core-module@npm:^2.9.0": - version: 2.11.0 - resolution: "is-core-module@npm:2.11.0" +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.5.0": + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" dependencies: - has: ^1.0.3 - checksum: f96fd490c6b48eb4f6d10ba815c6ef13f410b0ba6f7eb8577af51697de523e5f2cd9de1c441b51d27251bf0e4aebc936545e33a5d26d5d51f28d25698d4a8bab + hasown: ^2.0.0 + checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c languageName: node linkType: hard @@ -1140,7 +1141,7 @@ __metadata: languageName: node linkType: hard -"meow@npm:^8.0.0": +"meow@npm:^8.0.0, meow@npm:^8.1.2": version: 8.1.2 resolution: "meow@npm:8.1.2" dependencies: @@ -1292,7 +1293,7 @@ __metadata: languageName: node linkType: hard -"parse-json@npm:^5.0.0": +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" dependencies: @@ -1333,38 +1334,31 @@ __metadata: linkType: hard "prettier-plugin-solidity@npm:^1.0.0": - version: 1.1.3 - resolution: "prettier-plugin-solidity@npm:1.1.3" + version: 1.2.0 + resolution: "prettier-plugin-solidity@npm:1.2.0" dependencies: - "@solidity-parser/parser": ^0.16.0 - semver: ^7.3.8 + "@solidity-parser/parser": ^0.16.2 + semver: ^7.5.4 solidity-comments-extractor: ^0.0.7 peerDependencies: - prettier: ">=2.3.0 || >=3.0.0-alpha.0" - checksum: d5aadfa411a4d983a2bd204048726fd91fbcaffbfa26d818ef0d6001fb65f82d0eae082e935e96c79e65e09ed979b186311ddb8c38be2f0ce5dd5f5265df77fe + prettier: ">=2.3.0" + checksum: 96dc9751a7393dfbfb1fcc08d662fd8e69df9ddf51ad70172e6915e86a61491f93f3051ea716deb50ae6023f50b64aa064ffef81224405fba92566124250edb2 languageName: node linkType: hard "prettier@npm:^2.8.7": - version: 2.8.7 - resolution: "prettier@npm:2.8.7" + version: 2.8.8 + resolution: "prettier@npm:2.8.8" bin: prettier: bin-prettier.js - checksum: fdc8f2616f099f5f0d685907f4449a70595a0fc1d081a88919604375989e0d5e9168d6121d8cc6861f21990b31665828e00472544d785d5940ea08a17660c3a6 + checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 languageName: node linkType: hard "punycode@npm:^2.1.0": - version: 2.3.0 - resolution: "punycode@npm:2.3.0" - checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 - languageName: node - linkType: hard - -"q@npm:^1.5.1": - version: 1.5.1 - resolution: "q@npm:1.5.1" - checksum: 147baa93c805bc1200ed698bdf9c72e9e42c05f96d007e33a558b5fdfd63e5ea130e99313f28efc1783e90e6bdb4e48b67a36fcc026b7b09202437ae88a1fb12 + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 languageName: node linkType: hard @@ -1457,28 +1451,28 @@ __metadata: linkType: hard "resolve@npm:^1.10.0": - version: 1.22.1 - resolution: "resolve@npm:1.22.1" + version: 1.22.8 + resolution: "resolve@npm:1.22.8" dependencies: - is-core-module: ^2.9.0 + is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 07af5fc1e81aa1d866cbc9e9460fbb67318a10fa3c4deadc35c3ad8a898ee9a71a86a65e4755ac3195e0ea0cfbe201eb323ebe655ce90526fd61917313a34e4e + checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c languageName: node linkType: hard "resolve@patch:resolve@^1.10.0#~builtin": - version: 1.22.1 - resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=07638b" dependencies: - is-core-module: ^2.9.0 + is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 5656f4d0bedcf8eb52685c1abdf8fbe73a1603bb1160a24d716e27a57f6cecbe2432ff9c89c2bd57542c3a7b9d14b1882b73bfe2e9d7849c9a4c0b8b39f02b8b + checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 languageName: node linkType: hard @@ -1490,33 +1484,22 @@ __metadata: linkType: hard "semver@npm:2 || 3 || 4 || 5": - version: 5.7.1 - resolution: "semver@npm:5.7.1" + version: 5.7.2 + resolution: "semver@npm:5.7.2" bin: - semver: ./bin/semver - checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 languageName: node linkType: hard -"semver@npm:7.3.8, semver@npm:^7.3.4": - version: 7.3.8 - resolution: "semver@npm:7.3.8" +"semver@npm:7.5.4, semver@npm:^7.3.4, semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" dependencies: lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: ba9c7cbbf2b7884696523450a61fee1a09930d888b7a8d7579025ad93d459b2d1949ee5bbfeb188b2be5f4ac163544c5e98491ad6152df34154feebc2cc337c1 - languageName: node - linkType: hard - -"semver@npm:^7.3.8": - version: 7.5.0 - resolution: "semver@npm:7.5.0" - dependencies: - lru-cache: ^6.0.0 - bin: - semver: bin/semver.js - checksum: 2d266937756689a76f124ffb4c1ea3e1bbb2b263219f90ada8a11aebebe1280b13bb76cca2ca96bdee3dbc554cbc0b24752eb895b2a51577aa644427e9229f2b + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 languageName: node linkType: hard @@ -1595,13 +1578,13 @@ __metadata: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.13 - resolution: "spdx-license-ids@npm:3.0.13" - checksum: 3469d85c65f3245a279fa11afc250c3dca96e9e847f2f79d57f466940c5bb8495da08a542646086d499b7f24a74b8d0b42f3fc0f95d50ff99af1f599f6360ad7 + version: 3.0.16 + resolution: "spdx-license-ids@npm:3.0.16" + checksum: 5cdaa85aaa24bd02f9353a2e357b4df0a4f205cb35655f3fd0a5674a4fb77081f28ffd425379214bc3be2c2b7593ce1215df6bcc75884aeee0a9811207feabe2 languageName: node linkType: hard -"split2@npm:^3.0.0": +"split2@npm:^3.0.0, split2@npm:^3.2.2": version: 3.2.2 resolution: "split2@npm:3.2.2" dependencies: @@ -1769,30 +1752,30 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^4.6.4 || ^5.0.0": - version: 5.0.3 - resolution: "typescript@npm:5.0.3" +"typescript@npm:^4.6.4 || ^5.2.2": + version: 5.3.3 + resolution: "typescript@npm:5.3.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 3cce0576d218cb4277ff8b6adfef1a706e9114a98b4261a38ad658a7642f1b274a8396394f6cbff8c0ba852996d7ed2e233e9b8431d5d55ac7c2f6fea645af02 + checksum: 2007ccb6e51bbbf6fde0a78099efe04dc1c3dfbdff04ca3b6a8bc717991862b39fd6126c0c3ebf2d2d98ac5e960bcaa873826bb2bb241f14277034148f41f6a2 languageName: node linkType: hard -"typescript@patch:typescript@^4.6.4 || ^5.0.0#~builtin": - version: 5.0.3 - resolution: "typescript@patch:typescript@npm%3A5.0.3#~builtin::version=5.0.3&hash=7ad353" +"typescript@patch:typescript@^4.6.4 || ^5.2.2#~builtin": + version: 5.3.3 + resolution: "typescript@patch:typescript@npm%3A5.3.3#~builtin::version=5.3.3&hash=7ad353" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 9ec0a8eed38d46cc2c8794555b7674e413604c56c159f71b8ff21ce7f17334a44127a68724cb2ef8221ff3b19369f8f05654e8a5266621d7d962aeed889bd630 + checksum: f61375590b3162599f0f0d5b8737877ac0a7bc52761dbb585d67e7b8753a3a4c42d9a554c4cc929f591ffcf3a2b0602f65ae3ce74714fd5652623a816862b610 languageName: node linkType: hard "universalify@npm:^2.0.0": - version: 2.0.0 - resolution: "universalify@npm:2.0.0" - checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 languageName: node linkType: hard @@ -1880,8 +1863,8 @@ __metadata: linkType: hard "yargs@npm:^17.0.0": - version: 17.7.1 - resolution: "yargs@npm:17.7.1" + version: 17.7.2 + resolution: "yargs@npm:17.7.2" dependencies: cliui: ^8.0.1 escalade: ^3.1.1 @@ -1890,7 +1873,7 @@ __metadata: string-width: ^4.2.3 y18n: ^5.0.5 yargs-parser: ^21.1.1 - checksum: 3d8a43c336a4942bc68080768664aca85c7bd406f018bad362fd255c41c8f4e650277f42fd65d543fce99e084124ddafee7bbfc1a5c6a8fda4cec78609dcf8d4 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a languageName: node linkType: hard From 11e7a86e460f6f41c796d473c6d9597e8161c178 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Thu, 7 Dec 2023 19:39:37 +0100 Subject: [PATCH 43/81] refactor(reporter): rm fs --- packages/reporter/src/utils/proofs.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/reporter/src/utils/proofs.ts b/packages/reporter/src/utils/proofs.ts index 3fa41b00..d1fdda7a 100644 --- a/packages/reporter/src/utils/proofs.ts +++ b/packages/reporter/src/utils/proofs.ts @@ -8,7 +8,6 @@ import { toHexString, fromHexString } from "@chainsafe/ssz" import { RLP } from "@ethereumjs/rlp" import { WalletClient, PublicClient, TransactionReceipt, Log } from "viem" import { Trie } from "@ethereumjs/trie" -import fs from "fs" const SLOTS_PER_HISTORICAL_ROOT = 8192 From 5993963229831d9b2083edcd70085876421174f6 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Thu, 7 Dec 2023 19:42:45 +0100 Subject: [PATCH 44/81] refactor(reporter): refactors getHeader --- packages/reporter/src/utils/proofs.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/reporter/src/utils/proofs.ts b/packages/reporter/src/utils/proofs.ts index d1fdda7a..77c17251 100644 --- a/packages/reporter/src/utils/proofs.ts +++ b/packages/reporter/src/utils/proofs.ts @@ -27,8 +27,7 @@ export const getState = async (_stateId: BeaconId, _client: AxiosInstance): Prom export const getHeader = async (_blockId: BeaconId, _client: AxiosInstance): Promise => { const { data } = await _client.get(`/eth/v1/beacon/headers/${toStringFromBeaconId(_blockId)}`) - const header = ssz.phase0.BeaconBlockHeader.fromJson(data.data.header.message) - return header + return ssz.phase0.BeaconBlockHeader.fromJson(data.data.header.message) } export const getReceiptsRootProof = async (_srcBlockId: BeaconId, _targetBlockId: BeaconId, _client: AxiosInstance) => { From b1a36392a9b3ade2be6bd60d8cd19cdbd74dbef9 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Wed, 10 Jul 2024 17:26:11 +0200 Subject: [PATCH 45/81] WIP: fix controllers to comply with hashi v0.2.0 --- packages/reporter/package.json | 2 +- .../src/ABIs/AMBReporterContractABI.json | 210 ++++++++++-- .../reporter/src/ABIs/ElectronAdapterABI.json | 30 +- .../src/ABIs/ElectronLightClientABI.json | 14 +- .../reporter/src/ABIs/HeaderStorageABI.json | 45 ++- ...CrossDomainMessengerHeaderReporterABI.json | 236 ++++++++++++- .../src/ABIs/StandardReporterContractABI.json | 155 ++++++++- .../src/ABIs/SygmaReporterContractABI.json | 318 +++++++++++++++--- .../src/ABIs/TelepathyAdapterABI.json | 208 +++++------- .../reporter/src/ABIs/WormholeAdapterABI.json | 210 +++++++----- .../src/ABIs/WormhomeHeaderReporterABI.json | 63 ---- .../src/ABIs/WormhomeReporterABI.json | 216 ++++++++++++ packages/reporter/src/MultiClient.ts | 2 +- .../src/controllers/AMBReporterController.ts | 13 +- .../controllers/SygmaReporterController.ts | 18 +- .../TelepathyReporterController.ts | 1 + .../controllers/WormholeReporterController.ts | 9 +- packages/reporter/src/index.ts | 2 - packages/reporter/src/settings/index.ts | 6 - packages/reporter/yarn.lock | 27 +- 20 files changed, 1336 insertions(+), 449 deletions(-) delete mode 100644 packages/reporter/src/ABIs/WormhomeHeaderReporterABI.json create mode 100644 packages/reporter/src/ABIs/WormhomeReporterABI.json diff --git a/packages/reporter/package.json b/packages/reporter/package.json index 02b1c133..61519dc8 100644 --- a/packages/reporter/package.json +++ b/packages/reporter/package.json @@ -36,7 +36,7 @@ "eslint-config-prettier": "^9.0.0", "nodemon": "^3.0.1", "prettier": "^3.0.3", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "typescript": "^5.2.2" } } diff --git a/packages/reporter/src/ABIs/AMBReporterContractABI.json b/packages/reporter/src/ABIs/AMBReporterContractABI.json index 2601c7eb..b9c1b8e4 100644 --- a/packages/reporter/src/ABIs/AMBReporterContractABI.json +++ b/packages/reporter/src/ABIs/AMBReporterContractABI.json @@ -2,26 +2,79 @@ { "inputs": [ { - "internalType": "contract IAMB", - "name": "_amb", + "internalType": "address", + "name": "headerStorage", + "type": "address" + }, + { + "internalType": "address", + "name": "yaho", "type": "address" }, { - "internalType": "contract HeaderStorage", - "name": "_headerStorage", + "internalType": "address", + "name": "amb", "type": "address" + }, + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gas", + "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expectedChainId", + "type": "uint256" + } + ], + "name": "InvalidToChainId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "expectedYaho", + "type": "address" + } + ], + "name": "NotYaho", + "type": "error" + }, { "anonymous": false, "inputs": [ { "indexed": true, - "internalType": "address", - "name": "emitter", + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "contract IAdapter", + "name": "adapter", "type": "address" }, { @@ -31,21 +84,52 @@ "type": "uint256" }, { - "indexed": true, + "indexed": false, "internalType": "bytes32", "name": "blockHeader", "type": "bytes32" } ], - "name": "HeaderReported", + "name": "BlockDispatched", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "messageId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "messageHash", + "type": "bytes32" + } + ], + "name": "MessageDispatched", "type": "event" }, { "inputs": [], - "name": "amb", + "name": "AMB", "outputs": [ { - "internalType": "contract IAMB", + "internalType": "address", "name": "", "type": "address" } @@ -55,10 +139,62 @@ }, { "inputs": [], - "name": "headerStorage", + "name": "GAS", "outputs": [ { - "internalType": "contract HeaderStorage", + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "HEADER_STORAGE", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROVIDER", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TARGET_CHAIN_ID", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "YAHO", + "outputs": [ + { + "internalType": "address", "name": "", "type": "address" } @@ -68,31 +204,65 @@ }, { "inputs": [ + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, { "internalType": "uint256[]", "name": "blockNumbers", "type": "uint256[]" + } + ], + "name": "dispatchBlocks", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" }, { - "internalType": "address", - "name": "ambAdapter", + "internalType": "contract IAdapter", + "name": "adapter", "type": "address" }, { - "internalType": "uint256", - "name": "gas", - "type": "uint256" + "internalType": "uint256[]", + "name": "messageIds", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "messageHashes", + "type": "bytes32[]" } ], - "name": "reportHeaders", + "name": "dispatchMessages", "outputs": [ { "internalType": "bytes32", - "name": "receipt", + "name": "", "type": "bytes32" } ], - "stateMutability": "nonpayable", + "stateMutability": "payable", "type": "function" } ] diff --git a/packages/reporter/src/ABIs/ElectronAdapterABI.json b/packages/reporter/src/ABIs/ElectronAdapterABI.json index f42cd269..159d376a 100644 --- a/packages/reporter/src/ABIs/ElectronAdapterABI.json +++ b/packages/reporter/src/ABIs/ElectronAdapterABI.json @@ -29,7 +29,7 @@ }, { "internalType": "bytes32", - "name": "reportedBlockHash", + "name": "blockHash", "type": "bytes32" }, { @@ -105,7 +105,7 @@ { "indexed": true, "internalType": "bytes32", - "name": "hashes", + "name": "hash", "type": "bytes32" } ], @@ -183,31 +183,7 @@ "type": "uint256" } ], - "name": "getHashFromOracle", - "outputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "hashes", + "name": "getHash", "outputs": [ { "internalType": "bytes32", diff --git a/packages/reporter/src/ABIs/ElectronLightClientABI.json b/packages/reporter/src/ABIs/ElectronLightClientABI.json index 24ee582b..95ec605f 100644 --- a/packages/reporter/src/ABIs/ElectronLightClientABI.json +++ b/packages/reporter/src/ABIs/ElectronLightClientABI.json @@ -1,14 +1,20 @@ [ { - "inputs": [], - "name": "head", - "outputs": [ + "inputs": [ { "internalType": "uint256", - "name": "", + "name": "slot", "type": "uint256" } ], + "name": "headers", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], "stateMutability": "view", "type": "function" } diff --git a/packages/reporter/src/ABIs/HeaderStorageABI.json b/packages/reporter/src/ABIs/HeaderStorageABI.json index 94234d20..7810c996 100644 --- a/packages/reporter/src/ABIs/HeaderStorageABI.json +++ b/packages/reporter/src/ABIs/HeaderStorageABI.json @@ -1,11 +1,6 @@ [ { "inputs": [ - { - "internalType": "address", - "name": "emitter", - "type": "address" - }, { "internalType": "uint256", "name": "blockNumber", @@ -34,6 +29,25 @@ "name": "HeaderStored", "type": "event" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "headers", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -46,11 +60,30 @@ "outputs": [ { "internalType": "bytes32", - "name": "blockHeader", + "name": "", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + } + ], + "name": "storeBlockHeaders", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" } ] diff --git a/packages/reporter/src/ABIs/L1CrossDomainMessengerHeaderReporterABI.json b/packages/reporter/src/ABIs/L1CrossDomainMessengerHeaderReporterABI.json index f3e794f6..6553392d 100644 --- a/packages/reporter/src/ABIs/L1CrossDomainMessengerHeaderReporterABI.json +++ b/packages/reporter/src/ABIs/L1CrossDomainMessengerHeaderReporterABI.json @@ -1,19 +1,249 @@ [ { "inputs": [ + { + "internalType": "address", + "name": "headerStorage", + "type": "address" + }, + { + "internalType": "address", + "name": "yaho", + "type": "address" + }, + { + "internalType": "address", + "name": "l1CrossDomainMessenger", + "type": "address" + }, + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expectedChainId", + "type": "uint256" + } + ], + "name": "InvalidToChainId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "expectedYaho", + "type": "address" + } + ], + "name": "NotYaho", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "blockHeader", + "type": "bytes32" + } + ], + "name": "BlockDispatched", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "messageId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "messageHash", + "type": "bytes32" + } + ], + "name": "MessageDispatched", + "type": "event" + }, + { + "inputs": [], + "name": "HEADER_STORAGE", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "L1_CROSS_DOMAIN_MESSENGER", + "outputs": [ + { + "internalType": "contract ICrossDomainMessenger", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROVIDER", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TARGET_CHAIN_ID", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "YAHO", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, { "internalType": "uint256[]", "name": "blockNumbers", "type": "uint256[]" + } + ], + "name": "dispatchBlocks", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" }, { - "internalType": "address", + "internalType": "contract IAdapter", "name": "adapter", "type": "address" + }, + { + "internalType": "uint256[]", + "name": "messageIds", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "messageHashes", + "type": "bytes32[]" + } + ], + "name": "dispatchMessages", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" } ], - "name": "reportHeaders", - "outputs": [], "stateMutability": "payable", "type": "function" } diff --git a/packages/reporter/src/ABIs/StandardReporterContractABI.json b/packages/reporter/src/ABIs/StandardReporterContractABI.json index f3e794f6..c89a25b3 100644 --- a/packages/reporter/src/ABIs/StandardReporterContractABI.json +++ b/packages/reporter/src/ABIs/StandardReporterContractABI.json @@ -1,19 +1,168 @@ [ { "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "expectedYaho", + "type": "address" + } + ], + "name": "NotYaho", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "blockHeader", + "type": "bytes32" + } + ], + "name": "BlockDispatched", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "messageId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "messageHash", + "type": "bytes32" + } + ], + "name": "MessageDispatched", + "type": "event" + }, + { + "inputs": [], + "name": "HEADER_STORAGE", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "YAHO", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, { "internalType": "uint256[]", "name": "blockNumbers", "type": "uint256[]" + } + ], + "name": "dispatchBlocks", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" }, { - "internalType": "address", + "internalType": "contract IAdapter", "name": "adapter", "type": "address" + }, + { + "internalType": "uint256[]", + "name": "messageIds", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "messageHashes", + "type": "bytes32[]" + } + ], + "name": "dispatchMessages", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" } ], - "name": "reportHeaders", - "outputs": [], "stateMutability": "payable", "type": "function" } diff --git a/packages/reporter/src/ABIs/SygmaReporterContractABI.json b/packages/reporter/src/ABIs/SygmaReporterContractABI.json index b05640d1..a69d67e3 100644 --- a/packages/reporter/src/ABIs/SygmaReporterContractABI.json +++ b/packages/reporter/src/ABIs/SygmaReporterContractABI.json @@ -2,41 +2,63 @@ { "inputs": [ { - "internalType": "contract IBridge", - "name": "bridge", + "internalType": "address", + "name": "headerStorage", "type": "address" }, { - "internalType": "contract HeaderStorage", - "name": "headerStorage", + "internalType": "address", + "name": "yaho", "type": "address" }, { - "internalType": "bytes32", - "name": "resourceID", - "type": "bytes32" - }, + "internalType": "address", + "name": "bridge", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "DomainIdNotAvailable", + "type": "error" + }, + { + "inputs": [ { - "internalType": "uint8", - "name": "defaultDestinationDomainID", - "type": "uint8" + "internalType": "address", + "name": "sender", + "type": "address" }, { "internalType": "address", - "name": "defaultSygmaAdapter", + "name": "expectedYaho", "type": "address" } ], - "stateMutability": "nonpayable", - "type": "constructor" + "name": "NotYaho", + "type": "error" + }, + { + "inputs": [], + "name": "ResourceIdNotAvailable", + "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, - "internalType": "address", - "name": "emitter", + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "contract IAdapter", + "name": "adapter", "type": "address" }, { @@ -46,64 +68,106 @@ "type": "uint256" }, { - "indexed": true, + "indexed": false, "internalType": "bytes32", "name": "blockHeader", "type": "bytes32" } ], - "name": "HeaderReported", + "name": "BlockDispatched", "type": "event" }, { + "anonymous": false, "inputs": [ { - "internalType": "uint256[]", - "name": "blockNumbers", - "type": "uint256[]" + "indexed": true, + "internalType": "uint256", + "name": "chainId", + "type": "uint256" }, { - "internalType": "bytes", - "name": "feeData", - "type": "bytes" + "indexed": true, + "internalType": "uint8", + "name": "domainId", + "type": "uint8" } ], - "name": "reportHeaders", - "outputs": [], - "stateMutability": "payable", - "type": "function" + "name": "DomainIdSet", + "type": "event" }, { + "anonymous": false, "inputs": [ { - "internalType": "uint256[]", - "name": "blockNumbers", - "type": "uint256[]" + "indexed": true, + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" }, { + "indexed": false, + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "messageId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "messageHash", + "type": "bytes32" + } + ], + "name": "MessageDispatched", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, "internalType": "address", - "name": "sygmaAdapter", + "name": "previousOwner", "type": "address" }, { - "internalType": "uint8", - "name": "destinationDomainID", - "type": "uint8" + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "chainId", + "type": "uint256" }, { - "internalType": "bytes", - "name": "feeData", - "type": "bytes" + "indexed": true, + "internalType": "bytes32", + "name": "resourceId", + "type": "bytes32" } ], - "name": "reportHeadersToDomain", - "outputs": [], - "stateMutability": "payable", - "type": "function" + "name": "ResourceIdSet", + "type": "event" }, { "inputs": [], - "name": "_bridge", + "name": "BRIDGE", "outputs": [ { "internalType": "contract IBridge", @@ -116,12 +180,12 @@ }, { "inputs": [], - "name": "_defaultDestinationDomainID", + "name": "HEADER_STORAGE", "outputs": [ { - "internalType": "uint8", + "internalType": "address", "name": "", - "type": "uint8" + "type": "address" } ], "stateMutability": "view", @@ -129,12 +193,12 @@ }, { "inputs": [], - "name": "_defaultSygmaAdapter", + "name": "PROVIDER", "outputs": [ { - "internalType": "address", + "internalType": "string", "name": "", - "type": "address" + "type": "string" } ], "stateMutability": "view", @@ -142,10 +206,10 @@ }, { "inputs": [], - "name": "_headerStorage", + "name": "YAHO", "outputs": [ { - "internalType": "contract HeaderStorage", + "internalType": "address", "name": "", "type": "address" } @@ -154,8 +218,58 @@ "type": "function" }, { - "inputs": [], - "name": "_resourceID", + "inputs": [ + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + } + ], + "name": "dispatchBlocks", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "messageIds", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "messageHashes", + "type": "bytes32[]" + } + ], + "name": "dispatchMessages", "outputs": [ { "internalType": "bytes32", @@ -163,6 +277,38 @@ "type": "bytes32" } ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "domainIds", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], "stateMutability": "view", "type": "function" }, @@ -170,12 +316,12 @@ "inputs": [ { "internalType": "uint256[]", - "name": "blockNumbers", + "name": "messageIds", "type": "uint256[]" }, { "internalType": "bytes32[]", - "name": "blockHeaders", + "name": "hashes", "type": "bytes32[]" } ], @@ -190,6 +336,55 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "resourceIds", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "domainId", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "resourceId", + "type": "bytes32" + } + ], + "name": "setDomainIdAndResourceIdByChainId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -213,5 +408,18 @@ ], "stateMutability": "pure", "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } ] diff --git a/packages/reporter/src/ABIs/TelepathyAdapterABI.json b/packages/reporter/src/ABIs/TelepathyAdapterABI.json index 805ab0d5..83723f1e 100644 --- a/packages/reporter/src/ABIs/TelepathyAdapterABI.json +++ b/packages/reporter/src/ABIs/TelepathyAdapterABI.json @@ -1,229 +1,205 @@ [ { - "type": "constructor", - "stateMutability": "nonpayable", "inputs": [ { - "type": "address", + "internalType": "address", "name": "_telepathyRouter", - "internalType": "address" + "type": "address" } - ] + ], + "stateMutability": "nonpayable", + "type": "constructor" }, { - "type": "error", - "name": "BlockHeaderNotAvailable", "inputs": [ { - "type": "uint256", + "internalType": "uint256", "name": "slot", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "BlockHeaderNotAvailable", + "type": "error" }, { - "type": "error", - "name": "ConflictingBlockHeader", "inputs": [ { - "type": "uint256", + "internalType": "uint256", "name": "blockNumber", - "internalType": "uint256" + "type": "uint256" }, { - "type": "bytes32", - "name": "reportedBlockHash", - "internalType": "bytes32" + "internalType": "bytes32", + "name": "blockHash", + "type": "bytes32" }, { - "type": "bytes32", + "internalType": "bytes32", "name": "storedBlockHash", - "internalType": "bytes32" + "type": "bytes32" } - ] + ], + "name": "ConflictingBlockHeader", + "type": "error" }, { - "type": "error", - "name": "InconsistentLightClient", "inputs": [ { - "type": "address", + "internalType": "address", "name": "lightClient", - "internalType": "address" + "type": "address" } - ] + ], + "name": "InconsistentLightClient", + "type": "error" }, { - "type": "error", + "inputs": [], "name": "InvalidBlockHashProof", - "inputs": [] + "type": "error" }, { - "type": "error", - "name": "InvalidBlockHeaderLength", "inputs": [ { - "type": "uint256", + "internalType": "uint256", "name": "length", - "internalType": "uint256" + "type": "uint256" } - ] + ], + "name": "InvalidBlockHeaderLength", + "type": "error" }, { - "type": "error", + "inputs": [], "name": "InvalidBlockHeaderRLP", - "inputs": [] + "type": "error" }, { - "type": "error", + "inputs": [], "name": "InvalidBlockNumberProof", - "inputs": [] + "type": "error" }, { - "type": "error", - "name": "NoLightClientOnChain", "inputs": [ { - "type": "uint32", + "internalType": "uint32", "name": "chainId", - "internalType": "uint32" + "type": "uint32" } - ] + ], + "name": "NoLightClientOnChain", + "type": "error" }, { - "type": "event", - "name": "HashStored", + "anonymous": false, "inputs": [ { - "type": "uint256", - "name": "id", + "indexed": true, "internalType": "uint256", - "indexed": true + "name": "id", + "type": "uint256" }, { - "type": "bytes32", - "name": "hashes", + "indexed": true, "internalType": "bytes32", - "indexed": true + "name": "hash", + "type": "bytes32" } ], - "anonymous": false + "name": "HashStored", + "type": "event" }, { - "type": "function", - "stateMutability": "view", - "outputs": [ - { - "type": "bytes32", - "name": "hash", - "internalType": "bytes32" - } - ], - "name": "getHashFromOracle", "inputs": [ { - "type": "uint256", + "internalType": "uint256", "name": "domain", - "internalType": "uint256" + "type": "uint256" }, { - "type": "uint256", + "internalType": "uint256", "name": "id", - "internalType": "uint256" + "type": "uint256" } - ] - }, - { - "type": "function", - "stateMutability": "view", + ], + "name": "getHash", "outputs": [ { - "type": "bytes32", + "internalType": "bytes32", "name": "", - "internalType": "bytes32" + "type": "bytes32" } ], - "name": "hashes", - "inputs": [ - { - "type": "uint256", - "name": "", - "internalType": "uint256" - }, - { - "type": "uint256", - "name": "", - "internalType": "uint256" - } - ] + "stateMutability": "view", + "type": "function" }, { - "type": "function", - "stateMutability": "nonpayable", - "outputs": [], - "name": "proveAncestralBlockHashes", "inputs": [ { - "type": "uint256", + "internalType": "uint256", "name": "chainId", - "internalType": "uint256" + "type": "uint256" }, { - "type": "bytes[]", + "internalType": "bytes[]", "name": "blockHeaders", - "internalType": "bytes[]" + "type": "bytes[]" } - ] + ], + "name": "proveAncestralBlockHashes", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, { - "type": "function", - "stateMutability": "nonpayable", - "outputs": [], - "name": "storeBlockHeader", "inputs": [ { - "type": "uint32", + "internalType": "uint32", "name": "_chainId", - "internalType": "uint32" + "type": "uint32" }, { - "type": "uint64", + "internalType": "uint64", "name": "_slot", - "internalType": "uint64" + "type": "uint64" }, { - "type": "uint256", + "internalType": "uint256", "name": "_blockNumber", - "internalType": "uint256" + "type": "uint256" }, { - "type": "bytes32[]", + "internalType": "bytes32[]", "name": "_blockNumberProof", - "internalType": "bytes32[]" + "type": "bytes32[]" }, { - "type": "bytes32", + "internalType": "bytes32", "name": "_blockHash", - "internalType": "bytes32" + "type": "bytes32" }, { - "type": "bytes32[]", + "internalType": "bytes32[]", "name": "_blockHashProof", - "internalType": "bytes32[]" + "type": "bytes32[]" } - ] + ], + "name": "storeBlockHeader", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" }, { - "type": "function", - "stateMutability": "view", + "inputs": [], + "name": "telepathyRouter", "outputs": [ { - "type": "address", + "internalType": "address", "name": "", - "internalType": "address" + "type": "address" } ], - "name": "telepathyRouter", - "inputs": [] + "stateMutability": "view", + "type": "function" } ] diff --git a/packages/reporter/src/ABIs/WormholeAdapterABI.json b/packages/reporter/src/ABIs/WormholeAdapterABI.json index 636a5b1c..dc59d307 100644 --- a/packages/reporter/src/ABIs/WormholeAdapterABI.json +++ b/packages/reporter/src/ABIs/WormholeAdapterABI.json @@ -1,25 +1,10 @@ [ { "inputs": [ - { - "internalType": "contract IWormhole", - "name": "wormhole_", - "type": "address" - }, { "internalType": "address", - "name": "reporter_", + "name": "wormhole", "type": "address" - }, - { - "internalType": "uint256", - "name": "sourceChainId_", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "wormholeSourceChainId_", - "type": "uint16" } ], "stateMutability": "nonpayable", @@ -34,7 +19,7 @@ }, { "internalType": "bytes32", - "name": "reportedBlockHash", + "name": "blockHash", "type": "bytes32" }, { @@ -64,27 +49,6 @@ }, { "inputs": [ - { - "internalType": "address", - "name": "emitter", - "type": "address" - }, - { - "internalType": "uint16", - "name": "chainId", - "type": "uint16" - } - ], - "name": "InvalidEmitterChainId", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "emitter", - "type": "address" - }, { "components": [ { @@ -179,58 +143,118 @@ "type": "error" }, { + "inputs": [], + "name": "UnauthorizedWormholeReceive", + "type": "error" + }, + { + "anonymous": false, "inputs": [ { - "internalType": "address", - "name": "emitter", - "type": "address" + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" }, { + "indexed": true, "internalType": "bytes32", - "name": "reporter", + "name": "hash", "type": "bytes32" } ], - "name": "InvalidReporter", - "type": "error" + "name": "HashStored", + "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" + "internalType": "address", + "name": "previousOwner", + "type": "address" }, { "indexed": true, - "internalType": "bytes32", - "name": "hashes", - "type": "bytes32" + "internalType": "address", + "name": "newOwner", + "type": "address" } ], - "name": "HashStored", + "name": "OwnershipTransferred", "type": "event" }, { + "anonymous": false, "inputs": [ { + "indexed": true, "internalType": "uint256", - "name": "domain", + "name": "chainId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint16", + "name": "endpointId", + "type": "uint16" + }, + { + "indexed": true, + "internalType": "address", + "name": "reporter", + "type": "address" + } + ], + "name": "ReporterSet", + "type": "event" + }, + { + "inputs": [], + "name": "WORMHOLE", + "outputs": [ + { + "internalType": "contract IWormhole", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "name": "chainIds", + "outputs": [ { "internalType": "uint256", - "name": "id", + "name": "", "type": "uint256" } ], - "name": "getHashFromOracle", + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "name": "enabledReporters", "outputs": [ { "internalType": "bytes32", - "name": "hash", + "name": "", "type": "bytes32" } ], @@ -241,16 +265,16 @@ "inputs": [ { "internalType": "uint256", - "name": "", + "name": "domain", "type": "uint256" }, { "internalType": "uint256", - "name": "", + "name": "id", "type": "uint256" } ], - "name": "hashes", + "name": "getHash", "outputs": [ { "internalType": "bytes32", @@ -261,6 +285,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -281,28 +318,32 @@ }, { "inputs": [], - "name": "reporter", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { - "inputs": [], - "name": "sourceChainId", - "outputs": [ + "inputs": [ { "internalType": "uint256", - "name": "", + "name": "chainId", "type": "uint256" + }, + { + "internalType": "uint16", + "name": "wormholeChainId", + "type": "uint16" + }, + { + "internalType": "address", + "name": "reporter", + "type": "address" } ], - "stateMutability": "view", + "name": "setReporterByChain", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { @@ -319,29 +360,16 @@ "type": "function" }, { - "inputs": [], - "name": "wormhole", - "outputs": [ + "inputs": [ { - "internalType": "contract IWormhole", - "name": "", + "internalType": "address", + "name": "newOwner", "type": "address" } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wormholeSourceChainId", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" } ] diff --git a/packages/reporter/src/ABIs/WormhomeHeaderReporterABI.json b/packages/reporter/src/ABIs/WormhomeHeaderReporterABI.json deleted file mode 100644 index 0e80a16f..00000000 --- a/packages/reporter/src/ABIs/WormhomeHeaderReporterABI.json +++ /dev/null @@ -1,63 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "contract IWormhole", - "name": "wormhole_", - "type": "address" - }, - { - "internalType": "contract IHeaderStorage", - "name": "headerStorage_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "headerStorage", - "outputs": [ - { - "internalType": "contract IHeaderStorage", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "blockNumbers", - "type": "uint256[]" - } - ], - "name": "reportHeaders", - "outputs": [ - { - "internalType": "uint64", - "name": "sequence", - "type": "uint64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "wormhole", - "outputs": [ - { - "internalType": "contract IWormhole", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/packages/reporter/src/ABIs/WormhomeReporterABI.json b/packages/reporter/src/ABIs/WormhomeReporterABI.json new file mode 100644 index 00000000..454cd261 --- /dev/null +++ b/packages/reporter/src/ABIs/WormhomeReporterABI.json @@ -0,0 +1,216 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "headerStorage", + "type": "address" + }, + { + "internalType": "address", + "name": "yaho", + "type": "address" + }, + { + "internalType": "address", + "name": "wormhole", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "expectedYaho", + "type": "address" + } + ], + "name": "NotYaho", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "blockHeader", + "type": "bytes32" + } + ], + "name": "BlockDispatched", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "messageId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "messageHash", + "type": "bytes32" + } + ], + "name": "MessageDispatched", + "type": "event" + }, + { + "inputs": [], + "name": "HEADER_STORAGE", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROVIDER", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "WOMRHOLE", + "outputs": [ + { + "internalType": "contract IWormhole", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "YAHO", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + } + ], + "name": "dispatchBlocks", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "messageIds", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "messageHashes", + "type": "bytes32[]" + } + ], + "name": "dispatchMessages", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + } +] diff --git a/packages/reporter/src/MultiClient.ts b/packages/reporter/src/MultiClient.ts index 6413d584..d873eeaa 100644 --- a/packages/reporter/src/MultiClient.ts +++ b/packages/reporter/src/MultiClient.ts @@ -31,7 +31,7 @@ class Multiclient { }, {}) } - getClientByChain(_chain: Chain) { + getClientByChain(_chain: Chain): any { return this._clients[_chain.name] } } diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts index 7eaf8947..c4983502 100644 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -5,16 +5,9 @@ import BaseController from "./BaseController.js" import { BaseControllerConfigs } from "./BaseController.js" -interface AMBReporterControllerConfigs extends BaseControllerConfigs { - reportHeadersGas: number -} - class AMBReporterController extends BaseController { - private _reportHeadersGas: number - - constructor(_configs: AMBReporterControllerConfigs) { + constructor(_configs: BaseControllerConfigs) { super(_configs, "AMBReporterController") - this._reportHeadersGas = _configs.reportHeadersGas } async onBlocks(_blockNumbers: bigint[]) { @@ -32,8 +25,8 @@ class AMBReporterController extends BaseController { const { request } = await client.simulateContract({ address: this.reporterAddress as `0x${string}`, abi: ABI, - functionName: "reportHeaders", - args: [[blockNumber], this.adapterAddresses[chain.name], this._reportHeadersGas], + functionName: "dispatchBlocks", + args: [chain.id, this.adapterAddresses[chain.name], [blockNumber]], }) const txHash = await client.writeContract(request) diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts index bbd3a4d0..272c73b0 100644 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ b/packages/reporter/src/controllers/SygmaReporterController.ts @@ -5,16 +5,9 @@ import BaseController from "./BaseController.js" import { BaseControllerConfigs } from "./BaseController.js" -interface SygmaReporterControllerConfigs extends BaseControllerConfigs { - domainIds: { [chainName: string]: number } -} - class SygmaReporterController extends BaseController { - private _domainIds: { [chainName: string]: number } - - constructor(_configs: SygmaReporterControllerConfigs) { + constructor(_configs: BaseControllerConfigs) { super(_configs, "SygmaReporterController") - this._domainIds = _configs.domainIds } async onBlocks(_blockNumbers: bigint[]) { @@ -30,13 +23,8 @@ class SygmaReporterController extends BaseController { const { request } = await client.simulateContract({ address: this.reporterAddresses[chain.name], abi: ABI, - functionName: "reportHeadersToDomain", - args: [ - [blockNumber], - this.adapterAddresses[chain.name], - this._domainIds[chain.name as keyof typeof this._domainIds], - "0x", - ], + functionName: "dispatchBlocks", + args: [chain.id, this.adapterAddresses[chain.name], [blockNumber]], }) const txHash = await client.writeContract(request) this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts index c3a09de1..a7032fc0 100644 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ b/packages/reporter/src/controllers/TelepathyReporterController.ts @@ -8,6 +8,7 @@ import BaseController from "./BaseController.js" import { BaseControllerConfigs } from "./BaseController.js" +// TODO: Update to comply with Hashi v0.2.0 interface TelepathyReporterControllerConfigs extends BaseControllerConfigs { lightClientAddresses: { [chainName: string]: `0x${string}` } baseProofUrl: string diff --git a/packages/reporter/src/controllers/WormholeReporterController.ts b/packages/reporter/src/controllers/WormholeReporterController.ts index 56584eb4..822650fe 100644 --- a/packages/reporter/src/controllers/WormholeReporterController.ts +++ b/packages/reporter/src/controllers/WormholeReporterController.ts @@ -4,7 +4,7 @@ import { Chain } from "viem" import BaseController from "./BaseController.js" import sleep from "../utils/sleep.js" -import HeaderReporterABI from "../ABIs/WormhomeHeaderReporterABI.json" assert { type: "json" } +import ReporterABI from "../ABIs/WormhomeReporterABI.json" assert { type: "json" } import AdapterABI from "../ABIs/WormholeAdapterABI.json" assert { type: "json" } import WormholeABI from "../ABIs/WormholeABI.json" assert { type: "json" } @@ -47,9 +47,10 @@ class WormholeReporterController extends BaseController { this.logger.info(`reporting block header for block ${blockNumber} ...`) const { request } = await client.simulateContract({ address: this.reporterAddress as `0x${string}`, - abi: HeaderReporterABI, - functionName: "reportHeaders", - args: [[blockNumber]], + abi: ReporterABI, + functionName: "dispatchBlocks", + // targetChainId & adapter are not used in _dispatch(), here set to 0 + args: [0, "0x0000000000000000000000000000000000000000", [blockNumber]], }) let txHash = await client.writeContract(request) diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 774e0ab1..459da700 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -53,7 +53,6 @@ const main = () => { adapterAddresses: { [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Gnosis?.AMBAdapter, }, - reportHeadersGas: settings.reporterControllers.AMBReporterController.reportHeadersGas, }) const sygmaReporterController = new SygmaReporterController({ @@ -68,7 +67,6 @@ const main = () => { adapterAddresses: { [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Gnosis?.SygmaAdapter, }, - domainIds: settings.reporterControllers.SygmaReporterController.domainIds, }) const telepathyReporterController = new TelepathyReporterController({ diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index bfa0f700..811353bc 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -215,12 +215,6 @@ export const settings = { LayerZeroReporterController: { reportHeadersValue: parseEther(process.env.LAYER_ZERO_REPORT_HEADERS_VALUE as string), }, - SygmaReporterController: { - domainIds: { - [gnosis.name]: 6, - [mainnet.name]: 1, - }, - }, TelepathyReporterController: { baseProofUrl: process.env.TELEPATHY_PROOF_API_URL as string, }, diff --git a/packages/reporter/yarn.lock b/packages/reporter/yarn.lock index a76b4abf..be19c25d 100644 --- a/packages/reporter/yarn.lock +++ b/packages/reporter/yarn.lock @@ -902,15 +902,6 @@ __metadata: languageName: node linkType: hard -"async-retry@npm:^1.3.3": - version: 1.3.3 - resolution: "async-retry@npm:1.3.3" - dependencies: - retry: 0.13.1 - checksum: 38a7152ff7265a9321ea214b9c69e8224ab1febbdec98efbbde6e562f17ff68405569b796b1c5271f354aef8783665d29953f051f68c1fc45306e61aec82fdc4 - languageName: node - linkType: hard - "async@npm:^3.2.3": version: 3.2.4 resolution: "async@npm:3.2.4" @@ -2579,14 +2570,13 @@ __metadata: "@typescript-eslint/eslint-plugin": ^6.7.5 "@typescript-eslint/parser": ^6.7.5 async-mutex: ^0.4.0 - async-retry: ^1.3.3 axios: ^1.5.1 dotenv: ^16.3.1 eslint: ^8.51.0 eslint-config-prettier: ^9.0.0 nodemon: ^3.0.1 prettier: ^3.0.3 - ts-node: ^10.9.1 + ts-node: ^10.9.2 typescript: ^5.2.2 viem: ^1.16.5 winston: ^3.11.0 @@ -2600,13 +2590,6 @@ __metadata: languageName: node linkType: hard -"retry@npm:0.13.1": - version: 0.13.1 - resolution: "retry@npm:0.13.1" - checksum: 47c4d5be674f7c13eee4cfe927345023972197dbbdfba5d3af7e461d13b44de1bfd663bfc80d2f601f8ef3fc8164c16dd99655a221921954a65d044a2fc1233b - languageName: node - linkType: hard - "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -2933,9 +2916,9 @@ __metadata: languageName: node linkType: hard -"ts-node@npm:^10.9.1": - version: 10.9.1 - resolution: "ts-node@npm:10.9.1" +"ts-node@npm:^10.9.2": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" dependencies: "@cspotcode/source-map-support": ^0.8.0 "@tsconfig/node10": ^1.0.7 @@ -2967,7 +2950,7 @@ __metadata: ts-node-script: dist/bin-script.js ts-node-transpile-only: dist/bin-transpile.js ts-script: dist/bin-script-deprecated.js - checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 + checksum: fde256c9073969e234526e2cfead42591b9a2aec5222bac154b0de2fa9e4ceb30efcd717ee8bc785a56f3a119bdd5aa27b333d9dbec94ed254bd26f8944c67ac languageName: node linkType: hard From 782cf3ebabf2d614e38be2813f9932b98c358b1b Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Wed, 10 Jul 2024 17:34:11 +0200 Subject: [PATCH 46/81] WIP: update StandardReporterController --- .../reporter/src/controllers/StandardReporterController.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/reporter/src/controllers/StandardReporterController.ts b/packages/reporter/src/controllers/StandardReporterController.ts index 8920beea..1ee5d06d 100644 --- a/packages/reporter/src/controllers/StandardReporterController.ts +++ b/packages/reporter/src/controllers/StandardReporterController.ts @@ -31,8 +31,8 @@ class StandardReporterController extends BaseController { const { request } = await client.simulateContract({ address: this.reporterAddresses[chain.name], abi: ABI, - functionName: "reportHeaders", - args: [[blockNumber], this.adapterAddresses[chain.name]], + functionName: "dispatchBlocks", + args: [chain.id, this.adapterAddresses[chain.name], [blockNumber]], value: this._reportHeadersValue, }) From 22e19619c6d31b5899d4496f33f2378040f387b0 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Thu, 11 Jul 2024 15:46:04 +0200 Subject: [PATCH 47/81] WIP: fix ElectronController type and add AMB for Sepolia and Chiado --- packages/reporter/.env.example | 3 + packages/reporter/.yarnrc.yml | 1 + packages/reporter/package.json | 5 +- .../src/controllers/AMBReporterController.ts | 2 + .../controllers/ElectronReporterController.ts | 2 +- packages/reporter/src/index.ts | 438 +++++++++--------- packages/reporter/src/settings/index.ts | 7 + packages/reporter/yarn.lock | 365 ++++++++++++++- 8 files changed, 601 insertions(+), 222 deletions(-) create mode 100644 packages/reporter/.yarnrc.yml diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index 552241eb..c15b0392 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -9,6 +9,7 @@ POLYGON_RPC_URL= OPTIMISM_RPC_URL=https://optimism.llamarpc.com ARBITRUM_RPC_URL=https://arbitrum.llamarpc.com SEPOLIA_RPC_URL= +CHIADO_RPC_URL=https://rpc.chiadochain.net GOERLI_BEACON_API_URL= AMB_REPORTER_HEADERS_GAS=300000 @@ -33,6 +34,8 @@ QUERY_BLOCK_LENGTH=200 SOURCE_CHAIN_ID=5 DESTINATION_CHAIN_IDS=100 +SEPOLIA_CHIADO_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 +CHIADO_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 SYMGA_ADAPTER=0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15 GNOSIS_TELEPATHY_ADAPTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 diff --git a/packages/reporter/.yarnrc.yml b/packages/reporter/.yarnrc.yml new file mode 100644 index 00000000..3186f3f0 --- /dev/null +++ b/packages/reporter/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/packages/reporter/package.json b/packages/reporter/package.json index 61519dc8..5d6868a2 100644 --- a/packages/reporter/package.json +++ b/packages/reporter/package.json @@ -12,7 +12,7 @@ "prettier:write": "prettier --write \"**/*.{js,json,md,sol,ts,yml}\"", "start:dev": "nodemon" }, - "packageManager": "yarn@3.2.1", + "packageManager": "yarn@3.2.2", "dependencies": { "@chainsafe/persistent-merkle-tree": "^0.6.1", "@chainsafe/ssz": "^0.14.0", @@ -35,8 +35,9 @@ "eslint": "^8.51.0", "eslint-config-prettier": "^9.0.0", "nodemon": "^3.0.1", + "patch-package": "^8.0.0", "prettier": "^3.0.3", "ts-node": "^10.9.2", - "typescript": "^5.2.2" + "typescript": "~5.2.2" } } diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts index c4983502..c6a0a474 100644 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ b/packages/reporter/src/controllers/AMBReporterController.ts @@ -22,6 +22,7 @@ class AMBReporterController extends BaseController { chain.name } ...`, ) + const { request } = await client.simulateContract({ address: this.reporterAddress as `0x${string}`, abi: ABI, @@ -30,6 +31,7 @@ class AMBReporterController extends BaseController { }) const txHash = await client.writeContract(request) + this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) } } catch (_error) { diff --git a/packages/reporter/src/controllers/ElectronReporterController.ts b/packages/reporter/src/controllers/ElectronReporterController.ts index 0c06ceef..cf429691 100644 --- a/packages/reporter/src/controllers/ElectronReporterController.ts +++ b/packages/reporter/src/controllers/ElectronReporterController.ts @@ -72,7 +72,7 @@ class ElectronReporterController extends BaseController { this.logger.info("Getting log index ...") const logIndex = receipt.logs.findIndex( - ({ address, topics }) => + ({ address, topics }: { address: string; topics: string[] }) => address.toLowerCase() === this.headerStorageAddress.toLowerCase() && topics[0] === EXPECTED_TOPIC, ) diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 459da700..03c73de3 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -9,6 +9,8 @@ import { optimism, optimismGoerli, polygon, + mainnet, + sepolia, } from "viem/chains" import { Chain } from "viem" @@ -28,8 +30,20 @@ const main = () => { const controllersEnabled = process.env.REPORTERS_ENABLED?.split(",") const sourceChainId = Number(process.env.SOURCE_CHAIN_ID) const destinationChainIds = process.env.DESTINATION_CHAIN_IDS?.split(",").map((_chainId) => Number(_chainId)) - - const chains = [arbitrum, avalanche, bsc, bscTestnet, gnosis, gnosisChiado, goerli, optimism, optimismGoerli, polygon] + const chains = [ + arbitrum, + avalanche, + bsc, + bscTestnet, + gnosis, + gnosisChiado, + goerli, + optimism, + optimismGoerli, + polygon, + mainnet, + sepolia, + ] const sourceChain: Chain = Object.values(chains).find((_chain) => _chain.id === sourceChainId) as Chain const destinationChains: Chain[] = Object.values(chains).filter((_chain) => destinationChainIds?.includes(_chain.id)) @@ -46,237 +60,237 @@ const main = () => { const ambReporterController = new AMBReporterController({ type: "classic", sourceChain, - destinationChains: destinationChains.filter(({ name }) => name === gnosis.name), + destinationChains: destinationChains.filter(({ name }) => name === gnosisChiado.name), logger, multiClient, - reporterAddress: unidirectionalReportersAddresses[sourceChain.name]?.Gnosis?.AMBReporter, + reporterAddress: unidirectionalReportersAddresses[sourceChain.name]?.[destinationChains[0].name]?.AMBReporter, adapterAddresses: { - [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Gnosis?.AMBAdapter, + [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[destinationChains[0].name]?.AMBAdapter, }, }) - const sygmaReporterController = new SygmaReporterController({ - type: "classic", - sourceChain, - destinationChains, - logger, - multiClient, - reporterAddresses: { - [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosis.name]?.SygmaReporter, - }, - adapterAddresses: { - [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Gnosis?.SygmaAdapter, - }, - }) + // const sygmaReporterController = new SygmaReporterController({ + // type: "classic", + // sourceChain, + // destinationChains, + // logger, + // multiClient, + // reporterAddresses: { + // [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosis.name]?.SygmaReporter, + // }, + // adapterAddresses: { + // [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Gnosis?.SygmaAdapter, + // }, + // }) - const telepathyReporterController = new TelepathyReporterController({ - type: "lightClient", - sourceChain, - destinationChains, - logger, - multiClient, - adapterAddresses: { - [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Gnosis?.TelepathyAdapter, - [arbitrum.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["Arbitrum One"]?.TelepathyAdapter, - [optimism.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["OP Mainnet"]?.TelepathyAdapter, - [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["BNB Smart Chain"]?.TelepathyAdapter, - [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Polygon?.TelepathyAdapter, - }, - baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, - lightClientAddresses: { - [gnosis.name]: lightClientAddresses.Gnosis?.[sourceChain.name]?.TelepathyLightClient, - [arbitrum.name]: lightClientAddresses["Arbitrum One"]?.[sourceChain.name]?.TelepathyLightClient, - [optimism.name]: lightClientAddresses["OP Mainnet"]?.[sourceChain.name]?.TelepathyLightClient, - [bsc.name]: lightClientAddresses["BNB Smart Chain"]?.[sourceChain.name]?.TelepathyLightClient, - [polygon.name]: lightClientAddresses.Polygon?.[sourceChain.name]?.TelepathyLightClient, - }, - }) + // const telepathyReporterController = new TelepathyReporterController({ + // type: "lightClient", + // sourceChain, + // destinationChains, + // logger, + // multiClient, + // adapterAddresses: { + // [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Gnosis?.TelepathyAdapter, + // [arbitrum.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["Arbitrum One"]?.TelepathyAdapter, + // [optimism.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["OP Mainnet"]?.TelepathyAdapter, + // [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["BNB Smart Chain"]?.TelepathyAdapter, + // [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Polygon?.TelepathyAdapter, + // }, + // baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, + // lightClientAddresses: { + // [gnosis.name]: lightClientAddresses.Gnosis?.[sourceChain.name]?.TelepathyLightClient, + // [arbitrum.name]: lightClientAddresses["Arbitrum One"]?.[sourceChain.name]?.TelepathyLightClient, + // [optimism.name]: lightClientAddresses["OP Mainnet"]?.[sourceChain.name]?.TelepathyLightClient, + // [bsc.name]: lightClientAddresses["BNB Smart Chain"]?.[sourceChain.name]?.TelepathyLightClient, + // [polygon.name]: lightClientAddresses.Polygon?.[sourceChain.name]?.TelepathyLightClient, + // }, + // }) - const wormholeReporterController = new WormholeReporterController({ - type: "classic", - sourceChain, - destinationChains, - logger, - multiClient, - reporterAddress: (settings.contractAddresses.reporterAddresses as any)[sourceChain.name]?.WormholeHeaderReporter, - adapterAddresses: { - [gnosis.name]: (settings.contractAddresses.adapterAddresses as any)?.Gnosis?.WormholeAdapter, - [optimism.name]: (settings.contractAddresses.adapterAddresses as any)["OP Mainnet"]?.WormholeAdapter, - [bsc.name]: (settings.contractAddresses.adapterAddresses as any)["BNB Smart Chain"]?.WormholeAdapter, - [polygon.name]: (settings.contractAddresses.adapterAddresses as any)?.Polygon.WormholeAdapter, - [avalanche.name]: (settings.contractAddresses.adapterAddresses as any)?.Avalanche.WormholeAdapter, - }, - wormholeScanBaseUrl: settings.reporterControllers.WormholeReporterController.wormholeScanBaseUrl, - wormholeAddress: (settings.contractAddresses as any)[sourceChain.name]?.Wormhole, - wormholeChainIds: settings.reporterControllers.WormholeReporterController.wormholeChainIds, - }) + // const wormholeReporterController = new WormholeReporterController({ + // type: "classic", + // sourceChain, + // destinationChains, + // logger, + // multiClient, + // reporterAddress: (settings.contractAddresses.reporterAddresses as any)[sourceChain.name]?.WormholeHeaderReporter, + // adapterAddresses: { + // [gnosis.name]: (settings.contractAddresses.adapterAddresses as any)?.Gnosis?.WormholeAdapter, + // [optimism.name]: (settings.contractAddresses.adapterAddresses as any)["OP Mainnet"]?.WormholeAdapter, + // [bsc.name]: (settings.contractAddresses.adapterAddresses as any)["BNB Smart Chain"]?.WormholeAdapter, + // [polygon.name]: (settings.contractAddresses.adapterAddresses as any)?.Polygon.WormholeAdapter, + // [avalanche.name]: (settings.contractAddresses.adapterAddresses as any)?.Avalanche.WormholeAdapter, + // }, + // wormholeScanBaseUrl: settings.reporterControllers.WormholeReporterController.wormholeScanBaseUrl, + // wormholeAddress: (settings.contractAddresses as any)[sourceChain.name]?.Wormhole, + // wormholeChainIds: settings.reporterControllers.WormholeReporterController.wormholeChainIds, + // }) - // TODO: add check to prevent to always run OptimismReporterController even when destinationChains does not include optimism - const optimismReporterController = new OptimismReporterController({ - type: "native", - sourceChain, - logger, - multiClient, - reporterAddress: - settings.contractAddresses.reporterAddresses.unidirectional.Ethereum["OP Mainnet"] - .L1CrossDomainMessengerHeaderReporter, - adapterAddresses: { - [optimism.name]: - settings.contractAddresses.adapterAddresses.unidirectional.Ethereum["OP Mainnet"].L2CrossDomainMessengerAdapter, - }, - }) + // // TODO: add check to prevent to always run OptimismReporterController even when destinationChains does not include optimism + // const optimismReporterController = new OptimismReporterController({ + // type: "native", + // sourceChain, + // logger, + // multiClient, + // reporterAddress: + // settings.contractAddresses.reporterAddresses.unidirectional.Ethereum["OP Mainnet"] + // .L1CrossDomainMessengerHeaderReporter, + // adapterAddresses: { + // [optimism.name]: + // settings.contractAddresses.adapterAddresses.unidirectional.Ethereum["OP Mainnet"].L2CrossDomainMessengerAdapter, + // }, + // }) - const axelarReporterController = new StandardReporterController({ - name: "AxelarReporterController", - type: "classic", - sourceChain, - destinationChains, - logger, - multiClient, - reporterAddresses: { - [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.AxelarReporter, - }, - adapterAddresses: { - [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.AxelarAdapter, - }, - reportHeadersValue: settings.reporterControllers.AxelarReporterController.reportHeadersValue, - }) + // const axelarReporterController = new StandardReporterController({ + // name: "AxelarReporterController", + // type: "classic", + // sourceChain, + // destinationChains, + // logger, + // multiClient, + // reporterAddresses: { + // [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.AxelarReporter, + // }, + // adapterAddresses: { + // [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.AxelarAdapter, + // }, + // reportHeadersValue: settings.reporterControllers.AxelarReporterController.reportHeadersValue, + // }) - const connextReporterController = new StandardReporterController({ - name: "ConnextReporterController", - type: "classic", - sourceChain, - destinationChains, - logger, - multiClient, - reporterAddresses: { - [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosis.name]?.ConnextReporter, - }, - adapterAddresses: { - [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[gnosis.name]?.ConnextAdapter, - }, - reportHeadersValue: settings.reporterControllers.ConnextReporterController.reportHeadersValue, - }) + // const connextReporterController = new StandardReporterController({ + // name: "ConnextReporterController", + // type: "classic", + // sourceChain, + // destinationChains, + // logger, + // multiClient, + // reporterAddresses: { + // [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosis.name]?.ConnextReporter, + // }, + // adapterAddresses: { + // [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[gnosis.name]?.ConnextAdapter, + // }, + // reportHeadersValue: settings.reporterControllers.ConnextReporterController.reportHeadersValue, + // }) - const celerReporterController = new StandardReporterController({ - name: "CelerReporterController", - type: "classic", - sourceChain, - destinationChains, - logger, - multiClient, - reporterAddresses: { - [polygon.name]: unidirectionalReportersAddresses[sourceChain.name]?.[polygon.name]?.CelerReporter, - }, - adapterAddresses: { - [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[polygon.name]?.CelerAdapter, - }, - reportHeadersValue: settings.reporterControllers.CelerReporterController.reportHeadersValue, - }) + // const celerReporterController = new StandardReporterController({ + // name: "CelerReporterController", + // type: "classic", + // sourceChain, + // destinationChains, + // logger, + // multiClient, + // reporterAddresses: { + // [polygon.name]: unidirectionalReportersAddresses[sourceChain.name]?.[polygon.name]?.CelerReporter, + // }, + // adapterAddresses: { + // [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[polygon.name]?.CelerAdapter, + // }, + // reportHeadersValue: settings.reporterControllers.CelerReporterController.reportHeadersValue, + // }) - const layerZeroReporterController = new StandardReporterController({ - name: "LayerZeroReporterController", - type: "classic", - sourceChain, - destinationChains, - logger, - multiClient, - reporterAddresses: { - [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroReporter, - [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroReporter, - }, - adapterAddresses: { - [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroAdapter, - [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroAdapter, - }, - reportHeadersValue: settings.reporterControllers.LayerZeroReporterController.reportHeadersValue, - }) + // const layerZeroReporterController = new StandardReporterController({ + // name: "LayerZeroReporterController", + // type: "classic", + // sourceChain, + // destinationChains, + // logger, + // multiClient, + // reporterAddresses: { + // [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroReporter, + // [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroReporter, + // }, + // adapterAddresses: { + // [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroAdapter, + // [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroAdapter, + // }, + // reportHeadersValue: settings.reporterControllers.LayerZeroReporterController.reportHeadersValue, + // }) - const hyperlaneReporterController = new StandardReporterController({ - name: "HyperlaneReporterController", - type: "classic", - sourceChain, - destinationChains, - logger, - multiClient, - reporterAddresses: { - [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.HyperlaneReporter, - }, - adapterAddresses: { - [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.HyperlaneAdapter, - }, - }) + // const hyperlaneReporterController = new StandardReporterController({ + // name: "HyperlaneReporterController", + // type: "classic", + // sourceChain, + // destinationChains, + // logger, + // multiClient, + // reporterAddresses: { + // [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.HyperlaneReporter, + // }, + // adapterAddresses: { + // [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.HyperlaneAdapter, + // }, + // }) - const ccipReporterController = new StandardReporterController({ - name: "CCIPReporterController", - type: "classic", - sourceChain, - destinationChains, - logger, - multiClient, - reporterAddresses: { - [optimismGoerli.name]: unidirectionalReportersAddresses[sourceChain.name]?.[optimismGoerli.name]?.CCIPReporter, - [bscTestnet.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bscTestnet.name]?.CCIPReporter, - [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.CCIPReporter, - }, - adapterAddresses: { - [optimismGoerli.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[optimismGoerli.name]?.CCIPAdapter, - [bscTestnet.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bscTestnet.name]?.CCIPAdapter, - [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.CCIPAdapter, - }, - reportHeadersValue: settings.reporterControllers.CCIPReporterController.reportHeadersValue, - }) + // const ccipReporterController = new StandardReporterController({ + // name: "CCIPReporterController", + // type: "classic", + // sourceChain, + // destinationChains, + // logger, + // multiClient, + // reporterAddresses: { + // [optimismGoerli.name]: unidirectionalReportersAddresses[sourceChain.name]?.[optimismGoerli.name]?.CCIPReporter, + // [bscTestnet.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bscTestnet.name]?.CCIPReporter, + // [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.CCIPReporter, + // }, + // adapterAddresses: { + // [optimismGoerli.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[optimismGoerli.name]?.CCIPAdapter, + // [bscTestnet.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bscTestnet.name]?.CCIPAdapter, + // [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.CCIPAdapter, + // }, + // reportHeadersValue: settings.reporterControllers.CCIPReporterController.reportHeadersValue, + // }) - const zetaReporterController = new StandardReporterController({ - name: "ZetaReporterController", - type: "classic", - sourceChain, - destinationChains, - logger, - multiClient, - reporterAddresses: { - [bscTestnet.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bscTestnet.name]?.ZetaChainReporter, - }, - adapterAddresses: { - [bscTestnet.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bscTestnet.name]?.ZetaChainAdapter, - }, - reportHeadersValue: settings.reporterControllers.ZetaReporterController.reportHeadersValue, - }) + // const zetaReporterController = new StandardReporterController({ + // name: "ZetaReporterController", + // type: "classic", + // sourceChain, + // destinationChains, + // logger, + // multiClient, + // reporterAddresses: { + // [bscTestnet.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bscTestnet.name]?.ZetaChainReporter, + // }, + // adapterAddresses: { + // [bscTestnet.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bscTestnet.name]?.ZetaChainAdapter, + // }, + // reportHeadersValue: settings.reporterControllers.ZetaReporterController.reportHeadersValue, + // }) - const electronReporterController = new ElectronReporterController({ - type: "lightClient", - sourceChain, - destinationChains, - logger, - multiClient, - adapterAddresses: { - [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["Gnosis Chiado"]?.ElectronAdapter, - }, - headerStorageAddress: (settings.contractAddresses as any)[sourceChain.name].HeaderStorage, - lightClientAddresses: { - [gnosisChiado.name]: lightClientAddresses["Gnosis Chiado"]?.[sourceChain.name]?.ElectronLightClient, - }, - beaconchaBaseUrl: (settings.reporterControllers.ElectronReporterController.beaconchaBaseUrls as any)[ - sourceChain.name - ], - beaconApiBaseUrl: (settings.beaconApiUrls as any)[sourceChain.name], - }) + // const electronReporterController = new ElectronReporterController({ + // type: "lightClient", + // sourceChain, + // destinationChains, + // logger, + // multiClient, + // adapterAddresses: { + // [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["Gnosis Chiado"]?.ElectronAdapter, + // }, + // headerStorageAddress: (settings.contractAddresses as any)[sourceChain.name].HeaderStorage, + // lightClientAddresses: { + // [gnosisChiado.name]: lightClientAddresses["Gnosis Chiado"]?.[sourceChain.name]?.ElectronLightClient, + // }, + // beaconchaBaseUrl: (settings.reporterControllers.ElectronReporterController.beaconchaBaseUrls as any)[ + // sourceChain.name + // ], + // beaconApiBaseUrl: (settings.beaconApiUrls as any)[sourceChain.name], + // }) const coordinator = new Coordinator({ controllers: [ ambReporterController, - sygmaReporterController, - telepathyReporterController, - wormholeReporterController, - optimismReporterController, - axelarReporterController, - connextReporterController, - celerReporterController, - layerZeroReporterController, - hyperlaneReporterController, - ccipReporterController, - zetaReporterController, - electronReporterController, + // sygmaReporterController, + // telepathyReporterController, + // wormholeReporterController, + // optimismReporterController, + // axelarReporterController, + // connextReporterController, + // celerReporterController, + // layerZeroReporterController, + // hyperlaneReporterController, + // ccipReporterController, + // zetaReporterController, + // electronReporterController, ].filter((_controller) => controllersEnabled?.includes(_controller.name)), intervalFetchBlocksMs: settings.Coordinator.intervalFetchBlocksMs, logger, diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 811353bc..eb4cf97e 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -51,6 +51,7 @@ export const settings = { [gnosis.name]: { TelepathyAdapter: process.env.GNOSIS_TELEPATHY_ADAPTER as `0x${string}`, AMBAdapter: process.env.GNOSIS_AMB_ADAPTER as `0x${string}`, + AMBReporter: process.env.GNOSIS_AMB_REPORTER as `0x${string}`, ConnextAdapter: process.env.GNOSIS_CONNEXT_ADAPTER_MAINNET as `0x${string}`, SygmaAdapter: process.env.GNOSIS_SYGMA_ADAPTER as `0x${string}`, // this works with many chains }, @@ -82,6 +83,9 @@ export const settings = { [bscTestnet.name]: { CCIPAdapter: process.env.BSC_TESTNET_CCIP_ADAPTER_SEPOLIA as `0x${string}`, }, + [gnosisChiado.name]: { + AMBAdapter: process.env.CHIADO_ADAPTER as `0x${string}`, + }, }, [goerli.name]: { [bscTestnet.name]: { @@ -140,6 +144,9 @@ export const settings = { [bscTestnet.name]: { CCIPReporter: process.env.SEPOLIA_CCIP_REPORTER_BSC_TESTNET as `0x${string}`, }, + [gnosisChiado.name]: { + AMBReporter: process.env.SEPOLIA_CHIADO_REPORTER as `0x${string}`, + }, }, [goerli.name]: { [bscTestnet.name]: { diff --git a/packages/reporter/yarn.lock b/packages/reporter/yarn.lock index be19c25d..17edb509 100644 --- a/packages/reporter/yarn.lock +++ b/packages/reporter/yarn.lock @@ -721,6 +721,13 @@ __metadata: languageName: node linkType: hard +"@yarnpkg/lockfile@npm:^1.1.0": + version: 1.1.0 + resolution: "@yarnpkg/lockfile@npm:1.1.0" + checksum: 05b881b4866a3546861fee756e6d3812776ea47fa6eb7098f983d6d0eefa02e12b66c3fff931574120f196286a7ad4879ce02743c8bb2be36c6a576c7852083a + languageName: node + linkType: hard + "abbrev@npm:1, abbrev@npm:^1.0.0": version: 1.1.1 resolution: "abbrev@npm:1.1.1" @@ -916,6 +923,13 @@ __metadata: languageName: node linkType: hard +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e + languageName: node + linkType: hard + "axios@npm:^1.5.1": version: 1.5.1 resolution: "axios@npm:1.5.1" @@ -976,6 +990,15 @@ __metadata: languageName: node linkType: hard +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: ^7.1.1 + checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69 + languageName: node + linkType: hard + "cacache@npm:^17.0.0": version: 17.1.4 resolution: "cacache@npm:17.1.4" @@ -996,6 +1019,19 @@ __metadata: languageName: node linkType: hard +"call-bind@npm:^1.0.5": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + set-function-length: ^1.2.1 + checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029 + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -1003,7 +1039,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0": +"chalk@npm:^4.0.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -1039,6 +1075,13 @@ __metadata: languageName: node linkType: hard +"ci-info@npm:^3.7.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 + languageName: node + linkType: hard + "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -1159,7 +1202,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -1198,6 +1241,17 @@ __metadata: languageName: node linkType: hard +"define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + gopd: ^1.0.1 + checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b + languageName: node + linkType: hard + "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -1295,6 +1349,22 @@ __metadata: languageName: node linkType: hard +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: ^1.2.4 + checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 + languageName: node + linkType: hard + "escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" @@ -1523,6 +1593,15 @@ __metadata: languageName: node linkType: hard +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798 + languageName: node + linkType: hard + "find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" @@ -1533,6 +1612,15 @@ __metadata: languageName: node linkType: hard +"find-yarn-workspace-root@npm:^2.0.0": + version: 2.0.0 + resolution: "find-yarn-workspace-root@npm:2.0.0" + dependencies: + micromatch: ^4.0.2 + checksum: fa5ca8f9d08fe7a54ce7c0a5931ff9b7e36f9ee7b9475fb13752bcea80ec6b5f180fa5102d60b376d5526ce924ea3fc6b19301262efa0a5d248dd710f3644242 + languageName: node + linkType: hard + "flat-cache@npm:^3.0.4": version: 3.1.1 resolution: "flat-cache@npm:3.1.1" @@ -1589,6 +1677,18 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^9.0.0": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: ^1.0.0 + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20 + languageName: node + linkType: hard + "fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -1633,6 +1733,13 @@ __metadata: languageName: node linkType: hard +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 + languageName: node + linkType: hard + "gauge@npm:^4.0.3": version: 4.0.4 resolution: "gauge@npm:4.0.4" @@ -1649,6 +1756,19 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + dependencies: + es-errors: ^1.3.0 + function-bind: ^1.1.2 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + hasown: ^2.0.0 + checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951 + languageName: node + linkType: hard + "glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -1719,7 +1839,16 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.2.6": +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 @@ -1747,6 +1876,29 @@ __metadata: languageName: node linkType: hard +"has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: ^1.0.0 + checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 + languageName: node + linkType: hard + "has-unicode@npm:^2.0.1": version: 2.0.1 resolution: "has-unicode@npm:2.0.1" @@ -1754,6 +1906,15 @@ __metadata: languageName: node linkType: hard +"hasown@npm:^2.0.0": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: ^1.1.2 + checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -1878,6 +2039,15 @@ __metadata: languageName: node linkType: hard +"is-docker@npm:^2.0.0": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 + languageName: node + linkType: hard + "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -1929,6 +2099,22 @@ __metadata: languageName: node linkType: hard +"is-wsl@npm:^2.1.1": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: ^2.0.0 + checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -1997,6 +2183,38 @@ __metadata: languageName: node linkType: hard +"json-stable-stringify@npm:^1.0.2": + version: 1.1.1 + resolution: "json-stable-stringify@npm:1.1.1" + dependencies: + call-bind: ^1.0.5 + isarray: ^2.0.5 + jsonify: ^0.0.1 + object-keys: ^1.1.1 + checksum: e1ba06600fd278767eeff53f28e408e29c867e79abf564e7aadc3ce8f31f667258f8db278ef28831e45884dd687388fa1910f46e599fc19fb94c9afbbe3a4de8 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^2.0.0 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + languageName: node + linkType: hard + +"jsonify@npm:^0.0.1": + version: 0.0.1 + resolution: "jsonify@npm:0.0.1" + checksum: 027287e1c0294fce15f18c0ff990cfc2318e7f01fb76515f784d5cd0784abfec6fc5c2355c3a2f2cb0ad7f4aa2f5b74ebbfe4e80476c35b2d13cabdb572e1134 + languageName: node + linkType: hard + "keyv@npm:^4.5.3": version: 4.5.4 resolution: "keyv@npm:4.5.4" @@ -2006,6 +2224,15 @@ __metadata: languageName: node linkType: hard +"klaw-sync@npm:^6.0.0": + version: 6.0.0 + resolution: "klaw-sync@npm:6.0.0" + dependencies: + graceful-fs: ^4.1.11 + checksum: 0da397f8961313c3ef8f79fb63af9002cde5a8fb2aeb1a37351feff0dd6006129c790400c3f5c3b4e757bedcabb13d21ec0a5eaef5a593d59515d4f2c291e475 + languageName: node + linkType: hard + "kuler@npm:^2.0.0": version: 2.0.0 resolution: "kuler@npm:2.0.0" @@ -2120,6 +2347,16 @@ __metadata: languageName: node linkType: hard +"micromatch@npm:^4.0.2": + version: 4.0.7 + resolution: "micromatch@npm:4.0.7" + dependencies: + braces: ^3.0.3 + picomatch: ^2.3.1 + checksum: 3cde047d70ad80cf60c787b77198d680db3b8c25b23feb01de5e2652205d9c19f43bd81882f69a0fd1f0cde6a7a122d774998aad3271ddb1b8accf8a0f480cf7 + languageName: node + linkType: hard + "micromatch@npm:^4.0.4": version: 4.0.5 resolution: "micromatch@npm:4.0.5" @@ -2164,6 +2401,13 @@ __metadata: languageName: node linkType: hard +"minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + "minipass-collect@npm:^1.0.2": version: 1.0.2 resolution: "minipass-collect@npm:1.0.2" @@ -2367,6 +2611,13 @@ __metadata: languageName: node linkType: hard +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a + languageName: node + linkType: hard + "once@npm:^1.3.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -2385,6 +2636,16 @@ __metadata: languageName: node linkType: hard +"open@npm:^7.4.2": + version: 7.4.2 + resolution: "open@npm:7.4.2" + dependencies: + is-docker: ^2.0.0 + is-wsl: ^2.1.1 + checksum: 3333900ec0e420d64c23b831bc3467e57031461d843c801f569b2204a1acc3cd7b3ec3c7897afc9dde86491dfa289708eb92bba164093d8bd88fb2c231843c91 + languageName: node + linkType: hard + "optionator@npm:^0.9.3": version: 0.9.3 resolution: "optionator@npm:0.9.3" @@ -2399,6 +2660,13 @@ __metadata: languageName: node linkType: hard +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d + languageName: node + linkType: hard + "p-limit@npm:^3.0.2": version: 3.1.0 resolution: "p-limit@npm:3.1.0" @@ -2435,6 +2703,31 @@ __metadata: languageName: node linkType: hard +"patch-package@npm:^8.0.0": + version: 8.0.0 + resolution: "patch-package@npm:8.0.0" + dependencies: + "@yarnpkg/lockfile": ^1.1.0 + chalk: ^4.1.2 + ci-info: ^3.7.0 + cross-spawn: ^7.0.3 + find-yarn-workspace-root: ^2.0.0 + fs-extra: ^9.0.0 + json-stable-stringify: ^1.0.2 + klaw-sync: ^6.0.0 + minimist: ^1.2.6 + open: ^7.4.2 + rimraf: ^2.6.3 + semver: ^7.5.3 + slash: ^2.0.0 + tmp: ^0.0.33 + yaml: ^2.2.2 + bin: + patch-package: index.js + checksum: d23cddc4d1622e2d8c7ca31b145c6eddb24bd271f69905e766de5e1f199f0b9a5479a6a6939ea857288399d4ed249285639d539a2c00fbddb7daa39934b007a2 + languageName: node + linkType: hard + "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -2575,9 +2868,10 @@ __metadata: eslint: ^8.51.0 eslint-config-prettier: ^9.0.0 nodemon: ^3.0.1 + patch-package: ^8.0.0 prettier: ^3.0.3 ts-node: ^10.9.2 - typescript: ^5.2.2 + typescript: ~5.2.2 viem: ^1.16.5 winston: ^3.11.0 languageName: unknown @@ -2604,6 +2898,17 @@ __metadata: languageName: node linkType: hard +"rimraf@npm:^2.6.3": + version: 2.7.1 + resolution: "rimraf@npm:2.7.1" + dependencies: + glob: ^7.1.3 + bin: + rimraf: ./bin.js + checksum: cdc7f6eacb17927f2a075117a823e1c5951792c6498ebcce81ca8203454a811d4cf8900314154d3259bb8f0b42ab17f67396a8694a54cae3283326e57ad250cd + languageName: node + linkType: hard + "rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" @@ -2679,6 +2984,20 @@ __metadata: languageName: node linkType: hard +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + 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 + checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 + languageName: node + linkType: hard + "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -2727,6 +3046,13 @@ __metadata: languageName: node linkType: hard +"slash@npm:^2.0.0": + version: 2.0.0 + resolution: "slash@npm:2.0.0" + checksum: 512d4350735375bd11647233cb0e2f93beca6f53441015eea241fe784d8068281c3987fbaa93e7ef1c38df68d9c60013045c92837423c69115297d6169aa85e6 + languageName: node + linkType: hard + "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -2880,6 +3206,15 @@ __metadata: languageName: node linkType: hard +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: ~1.0.2 + checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 + languageName: node + linkType: hard + "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -2984,7 +3319,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.2.2": +"typescript@npm:~5.2.2": version: 5.2.2 resolution: "typescript@npm:5.2.2" bin: @@ -2994,9 +3329,9 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@^5.2.2#~builtin": +"typescript@patch:typescript@~5.2.2#~builtin": version: 5.2.2 - resolution: "typescript@patch:typescript@npm%3A5.2.2#~builtin::version=5.2.2&hash=7ad353" + resolution: "typescript@patch:typescript@npm%3A5.2.2#~builtin::version=5.2.2&hash=f456af" bin: tsc: bin/tsc tsserver: bin/tsserver @@ -3036,6 +3371,13 @@ __metadata: languageName: node linkType: hard +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -3196,6 +3538,15 @@ __metadata: languageName: node linkType: hard +"yaml@npm:^2.2.2": + version: 2.4.5 + resolution: "yaml@npm:2.4.5" + bin: + yaml: bin.mjs + checksum: f8efd407c07e095f00f3031108c9960b2b12971d10162b1ec19007200f6c987d2e28f73283f4731119aa610f177a3ea03d4a8fcf640600a25de1b74d00c69b3d + languageName: node + linkType: hard + "yn@npm:3.1.1": version: 3.1.1 resolution: "yn@npm:3.1.1" From a0a9abd5c9bac67d78ec6ab7b99ff8206c476d02 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Thu, 11 Jul 2024 16:49:25 +0200 Subject: [PATCH 48/81] feat: CCIP Reporter controller --- packages/reporter/.env.example | 1 + .../src/ABIs/CCIPReporterContractABI.json | 368 +++++++++++++++ .../src/controllers/CCIPReporterController.ts | 43 ++ packages/reporter/src/index.ts | 428 +++++++++--------- packages/reporter/src/settings/index.ts | 2 + 5 files changed, 635 insertions(+), 207 deletions(-) create mode 100644 packages/reporter/src/ABIs/CCIPReporterContractABI.json create mode 100644 packages/reporter/src/controllers/CCIPReporterController.ts diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index c15b0392..dad27e33 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -36,6 +36,7 @@ DESTINATION_CHAIN_IDS=100 SEPOLIA_CHIADO_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 CHIADO_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B +SEPOLIA_CHIADO_CCIP_REPORTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 SYMGA_ADAPTER=0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15 GNOSIS_TELEPATHY_ADAPTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 diff --git a/packages/reporter/src/ABIs/CCIPReporterContractABI.json b/packages/reporter/src/ABIs/CCIPReporterContractABI.json new file mode 100644 index 00000000..fdd75331 --- /dev/null +++ b/packages/reporter/src/ABIs/CCIPReporterContractABI.json @@ -0,0 +1,368 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "headerStorage", + "type": "address" + }, + { + "internalType": "address", + "name": "yaho", + "type": "address" + }, + { + "internalType": "address", + "name": "ccipRouter", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ChainSelectorNotAvailable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "expectedYaho", + "type": "address" + } + ], + "name": "NotYaho", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "blockHeader", + "type": "bytes32" + } + ], + "name": "BlockDispatched", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint64", + "name": "chainSelector", + "type": "uint64" + } + ], + "name": "ChainSelectorSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "name": "FeeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "messageId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "messageHash", + "type": "bytes32" + } + ], + "name": "MessageDispatched", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "CCIP_ROUTER", + "outputs": [ + { + "internalType": "contract IRouterClient", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "HEADER_STORAGE", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROVIDER", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "YAHO", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "chainSelectors", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + } + ], + "name": "dispatchBlocks", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "messageIds", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "messageHashes", + "type": "bytes32[]" + } + ], + "name": "dispatchMessages", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "fee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "chainSelector", + "type": "uint64" + } + ], + "name": "setChainSelectorByChainId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "fee_", + "type": "uint256" + } + ], + "name": "setFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/packages/reporter/src/controllers/CCIPReporterController.ts b/packages/reporter/src/controllers/CCIPReporterController.ts new file mode 100644 index 00000000..702bdb03 --- /dev/null +++ b/packages/reporter/src/controllers/CCIPReporterController.ts @@ -0,0 +1,43 @@ +import { Chain } from "viem" +import ABI from "../ABIs/CCIPReporterContractABI.json" assert { type: "json" } + +import BaseController from "./BaseController.js" + +import { BaseControllerConfigs } from "./BaseController.js" + +class CCIPReporterController extends BaseController { + constructor(_configs: BaseControllerConfigs) { + super(_configs, "CCIPReporterController") + } + + async onBlocks(_blockNumbers: bigint[]) { + try { + const client = this.multiClient.getClientByChain(this.sourceChain) + + for (const chain of this.destinationChains as Chain[]) { + const blockNumber = _blockNumbers[_blockNumbers.length - 1] + + this.logger.info( + `reporting block header for block from ${_blockNumbers[0]} to ${_blockNumbers[_blockNumbers.length - 1]} on ${ + chain.name + } ...`, + ) + + const { request } = await client.simulateContract({ + address: this.reporterAddress as `0x${string}`, + abi: ABI, + functionName: "dispatchBlocks", + args: [chain.id, this.adapterAddresses[chain.name], [blockNumber]], + value: 200000000000000, // fee + }) + + const txHash = await client.writeContract(request) + this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) + } + } catch (_error) { + this.logger.error(_error) + } + } +} + +export default CCIPReporterController diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 03c73de3..39699784 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -22,6 +22,7 @@ import SygmaReporterController from "./controllers/SygmaReporterController.js" import StandardReporterController from "./controllers/StandardReporterController.js" import TelepathyReporterController from "./controllers/TelepathyReporterController.js" import WormholeReporterController from "./controllers/WormholeReporterController.js" +import CCIPReporterController from "./controllers/CCIPReporterController.js" import Coordinator from "./Coordinator.js" import { settings } from "./settings/index.js" import logger from "./utils/logger.js" @@ -69,228 +70,241 @@ const main = () => { }, }) - // const sygmaReporterController = new SygmaReporterController({ - // type: "classic", - // sourceChain, - // destinationChains, - // logger, - // multiClient, - // reporterAddresses: { - // [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosis.name]?.SygmaReporter, - // }, - // adapterAddresses: { - // [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Gnosis?.SygmaAdapter, - // }, - // }) + const ccipReporterController = new CCIPReporterController({ + type: "classic", + sourceChain, + destinationChains: destinationChains.filter(({ name }) => name === gnosisChiado.name), + logger, + multiClient, + reporterAddress: unidirectionalReportersAddresses[sourceChain.name]?.[destinationChains[0].name]?.CCIPReporter, + adapterAddresses: { + [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[destinationChains[0].name]?.CCIPAdapter, + }, + }) - // const telepathyReporterController = new TelepathyReporterController({ - // type: "lightClient", - // sourceChain, - // destinationChains, - // logger, - // multiClient, - // adapterAddresses: { - // [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Gnosis?.TelepathyAdapter, - // [arbitrum.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["Arbitrum One"]?.TelepathyAdapter, - // [optimism.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["OP Mainnet"]?.TelepathyAdapter, - // [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["BNB Smart Chain"]?.TelepathyAdapter, - // [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Polygon?.TelepathyAdapter, - // }, - // baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, - // lightClientAddresses: { - // [gnosis.name]: lightClientAddresses.Gnosis?.[sourceChain.name]?.TelepathyLightClient, - // [arbitrum.name]: lightClientAddresses["Arbitrum One"]?.[sourceChain.name]?.TelepathyLightClient, - // [optimism.name]: lightClientAddresses["OP Mainnet"]?.[sourceChain.name]?.TelepathyLightClient, - // [bsc.name]: lightClientAddresses["BNB Smart Chain"]?.[sourceChain.name]?.TelepathyLightClient, - // [polygon.name]: lightClientAddresses.Polygon?.[sourceChain.name]?.TelepathyLightClient, - // }, - // }) + const sygmaReporterController = new SygmaReporterController({ + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddresses: { + [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosis.name]?.SygmaReporter, + }, + adapterAddresses: { + [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Gnosis?.SygmaAdapter, + }, + }) + + const telepathyReporterController = new TelepathyReporterController({ + type: "lightClient", + sourceChain, + destinationChains, + logger, + multiClient, + adapterAddresses: { + [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Gnosis?.TelepathyAdapter, + [arbitrum.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["Arbitrum One"]?.TelepathyAdapter, + [optimism.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["OP Mainnet"]?.TelepathyAdapter, + [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["BNB Smart Chain"]?.TelepathyAdapter, + [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Polygon?.TelepathyAdapter, + }, + baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, + lightClientAddresses: { + [gnosis.name]: lightClientAddresses.Gnosis?.[sourceChain.name]?.TelepathyLightClient, + [arbitrum.name]: lightClientAddresses["Arbitrum One"]?.[sourceChain.name]?.TelepathyLightClient, + [optimism.name]: lightClientAddresses["OP Mainnet"]?.[sourceChain.name]?.TelepathyLightClient, + [bsc.name]: lightClientAddresses["BNB Smart Chain"]?.[sourceChain.name]?.TelepathyLightClient, + [polygon.name]: lightClientAddresses.Polygon?.[sourceChain.name]?.TelepathyLightClient, + }, + }) - // const wormholeReporterController = new WormholeReporterController({ - // type: "classic", - // sourceChain, - // destinationChains, - // logger, - // multiClient, - // reporterAddress: (settings.contractAddresses.reporterAddresses as any)[sourceChain.name]?.WormholeHeaderReporter, - // adapterAddresses: { - // [gnosis.name]: (settings.contractAddresses.adapterAddresses as any)?.Gnosis?.WormholeAdapter, - // [optimism.name]: (settings.contractAddresses.adapterAddresses as any)["OP Mainnet"]?.WormholeAdapter, - // [bsc.name]: (settings.contractAddresses.adapterAddresses as any)["BNB Smart Chain"]?.WormholeAdapter, - // [polygon.name]: (settings.contractAddresses.adapterAddresses as any)?.Polygon.WormholeAdapter, - // [avalanche.name]: (settings.contractAddresses.adapterAddresses as any)?.Avalanche.WormholeAdapter, - // }, - // wormholeScanBaseUrl: settings.reporterControllers.WormholeReporterController.wormholeScanBaseUrl, - // wormholeAddress: (settings.contractAddresses as any)[sourceChain.name]?.Wormhole, - // wormholeChainIds: settings.reporterControllers.WormholeReporterController.wormholeChainIds, - // }) + const wormholeReporterController = new WormholeReporterController({ + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddress: (settings.contractAddresses.reporterAddresses as any)[sourceChain.name]?.WormholeHeaderReporter, + adapterAddresses: { + [gnosis.name]: (settings.contractAddresses.adapterAddresses as any)?.Gnosis?.WormholeAdapter, + [optimism.name]: (settings.contractAddresses.adapterAddresses as any)["OP Mainnet"]?.WormholeAdapter, + [bsc.name]: (settings.contractAddresses.adapterAddresses as any)["BNB Smart Chain"]?.WormholeAdapter, + [polygon.name]: (settings.contractAddresses.adapterAddresses as any)?.Polygon.WormholeAdapter, + [avalanche.name]: (settings.contractAddresses.adapterAddresses as any)?.Avalanche.WormholeAdapter, + }, + wormholeScanBaseUrl: settings.reporterControllers.WormholeReporterController.wormholeScanBaseUrl, + wormholeAddress: (settings.contractAddresses as any)[sourceChain.name]?.Wormhole, + wormholeChainIds: settings.reporterControllers.WormholeReporterController.wormholeChainIds, + }) - // // TODO: add check to prevent to always run OptimismReporterController even when destinationChains does not include optimism - // const optimismReporterController = new OptimismReporterController({ - // type: "native", - // sourceChain, - // logger, - // multiClient, - // reporterAddress: - // settings.contractAddresses.reporterAddresses.unidirectional.Ethereum["OP Mainnet"] - // .L1CrossDomainMessengerHeaderReporter, - // adapterAddresses: { - // [optimism.name]: - // settings.contractAddresses.adapterAddresses.unidirectional.Ethereum["OP Mainnet"].L2CrossDomainMessengerAdapter, - // }, - // }) + // TODO: add check to prevent to always run OptimismReporterController even when destinationChains does not include optimism + const optimismReporterController = new OptimismReporterController({ + type: "native", + sourceChain, + logger, + multiClient, + reporterAddress: + settings.contractAddresses.reporterAddresses.unidirectional.Ethereum["OP Mainnet"] + .L1CrossDomainMessengerHeaderReporter, + adapterAddresses: { + [optimism.name]: + settings.contractAddresses.adapterAddresses.unidirectional.Ethereum["OP Mainnet"].L2CrossDomainMessengerAdapter, + }, + }) - // const axelarReporterController = new StandardReporterController({ - // name: "AxelarReporterController", - // type: "classic", - // sourceChain, - // destinationChains, - // logger, - // multiClient, - // reporterAddresses: { - // [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.AxelarReporter, - // }, - // adapterAddresses: { - // [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.AxelarAdapter, - // }, - // reportHeadersValue: settings.reporterControllers.AxelarReporterController.reportHeadersValue, - // }) + const axelarReporterController = new StandardReporterController({ + name: "AxelarReporterController", + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddresses: { + [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.AxelarReporter, + }, + adapterAddresses: { + [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.AxelarAdapter, + }, + reportHeadersValue: settings.reporterControllers.AxelarReporterController.reportHeadersValue, + }) - // const connextReporterController = new StandardReporterController({ - // name: "ConnextReporterController", - // type: "classic", - // sourceChain, - // destinationChains, - // logger, - // multiClient, - // reporterAddresses: { - // [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosis.name]?.ConnextReporter, - // }, - // adapterAddresses: { - // [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[gnosis.name]?.ConnextAdapter, - // }, - // reportHeadersValue: settings.reporterControllers.ConnextReporterController.reportHeadersValue, - // }) + const connextReporterController = new StandardReporterController({ + name: "ConnextReporterController", + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddresses: { + [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosis.name]?.ConnextReporter, + }, + adapterAddresses: { + [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[gnosis.name]?.ConnextAdapter, + }, + reportHeadersValue: settings.reporterControllers.ConnextReporterController.reportHeadersValue, + }) - // const celerReporterController = new StandardReporterController({ - // name: "CelerReporterController", - // type: "classic", - // sourceChain, - // destinationChains, - // logger, - // multiClient, - // reporterAddresses: { - // [polygon.name]: unidirectionalReportersAddresses[sourceChain.name]?.[polygon.name]?.CelerReporter, - // }, - // adapterAddresses: { - // [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[polygon.name]?.CelerAdapter, - // }, - // reportHeadersValue: settings.reporterControllers.CelerReporterController.reportHeadersValue, - // }) + const celerReporterController = new StandardReporterController({ + name: "CelerReporterController", + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddresses: { + [polygon.name]: unidirectionalReportersAddresses[sourceChain.name]?.[polygon.name]?.CelerReporter, + }, + adapterAddresses: { + [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[polygon.name]?.CelerAdapter, + }, + reportHeadersValue: settings.reporterControllers.CelerReporterController.reportHeadersValue, + }) - // const layerZeroReporterController = new StandardReporterController({ - // name: "LayerZeroReporterController", - // type: "classic", - // sourceChain, - // destinationChains, - // logger, - // multiClient, - // reporterAddresses: { - // [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroReporter, - // [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroReporter, - // }, - // adapterAddresses: { - // [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroAdapter, - // [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroAdapter, - // }, - // reportHeadersValue: settings.reporterControllers.LayerZeroReporterController.reportHeadersValue, - // }) + const layerZeroReporterController = new StandardReporterController({ + name: "LayerZeroReporterController", + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddresses: { + [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroReporter, + [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroReporter, + }, + adapterAddresses: { + [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroAdapter, + [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroAdapter, + }, + reportHeadersValue: settings.reporterControllers.LayerZeroReporterController.reportHeadersValue, + }) - // const hyperlaneReporterController = new StandardReporterController({ - // name: "HyperlaneReporterController", - // type: "classic", - // sourceChain, - // destinationChains, - // logger, - // multiClient, - // reporterAddresses: { - // [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.HyperlaneReporter, - // }, - // adapterAddresses: { - // [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.HyperlaneAdapter, - // }, - // }) + const hyperlaneReporterController = new StandardReporterController({ + name: "HyperlaneReporterController", + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddresses: { + [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.HyperlaneReporter, + }, + adapterAddresses: { + [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.HyperlaneAdapter, + }, + }) - // const ccipReporterController = new StandardReporterController({ - // name: "CCIPReporterController", - // type: "classic", - // sourceChain, - // destinationChains, - // logger, - // multiClient, - // reporterAddresses: { - // [optimismGoerli.name]: unidirectionalReportersAddresses[sourceChain.name]?.[optimismGoerli.name]?.CCIPReporter, - // [bscTestnet.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bscTestnet.name]?.CCIPReporter, - // [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.CCIPReporter, - // }, - // adapterAddresses: { - // [optimismGoerli.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[optimismGoerli.name]?.CCIPAdapter, - // [bscTestnet.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bscTestnet.name]?.CCIPAdapter, - // [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.CCIPAdapter, - // }, - // reportHeadersValue: settings.reporterControllers.CCIPReporterController.reportHeadersValue, - // }) + const ccipReporterController = new StandardReporterController({ + name: "CCIPReporterController", + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddresses: { + [optimismGoerli.name]: unidirectionalReportersAddresses[sourceChain.name]?.[optimismGoerli.name]?.CCIPReporter, + [bscTestnet.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bscTestnet.name]?.CCIPReporter, + [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.CCIPReporter, + }, + adapterAddresses: { + [optimismGoerli.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[optimismGoerli.name]?.CCIPAdapter, + [bscTestnet.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bscTestnet.name]?.CCIPAdapter, + [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.CCIPAdapter, + }, + reportHeadersValue: settings.reporterControllers.CCIPReporterController.reportHeadersValue, + }) - // const zetaReporterController = new StandardReporterController({ - // name: "ZetaReporterController", - // type: "classic", - // sourceChain, - // destinationChains, - // logger, - // multiClient, - // reporterAddresses: { - // [bscTestnet.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bscTestnet.name]?.ZetaChainReporter, - // }, - // adapterAddresses: { - // [bscTestnet.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bscTestnet.name]?.ZetaChainAdapter, - // }, - // reportHeadersValue: settings.reporterControllers.ZetaReporterController.reportHeadersValue, - // }) + const zetaReporterController = new StandardReporterController({ + name: "ZetaReporterController", + type: "classic", + sourceChain, + destinationChains, + logger, + multiClient, + reporterAddresses: { + [bscTestnet.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bscTestnet.name]?.ZetaChainReporter, + }, + adapterAddresses: { + [bscTestnet.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bscTestnet.name]?.ZetaChainAdapter, + }, + reportHeadersValue: settings.reporterControllers.ZetaReporterController.reportHeadersValue, + }) - // const electronReporterController = new ElectronReporterController({ - // type: "lightClient", - // sourceChain, - // destinationChains, - // logger, - // multiClient, - // adapterAddresses: { - // [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["Gnosis Chiado"]?.ElectronAdapter, - // }, - // headerStorageAddress: (settings.contractAddresses as any)[sourceChain.name].HeaderStorage, - // lightClientAddresses: { - // [gnosisChiado.name]: lightClientAddresses["Gnosis Chiado"]?.[sourceChain.name]?.ElectronLightClient, - // }, - // beaconchaBaseUrl: (settings.reporterControllers.ElectronReporterController.beaconchaBaseUrls as any)[ - // sourceChain.name - // ], - // beaconApiBaseUrl: (settings.beaconApiUrls as any)[sourceChain.name], - // }) + const electronReporterController = new ElectronReporterController({ + type: "lightClient", + sourceChain, + destinationChains, + logger, + multiClient, + adapterAddresses: { + [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["Gnosis Chiado"]?.ElectronAdapter, + }, + headerStorageAddress: (settings.contractAddresses as any)[sourceChain.name].HeaderStorage, + lightClientAddresses: { + [gnosisChiado.name]: lightClientAddresses["Gnosis Chiado"]?.[sourceChain.name]?.ElectronLightClient, + }, + beaconchaBaseUrl: (settings.reporterControllers.ElectronReporterController.beaconchaBaseUrls as any)[ + sourceChain.name + ], + beaconApiBaseUrl: (settings.beaconApiUrls as any)[sourceChain.name], + }) const coordinator = new Coordinator({ controllers: [ ambReporterController, - // sygmaReporterController, - // telepathyReporterController, - // wormholeReporterController, - // optimismReporterController, - // axelarReporterController, - // connextReporterController, - // celerReporterController, - // layerZeroReporterController, - // hyperlaneReporterController, - // ccipReporterController, - // zetaReporterController, - // electronReporterController, + ccipReporterController, + sygmaReporterController, + telepathyReporterController, + wormholeReporterController, + optimismReporterController, + axelarReporterController, + connextReporterController, + celerReporterController, + layerZeroReporterController, + hyperlaneReporterController, + ccipReporterController, + zetaReporterController, + electronReporterController, ].filter((_controller) => controllersEnabled?.includes(_controller.name)), intervalFetchBlocksMs: settings.Coordinator.intervalFetchBlocksMs, logger, diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index eb4cf97e..7a92d247 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -85,6 +85,7 @@ export const settings = { }, [gnosisChiado.name]: { AMBAdapter: process.env.CHIADO_ADAPTER as `0x${string}`, + CCIPAdapter: process.env.SEPOLIA_CHIADO_CCIP_ADAPTER as `0x${string}`, }, }, [goerli.name]: { @@ -146,6 +147,7 @@ export const settings = { }, [gnosisChiado.name]: { AMBReporter: process.env.SEPOLIA_CHIADO_REPORTER as `0x${string}`, + CCIPReporter: process.env.SEPOLIA_CHIADO_CCIP_REPORTER as `0x${string}`, }, }, [goerli.name]: { From adbf1ee38ed087c638ff2884569170d92ec0fe3f Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Thu, 11 Jul 2024 22:41:08 +0200 Subject: [PATCH 49/81] chore: change AMB controller into Standard controller --- packages/reporter/.env.example | 3 + .../ABIs/LayerZeroReporterContractABI.json | 368 ++++++++++++++++++ packages/reporter/src/Coordinator.ts | 1 + .../src/controllers/AMBReporterController.ts | 43 -- .../src/controllers/CCIPReporterController.ts | 43 -- packages/reporter/src/index.ts | 34 +- packages/reporter/src/settings/index.ts | 9 + 7 files changed, 398 insertions(+), 103 deletions(-) create mode 100644 packages/reporter/src/ABIs/LayerZeroReporterContractABI.json delete mode 100644 packages/reporter/src/controllers/AMBReporterController.ts delete mode 100644 packages/reporter/src/controllers/CCIPReporterController.ts diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index dad27e33..de90174e 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -37,6 +37,9 @@ DESTINATION_CHAIN_IDS=100 SEPOLIA_CHIADO_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 CHIADO_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B SEPOLIA_CHIADO_CCIP_REPORTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC +SEPOLIA_CHIADO_LZ_REPORTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 +SEPOLIA_CHIADO_LZ_ADAPTER= + AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 SYMGA_ADAPTER=0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15 GNOSIS_TELEPATHY_ADAPTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 diff --git a/packages/reporter/src/ABIs/LayerZeroReporterContractABI.json b/packages/reporter/src/ABIs/LayerZeroReporterContractABI.json new file mode 100644 index 00000000..6d6a228c --- /dev/null +++ b/packages/reporter/src/ABIs/LayerZeroReporterContractABI.json @@ -0,0 +1,368 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "headerStorage", + "type": "address" + }, + { + "internalType": "address", + "name": "yaho", + "type": "address" + }, + { + "internalType": "address", + "name": "lzEndpoint", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "EndpointIdNotAvailable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "expectedYaho", + "type": "address" + } + ], + "name": "NotYaho", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "blockHeader", + "type": "bytes32" + } + ], + "name": "BlockDispatched", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint16", + "name": "endpointId", + "type": "uint16" + } + ], + "name": "EndpointIdSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "name": "FeeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "messageId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "messageHash", + "type": "bytes32" + } + ], + "name": "MessageDispatched", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "HEADER_STORAGE", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "LAYER_ZERO_ENDPOINT", + "outputs": [ + { + "internalType": "contract ILayerZeroEndpoint", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROVIDER", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "YAHO", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "blockNumbers", + "type": "uint256[]" + } + ], + "name": "dispatchBlocks", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetChainId", + "type": "uint256" + }, + { + "internalType": "contract IAdapter", + "name": "adapter", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "messageIds", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "messageHashes", + "type": "bytes32[]" + } + ], + "name": "dispatchMessages", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "endpointIds", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "fee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "uint16", + "name": "endpointId", + "type": "uint16" + } + ], + "name": "setEndpointIdByChainId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "fee_", + "type": "uint256" + } + ], + "name": "setFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/packages/reporter/src/Coordinator.ts b/packages/reporter/src/Coordinator.ts index aa97f878..8101e33a 100644 --- a/packages/reporter/src/Coordinator.ts +++ b/packages/reporter/src/Coordinator.ts @@ -47,6 +47,7 @@ class Coordinator { } start() { + console.log("controllers: ", this.controllers) this.fetchBlocks() this.intervals.push( setInterval(() => { diff --git a/packages/reporter/src/controllers/AMBReporterController.ts b/packages/reporter/src/controllers/AMBReporterController.ts deleted file mode 100644 index c6a0a474..00000000 --- a/packages/reporter/src/controllers/AMBReporterController.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Chain } from "viem" -import ABI from "../ABIs/AMBReporterContractABI.json" assert { type: "json" } - -import BaseController from "./BaseController.js" - -import { BaseControllerConfigs } from "./BaseController.js" - -class AMBReporterController extends BaseController { - constructor(_configs: BaseControllerConfigs) { - super(_configs, "AMBReporterController") - } - - async onBlocks(_blockNumbers: bigint[]) { - try { - const client = this.multiClient.getClientByChain(this.sourceChain) - - for (const chain of this.destinationChains as Chain[]) { - const blockNumber = _blockNumbers[_blockNumbers.length - 1] - - this.logger.info( - `reporting block header for block from ${_blockNumbers[0]} to ${_blockNumbers[_blockNumbers.length - 1]} on ${ - chain.name - } ...`, - ) - - const { request } = await client.simulateContract({ - address: this.reporterAddress as `0x${string}`, - abi: ABI, - functionName: "dispatchBlocks", - args: [chain.id, this.adapterAddresses[chain.name], [blockNumber]], - }) - - const txHash = await client.writeContract(request) - - this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) - } - } catch (_error) { - this.logger.error(_error) - } - } -} - -export default AMBReporterController diff --git a/packages/reporter/src/controllers/CCIPReporterController.ts b/packages/reporter/src/controllers/CCIPReporterController.ts deleted file mode 100644 index 702bdb03..00000000 --- a/packages/reporter/src/controllers/CCIPReporterController.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Chain } from "viem" -import ABI from "../ABIs/CCIPReporterContractABI.json" assert { type: "json" } - -import BaseController from "./BaseController.js" - -import { BaseControllerConfigs } from "./BaseController.js" - -class CCIPReporterController extends BaseController { - constructor(_configs: BaseControllerConfigs) { - super(_configs, "CCIPReporterController") - } - - async onBlocks(_blockNumbers: bigint[]) { - try { - const client = this.multiClient.getClientByChain(this.sourceChain) - - for (const chain of this.destinationChains as Chain[]) { - const blockNumber = _blockNumbers[_blockNumbers.length - 1] - - this.logger.info( - `reporting block header for block from ${_blockNumbers[0]} to ${_blockNumbers[_blockNumbers.length - 1]} on ${ - chain.name - } ...`, - ) - - const { request } = await client.simulateContract({ - address: this.reporterAddress as `0x${string}`, - abi: ABI, - functionName: "dispatchBlocks", - args: [chain.id, this.adapterAddresses[chain.name], [blockNumber]], - value: 200000000000000, // fee - }) - - const txHash = await client.writeContract(request) - this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) - } - } catch (_error) { - this.logger.error(_error) - } - } -} - -export default CCIPReporterController diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 39699784..bcbc6941 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -11,18 +11,18 @@ import { polygon, mainnet, sepolia, + optimismSepolia, } from "viem/chains" import { Chain } from "viem" import Multiclient from "./MultiClient.js" -import AMBReporterController from "./controllers/AMBReporterController.js" import ElectronReporterController from "./controllers/ElectronReporterController.js" import OptimismReporterController from "./controllers/OptimismReporterController.js" import SygmaReporterController from "./controllers/SygmaReporterController.js" import StandardReporterController from "./controllers/StandardReporterController.js" import TelepathyReporterController from "./controllers/TelepathyReporterController.js" import WormholeReporterController from "./controllers/WormholeReporterController.js" -import CCIPReporterController from "./controllers/CCIPReporterController.js" + import Coordinator from "./Coordinator.js" import { settings } from "./settings/index.js" import logger from "./utils/logger.js" @@ -58,27 +58,18 @@ const main = () => { rpcUrls: settings.rpcUrls, }) - const ambReporterController = new AMBReporterController({ + const ambReporterController = new StandardReporterController({ + name: "AMBReporterController", type: "classic", sourceChain, destinationChains: destinationChains.filter(({ name }) => name === gnosisChiado.name), logger, multiClient, - reporterAddress: unidirectionalReportersAddresses[sourceChain.name]?.[destinationChains[0].name]?.AMBReporter, - adapterAddresses: { - [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[destinationChains[0].name]?.AMBAdapter, + reporterAddresses: { + [gnosisChiado.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosisChiado.name]?.AMBReporter, }, - }) - - const ccipReporterController = new CCIPReporterController({ - type: "classic", - sourceChain, - destinationChains: destinationChains.filter(({ name }) => name === gnosisChiado.name), - logger, - multiClient, - reporterAddress: unidirectionalReportersAddresses[sourceChain.name]?.[destinationChains[0].name]?.CCIPReporter, adapterAddresses: { - [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[destinationChains[0].name]?.CCIPAdapter, + [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[gnosisChiado.name]?.AMBAdapter, }, }) @@ -206,15 +197,22 @@ const main = () => { type: "classic", sourceChain, destinationChains, + logger, multiClient, reporterAddresses: { [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroReporter, [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroReporter, + [gnosisChiado.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosisChiado.name]?.LayerZeroReporter, + [optimismSepolia.name]: + unidirectionalReportersAddresses[sourceChain.name]?.[optimismSepolia.name]?.LayerZeroReporter, }, adapterAddresses: { [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroAdapter, [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroAdapter, + [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[gnosisChiado.name]?.LayerZeroAdapter, + [optimismSepolia.name]: + unidirectionalAdaptersAddresses[sourceChain.name]?.[optimismSepolia.name]?.LayerZeroAdapter, }, reportHeadersValue: settings.reporterControllers.LayerZeroReporterController.reportHeadersValue, }) @@ -245,11 +243,13 @@ const main = () => { [optimismGoerli.name]: unidirectionalReportersAddresses[sourceChain.name]?.[optimismGoerli.name]?.CCIPReporter, [bscTestnet.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bscTestnet.name]?.CCIPReporter, [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.CCIPReporter, + [gnosisChiado.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosisChiado.name]?.CCIPReporter, }, adapterAddresses: { [optimismGoerli.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[optimismGoerli.name]?.CCIPAdapter, [bscTestnet.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bscTestnet.name]?.CCIPAdapter, [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.CCIPAdapter, + [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[gnosisChiado.name]?.CCIPAdapter, }, reportHeadersValue: settings.reporterControllers.CCIPReporterController.reportHeadersValue, }) @@ -279,7 +279,7 @@ const main = () => { adapterAddresses: { [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["Gnosis Chiado"]?.ElectronAdapter, }, - headerStorageAddress: (settings.contractAddresses as any)[sourceChain.name].HeaderStorage, + headerStorageAddress: (settings.contractAddresses as any)[sourceChain.name]?.HeaderStorage, lightClientAddresses: { [gnosisChiado.name]: lightClientAddresses["Gnosis Chiado"]?.[sourceChain.name]?.ElectronLightClient, }, diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 7a92d247..affe4b31 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -11,6 +11,7 @@ import { mainnet, optimism, optimismGoerli, + optimismSepolia, polygon, sepolia, } from "viem/chains" @@ -77,6 +78,9 @@ export const settings = { },*/ }, [sepolia.name]: { + [optimismSepolia.name]: { + LayerZeroAdapter: process.env.OPTIMISM_SEPOLIA_LZ_ADAPTER as `0x${string}`, + }, [optimismGoerli.name]: { CCIPAdapter: process.env.OPTIMISM_GOERLI_CCIP_ADAPTER_SEPOLIA as `0x${string}`, }, @@ -86,6 +90,7 @@ export const settings = { [gnosisChiado.name]: { AMBAdapter: process.env.CHIADO_ADAPTER as `0x${string}`, CCIPAdapter: process.env.SEPOLIA_CHIADO_CCIP_ADAPTER as `0x${string}`, + LayerZeroAdapter: process.env.SEPOLIA_CHIADO_LZ_ADAPTER as `0x${string}`, }, }, [goerli.name]: { @@ -139,6 +144,9 @@ export const settings = { }, }, [sepolia.name]: { + [optimismSepolia.name]: { + LayerZeroReporter: process.env.SEPOLIA_CHIADO_LZ_REPORTER as `0x${string}`, + }, [optimismGoerli.name]: { CCIPReporter: process.env.SEPOLIA_CCIP_REPORTER_OPTIMISM_GOERLI as `0x${string}`, }, @@ -148,6 +156,7 @@ export const settings = { [gnosisChiado.name]: { AMBReporter: process.env.SEPOLIA_CHIADO_REPORTER as `0x${string}`, CCIPReporter: process.env.SEPOLIA_CHIADO_CCIP_REPORTER as `0x${string}`, + LayerZeroReporter: process.env.SEPOLIA_CHIADO_LZ_REPORTER as `0x${string}`, }, }, [goerli.name]: { From f5d5e836f1c7b45916c3f4cfe9bdd9fea874fe09 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Fri, 12 Jul 2024 18:09:06 +0200 Subject: [PATCH 50/81] WIP: update LayerZero adapter to LZ v2 & fix controller config --- .../adapters/LayerZero/LayerZeroAdapter.sol | 28 ++++--- .../adapters/LayerZero/LayerZeroReporter.sol | 44 ++++++---- .../interfaces/ILayerZeroEndpointV2.sol | 84 +++++++++++++++++++ .../interfaces/ILayerZeroReceiver.sol | 14 ++-- packages/evm/package.json | 5 ++ packages/reporter/.env.example | 63 ++++++++++---- packages/reporter/src/index.ts | 28 +++++-- packages/reporter/src/settings/index.ts | 16 +++- 8 files changed, 220 insertions(+), 62 deletions(-) create mode 100644 packages/evm/contracts/adapters/LayerZero/interfaces/ILayerZeroEndpointV2.sol diff --git a/packages/evm/contracts/adapters/LayerZero/LayerZeroAdapter.sol b/packages/evm/contracts/adapters/LayerZero/LayerZeroAdapter.sol index e9688db8..6d683fc1 100644 --- a/packages/evm/contracts/adapters/LayerZero/LayerZeroAdapter.sol +++ b/packages/evm/contracts/adapters/LayerZero/LayerZeroAdapter.sol @@ -3,33 +3,41 @@ pragma solidity ^0.8.20; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; import { ILayerZeroReceiver } from "./interfaces/ILayerZeroReceiver.sol"; +import { Origin } from "./interfaces/ILayerZeroEndpointV2.sol"; import { BlockHashAdapter } from "../BlockHashAdapter.sol"; contract LayerZeroAdapter is BlockHashAdapter, Ownable, ILayerZeroReceiver { string public constant PROVIDER = "layer-zero"; address public immutable LAYER_ZERO_ENDPOINT; - mapping(uint32 => bytes32) public enabledReportersPaths; + mapping(uint32 => address) public enabledReporter; mapping(uint32 => uint256) public chainIds; error UnauthorizedLayerZeroReceive(); - event ReporterSet(uint256 indexed chainId, uint16 indexed endpointId, address indexed reporter); + event ReporterSet(uint256 indexed chainId, uint32 indexed endpointId, address indexed reporter); constructor(address lzEndpoint) { LAYER_ZERO_ENDPOINT = lzEndpoint; } - function lzReceive(uint16 srcEndpointId, bytes memory srcPath, uint64 /* nonce */, bytes memory payload) external { - if (msg.sender != LAYER_ZERO_ENDPOINT || enabledReportersPaths[srcEndpointId] != keccak256(srcPath)) - revert UnauthorizedLayerZeroReceive(); - uint256 sourceChainId = chainIds[srcEndpointId]; - (uint256[] memory ids, bytes32[] memory hashes) = abi.decode(payload, (uint256[], bytes32[])); - _storeHashes(sourceChainId, ids, hashes); + function lzReceive( + Origin calldata _origin, + bytes32 _guid, + bytes calldata _message, + address _executor, + bytes calldata _extraData + ) external payable { + if ( + msg.sender != LAYER_ZERO_ENDPOINT || + enabledReporter[_origin.srcEid] != address(uint160(uint256(_origin.sender))) + ) revert UnauthorizedLayerZeroReceive(); + (uint256[] memory ids, bytes32[] memory hashes) = abi.decode(_message, (uint256[], bytes32[])); + _storeHashes(chainIds[_origin.srcEid], ids, hashes); } - function setReporterByChain(uint256 chainId, uint16 endpointId, address reporter) external onlyOwner { - enabledReportersPaths[endpointId] = keccak256(abi.encodePacked(reporter, address(this))); + function setReporterByChain(uint256 chainId, uint32 endpointId, address reporter) external onlyOwner { + enabledReporter[endpointId] = reporter; chainIds[endpointId] = chainId; emit ReporterSet(chainId, endpointId, reporter); } diff --git a/packages/evm/contracts/adapters/LayerZero/LayerZeroReporter.sol b/packages/evm/contracts/adapters/LayerZero/LayerZeroReporter.sol index fc87b8af..a7d8c27f 100644 --- a/packages/evm/contracts/adapters/LayerZero/LayerZeroReporter.sol +++ b/packages/evm/contracts/adapters/LayerZero/LayerZeroReporter.sol @@ -2,54 +2,62 @@ pragma solidity ^0.8.20; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; -import { ILayerZeroEndpoint } from "./interfaces/ILayerZeroEndpoint.sol"; +import { ILayerZeroEndpointV2, MessagingParams } from "./interfaces/ILayerZeroEndpointV2.sol"; import { Reporter } from "../Reporter.sol"; +import { OptionsBuilder } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/libs/OptionsBuilder.sol"; contract LayerZeroReporter is Reporter, Ownable { + using OptionsBuilder for bytes; + string public constant PROVIDER = "layer-zero"; - ILayerZeroEndpoint public immutable LAYER_ZERO_ENDPOINT; + ILayerZeroEndpointV2 public immutable LAYER_ZERO_ENDPOINT; - mapping(uint256 => uint16) public endpointIds; - uint256 public fee; + mapping(uint256 => uint32) public endpointIds; + uint128 public fee; + address refundAddress; error EndpointIdNotAvailable(); - event EndpointIdSet(uint256 indexed chainId, uint16 indexed endpointId); + event EndpointIdSet(uint256 indexed chainId, uint32 indexed endpointId); event FeeSet(uint256 fee); constructor(address headerStorage, address yaho, address lzEndpoint) Reporter(headerStorage, yaho) { - LAYER_ZERO_ENDPOINT = ILayerZeroEndpoint(lzEndpoint); + LAYER_ZERO_ENDPOINT = ILayerZeroEndpointV2(lzEndpoint); } - function setEndpointIdByChainId(uint256 chainId, uint16 endpointId) external onlyOwner { + function setEndpointIdByChainId(uint256 chainId, uint32 endpointId) external onlyOwner { endpointIds[chainId] = endpointId; emit EndpointIdSet(chainId, endpointId); } - function setFee(uint256 fee_) external onlyOwner { + function setFee(uint128 fee_) external onlyOwner { fee = fee_; emit FeeSet(fee); } + function setRefundAddress(address refundAddress_) external onlyOwner { + refundAddress = refundAddress_; + } + function _dispatch( uint256 targetChainId, address adapter, uint256[] memory ids, bytes32[] memory hashes ) internal override returns (bytes32) { - uint16 targetEndpointId = endpointIds[targetChainId]; + uint32 targetEndpointId = endpointIds[targetChainId]; if (targetEndpointId == 0) revert EndpointIdNotAvailable(); - bytes memory payload = abi.encode(ids, hashes); - bytes memory path = abi.encodePacked(adapter, address(this)); - // solhint-disable-next-line check-send-result - LAYER_ZERO_ENDPOINT.send{ value: fee }( + bytes memory options = OptionsBuilder.newOptions().addExecutorLzReceiveOption(fee, 0); + bytes memory message = abi.encode(ids, hashes); + MessagingParams memory params = MessagingParams( targetEndpointId, - path, - payload, - payable(msg.sender), // _refundAddress: refund address - address(0), // _zroPaymentAddress: future parameter - bytes("") // _adapterParams: adapterParams (see "Advanced Features") + bytes32(abi.encode(adapter)), + message, + options, + false // receiver in lz Token ); + // solhint-disable-next-line check-send-result + LAYER_ZERO_ENDPOINT.send{ value: msg.value }(params, refundAddress); return bytes32(0); } } diff --git a/packages/evm/contracts/adapters/LayerZero/interfaces/ILayerZeroEndpointV2.sol b/packages/evm/contracts/adapters/LayerZero/interfaces/ILayerZeroEndpointV2.sol new file mode 100644 index 00000000..6ced7ba9 --- /dev/null +++ b/packages/evm/contracts/adapters/LayerZero/interfaces/ILayerZeroEndpointV2.sol @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.0; + +struct MessagingParams { + uint32 dstEid; + bytes32 receiver; + bytes message; + bytes options; + bool payInLzToken; +} + +struct MessagingReceipt { + bytes32 guid; + uint64 nonce; + MessagingFee fee; +} + +struct MessagingFee { + uint256 nativeFee; + uint256 lzTokenFee; +} + +struct Origin { + uint32 srcEid; + bytes32 sender; + uint64 nonce; +} + +interface ILayerZeroEndpointV2 { + event PacketSent(bytes encodedPayload, bytes options, address sendLibrary); + + event PacketVerified(Origin origin, address receiver, bytes32 payloadHash); + + event PacketDelivered(Origin origin, address receiver); + + event LzReceiveAlert( + address indexed receiver, + address indexed executor, + Origin origin, + bytes32 guid, + uint256 gas, + uint256 value, + bytes message, + bytes extraData, + bytes reason + ); + + event LzTokenSet(address token); + + event DelegateSet(address sender, address delegate); + + function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory); + + function send( + MessagingParams calldata _params, + address _refundAddress + ) external payable returns (MessagingReceipt memory); + + function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external; + + function verifiable(Origin calldata _origin, address _receiver) external view returns (bool); + + function initializable(Origin calldata _origin, address _receiver) external view returns (bool); + + function lzReceive( + Origin calldata _origin, + address _receiver, + bytes32 _guid, + bytes calldata _message, + bytes calldata _extraData + ) external payable; + + // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order + function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external; + + function setLzToken(address _lzToken) external; + + function lzToken() external view returns (address); + + function nativeToken() external view returns (address); + + function setDelegate(address _delegate) external; +} diff --git a/packages/evm/contracts/adapters/LayerZero/interfaces/ILayerZeroReceiver.sol b/packages/evm/contracts/adapters/LayerZero/interfaces/ILayerZeroReceiver.sol index af1c7a87..6c6144da 100644 --- a/packages/evm/contracts/adapters/LayerZero/interfaces/ILayerZeroReceiver.sol +++ b/packages/evm/contracts/adapters/LayerZero/interfaces/ILayerZeroReceiver.sol @@ -1,11 +1,13 @@ // SPDX-License-Identifier: LGPL-3.0-only pragma solidity ^0.8.20; +import { Origin } from "./ILayerZeroEndpointV2.sol"; interface ILayerZeroReceiver { - // @notice LayerZero endpoint will invoke this function to deliver the message on the destination - // @param _srcChainId - the source endpoint identifier - // @param _srcAddress - the source sending contract address from the source chain - // @param _nonce - the ordered message nonce - // @param _payload - the signed payload is the UA bytes has encoded to be sent - function lzReceive(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) external; + function lzReceive( + Origin calldata _origin, + bytes32 _guid, + bytes calldata _message, + address _executor, + bytes calldata _extraData + ) external payable; } diff --git a/packages/evm/package.json b/packages/evm/package.json index 5a7ec34b..6af92c76 100644 --- a/packages/evm/package.json +++ b/packages/evm/package.json @@ -18,6 +18,7 @@ "@nomicfoundation/hardhat-chai-matchers": "^1.0.4", "@nomicfoundation/hardhat-network-helpers": "^1.0.8", "@nomicfoundation/hardhat-toolbox": "^2.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.8", "@nomiclabs/hardhat-ethers": "^2.2.1", "@nomiclabs/hardhat-etherscan": "^3.1.2", "@trivago/prettier-plugin-sort-imports": "^4.0.0", @@ -94,9 +95,13 @@ "@chainlink/contracts-ccip": "0.7.6", "@connext/interfaces": "2.0.0", "@hyperlane-xyz/core": "3.1.10", + "@layerzerolabs/lz-evm-messagelib-v2": "^2.3.29", + "@layerzerolabs/lz-evm-oapp-v2": "^2.3.29", + "@layerzerolabs/lz-evm-protocol-v2": "^2.3.29", "@openzeppelin/contracts-upgradeable": "4.8.1", "@polytope-labs/solidity-merkle-trees": "0.2.1", "@routerprotocol/evm-gateway-contracts": "1.1.13", + "solidity-bytes-utils": "^0.8.2", "solidity-rlp": "2.0.8" } } diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index de90174e..0281cfb3 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -1,22 +1,23 @@ +# Fake private key PRIVATE_KEY= -REPORTERS_ENABLED=AMBReporterController,SygmaReporterController,TelepathyReporterController,WormholeReporterController,OptimismReporterController,AxelarReporterController,ConnextReporterController,CelerReporterController,LayerZeroReporterController,CCIPReporterController,ZetaReporterController - +REPORTERS_ENABLED=AMBReporterController,LayerZeroReporterController GNOSIS_RPC_URL=https://rpc.ankr.com/gnosis -MAINNET_RPC_URL= +MAINNET_RPC_URL=https://eth.llamarpc.com +BSC_RPC_URL=https://bsc-dataseed1.binance.org GOERLI_RPC_URL= -POLYGON_RPC_URL= +POLYGON_RPC_URL=https://polygon.llamarpc.com OPTIMISM_RPC_URL=https://optimism.llamarpc.com ARBITRUM_RPC_URL=https://arbitrum.llamarpc.com -SEPOLIA_RPC_URL= +SEPOLIA_RPC_URL=https://1rpc.io/sepolia CHIADO_RPC_URL=https://rpc.chiadochain.net GOERLI_BEACON_API_URL= -AMB_REPORTER_HEADERS_GAS=300000 +AMB_REPORTER_HEADERS_GAS=200000 AXELAR_REPORT_HEADERS_VALUE=0.0001 CELER_REPORT_HEADERS_VALUE=0.0001 -LAYER_ZERO_REPORT_HEADERS_VALUE=0.0007 -CCIP_REPORT_HEADERS_VALUE=0.0002 +LAYER_ZERO_REPORT_HEADERS_VALUE=0.0002 +CCIP_REPORT_HEADERS_VALUE=0.002 CONNEXT_REPORT_HEADERS_VALUE=0.00003 ZETA_CHAIN_REPORT_HEADERS_VALUE=0.001 @@ -31,19 +32,51 @@ TIME_FETCH_BLOCKS_MS=3600000 BLOCK_BUFFER=10 QUERY_BLOCK_LENGTH=200 -SOURCE_CHAIN_ID=5 -DESTINATION_CHAIN_IDS=100 +# For Testnet +SOURCE_CHAIN_ID=11155111 +DESTINATION_CHAIN_IDS=10200,421614 + +# For Mainnet +# SOURCE_CHAIN_ID=1 +# DESTINATION_CHAIN_IDS=137,56 + + +# Mainnet +## Layer Zero +MAINNET_LAYER_ZERO_REPORTER=0x3da176b43604aacf6178128865afccb21ee0f943 +BSC_MAINNET_LAYER_ZERO_ADAPTER=0x7237bb8d1d38DF8b473b5A38eD90088AF162ad8e +POLYGON_MAINNET_LAYER_ZERO_ADAPTER=0x79e4D1B8b8De0bC2F8A3DC477480C935C66F373E +## AMB +MAINNET_AMB_REPORTER=0xDbdF80c87f414fac8342e04D870764197bD3bAC7 +GNOSIS_AMB_ADAPTER=0x79e4D1B8b8De0bC2F8A3DC477480C935C66F373E + + +# Testnet SEPOLIA_CHIADO_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 -CHIADO_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B +CHIADO_SEPOLIA_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B + + + +# LEGACY +GNOSIS_AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 +GNOSIS_AMB_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 + SEPOLIA_CHIADO_CCIP_REPORTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC +SEPOLIA_CHIADO_CCIP_ADAPTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC # FAKE SEPOLIA_CHIADO_LZ_REPORTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 -SEPOLIA_CHIADO_LZ_ADAPTER= +SEPOLIA_CHIADO_LZ_ADAPTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 + +SEPOLIA_ARB_LZ_REPORTER=0x77B2cF15Ed888F3d5150E602d9805823Fdc8E51D +SEPOLIA_ARB_LZ_ADAPTER=0x117D7D593e6a7d9699a763C552BFA3177a46B957 -AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 +OPTIMISM_SEPOLIA_LZ_ADAPTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 +CHIADO_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B + +#AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 SYMGA_ADAPTER=0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15 GNOSIS_TELEPATHY_ADAPTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 -MAINNET_AMB_REPORTER=0x6be796cb66CdB3566b8AbebA2C516CbDF93fE831 +# MAINNET_AMB_REPORTER=0x6be796cb66CdB3566b8AbebA2C516CbDF93fE831 MAINNET_HEADER_REPORTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a POLYGON_TELEPATHY_ADAPTER=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 BSC_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 @@ -68,7 +101,7 @@ OPTIMISM_GOERLI_CCIP_ADAPTER_SEPOLIA=0x520185210Aa645220a49afD9C33d28b73494e14d SEPOLIA_CCIP_REPORTER_OPTIMISM_GOERLI=0xF3D2877866cd8E6771843b96B66aFcE425B2353C BSC_TESTNET_CCIP_ADAPTER_SEPOLIA=0xB6133Ab655B990E80Af3E948852C8ec2a46651A5 SEPOLIA_CCIP_REPORTER_BSC_TESTNET=0x855A2814E0DFf8327f1a52aCC9537772B829e226 -MAINNET_LAYER_ZERO_REPORTER_BSC=0x6E8793E22480e9Bfd6031E2230e68e1822193717 + BSC_LAYER_ZERO_ADAPTER_MAINNET=0xaC3c8D19A64B98d62ED16FFf8a4229E8ED36A469 GOERLI_ZETA_REPORTER_BSC_TESTNET=0x9a9fc484D3F83B489bc58c2A3EeeA8331F21796B BSC_TESTNET_ZETA_ADAPTER_GOERLI=0x2829D554678a767c5B091D28A0A294dB7643ec05 diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index bcbc6941..2e261371 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -1,5 +1,6 @@ import { arbitrum, + arbitrumSepolia, avalanche, bsc, bscTestnet, @@ -8,10 +9,10 @@ import { goerli, optimism, optimismGoerli, + optimismSepolia, polygon, mainnet, sepolia, - optimismSepolia, } from "viem/chains" import { Chain } from "viem" @@ -34,6 +35,7 @@ const main = () => { const chains = [ arbitrum, avalanche, + arbitrumSepolia, bsc, bscTestnet, gnosis, @@ -62,13 +64,15 @@ const main = () => { name: "AMBReporterController", type: "classic", sourceChain, - destinationChains: destinationChains.filter(({ name }) => name === gnosisChiado.name), + destinationChains: destinationChains.filter(({ name }) => name === gnosis.name || name === gnosisChiado.name), logger, multiClient, reporterAddresses: { + [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosis.name]?.AMBReporter, [gnosisChiado.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosisChiado.name]?.AMBReporter, }, adapterAddresses: { + [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[gnosis.name]?.AMBAdapter, [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[gnosisChiado.name]?.AMBAdapter, }, }) @@ -197,22 +201,28 @@ const main = () => { type: "classic", sourceChain, destinationChains, - logger, multiClient, reporterAddresses: { - [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroReporter, + // [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroReporter, + // [gnosisChiado.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosisChiado.name]?.LayerZeroReporter, + // [optimismSepolia.name]: + // unidirectionalReportersAddresses[sourceChain.name]?.[optimismSepolia.name]?.LayerZeroReporter, + [polygon.name]: unidirectionalReportersAddresses[sourceChain.name]?.[polygon.name]?.LayerZeroReporter, [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroReporter, - [gnosisChiado.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosisChiado.name]?.LayerZeroReporter, - [optimismSepolia.name]: - unidirectionalReportersAddresses[sourceChain.name]?.[optimismSepolia.name]?.LayerZeroReporter, + [arbitrumSepolia.name]: + unidirectionalReportersAddresses[sourceChain.name]?.[arbitrumSepolia.name]?.LayerZeroReporter, }, adapterAddresses: { - [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroAdapter, + [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[polygon.name]?.LayerZeroAdapter, [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroAdapter, - [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[gnosisChiado.name]?.LayerZeroAdapter, + + [arbitrumSepolia.name]: + unidirectionalAdaptersAddresses[sourceChain.name]?.[arbitrumSepolia.name]?.LayerZeroAdapter, [optimismSepolia.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[optimismSepolia.name]?.LayerZeroAdapter, + // [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[gnosisChiado.name]?.LayerZeroAdapter, + // [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroAdapter, }, reportHeadersValue: settings.reporterControllers.LayerZeroReporterController.reportHeadersValue, }) diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index affe4b31..d5190295 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -2,6 +2,7 @@ import "dotenv/config" import { parseEther } from "viem" import { arbitrum, + arbitrumSepolia, avalanche, bsc, bscTestnet, @@ -47,18 +48,18 @@ export const settings = { AxelarAdapter: process.env.BSC_AXELAR_ADAPTER_MAINNET as `0x${string}`, TelepathyAdapter: process.env.BSC_TELEPATHY_ADAPTER as `0x${string}`, HyperlaneAdapter: process.env.BSC_HYPERLANE_ADAPTER as `0x${string}`, - LayerZeroAdapter: process.env.BSC_LAYER_ZERO_ADAPTER_MAINNET as `0x${string}`, + LayerZeroAdapter: process.env.BSC_MAINNET_LAYER_ZERO_ADAPTER as `0x${string}`, }, [gnosis.name]: { TelepathyAdapter: process.env.GNOSIS_TELEPATHY_ADAPTER as `0x${string}`, AMBAdapter: process.env.GNOSIS_AMB_ADAPTER as `0x${string}`, - AMBReporter: process.env.GNOSIS_AMB_REPORTER as `0x${string}`, ConnextAdapter: process.env.GNOSIS_CONNEXT_ADAPTER_MAINNET as `0x${string}`, SygmaAdapter: process.env.GNOSIS_SYGMA_ADAPTER as `0x${string}`, // this works with many chains }, [polygon.name]: { TelepathyAdapter: process.env.POLYGON_TELEPATHY_ADAPTER as `0x${string}`, CelerAdapter: process.env.POLYGON_CELER_ADAPTER_MAINNET as `0x${string}`, + LayerZeroAdapter: process.env.POLYGON_MAINNET_LAYER_ZERO_ADAPTER as `0x${string}`, }, [optimism.name]: { TelepathyAdapter: process.env.OPTIMISM_TELEPATHY_ADAPTER as `0x${string}`, @@ -88,10 +89,13 @@ export const settings = { CCIPAdapter: process.env.BSC_TESTNET_CCIP_ADAPTER_SEPOLIA as `0x${string}`, }, [gnosisChiado.name]: { - AMBAdapter: process.env.CHIADO_ADAPTER as `0x${string}`, + AMBAdapter: process.env.CHIADO_SEPOLIA_ADAPTER as `0x${string}`, CCIPAdapter: process.env.SEPOLIA_CHIADO_CCIP_ADAPTER as `0x${string}`, LayerZeroAdapter: process.env.SEPOLIA_CHIADO_LZ_ADAPTER as `0x${string}`, }, + [arbitrumSepolia.name]: { + LayerZeroAdapter: process.env.SEPOLIA_ARB_LZ_ADAPTER as `0x${string}`, + }, }, [goerli.name]: { [bscTestnet.name]: { @@ -124,7 +128,7 @@ export const settings = { [bsc.name]: { AxelarReporter: process.env.MAINNET_AXELAR_REPORTER_BSC as `0x${string}`, HyperlaneReporter: process.env.MAINNET_HYPERLANE_REPORTER_BSC as `0x${string}`, - LayerZeroReporter: process.env.MAINNET_LAYER_ZERO_REPORTER_BSC as `0x${string}`, + LayerZeroReporter: process.env.MAINNET_LAYER_ZERO_REPORTER as `0x${string}`, }, [gnosis.name]: { AMBReporter: process.env.MAINNET_AMB_REPORTER as `0x${string}`, @@ -137,6 +141,7 @@ export const settings = { }, [polygon.name]: { CelerReporter: process.env.MAINNET_CELER_REPORTER_POLYGON as `0x${string}`, + LayerZeroReporter: process.env.MAINNET_LAYER_ZERO_REPORTER as `0x${string}`, }, [avalanche.name]: { LayerZeroReporter: process.env.MAINNET_LAYER_ZERO_REPORTER_AVALANCHE as `0x${string}`, @@ -158,6 +163,9 @@ export const settings = { CCIPReporter: process.env.SEPOLIA_CHIADO_CCIP_REPORTER as `0x${string}`, LayerZeroReporter: process.env.SEPOLIA_CHIADO_LZ_REPORTER as `0x${string}`, }, + [arbitrumSepolia.name]: { + LayerZeroReporter: process.env.SEPOLIA_ARB_LZ_REPORTER as `0x${string}`, + }, }, [goerli.name]: { [bscTestnet.name]: { From f2152686a2138a16e7341460c7b69df02f9bfd08 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Tue, 16 Jul 2024 04:41:42 +0800 Subject: [PATCH 51/81] fix: LayerZeroV2 Reporter & Adapter --- .../adapters/LayerZero/LayerZeroAdapter.sol | 17 +++++++++++++-- .../adapters/LayerZero/LayerZeroReporter.sol | 20 +++++++++++++++--- .../interfaces/ILayerZeroReceiver.sol | 4 ++++ .../evm/tasks/deploy/adapters/layerzero.ts | 21 ++++++++++++++----- 4 files changed, 52 insertions(+), 10 deletions(-) diff --git a/packages/evm/contracts/adapters/LayerZero/LayerZeroAdapter.sol b/packages/evm/contracts/adapters/LayerZero/LayerZeroAdapter.sol index 6d683fc1..0c112382 100644 --- a/packages/evm/contracts/adapters/LayerZero/LayerZeroAdapter.sol +++ b/packages/evm/contracts/adapters/LayerZero/LayerZeroAdapter.sol @@ -4,9 +4,10 @@ pragma solidity ^0.8.20; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; import { ILayerZeroReceiver } from "./interfaces/ILayerZeroReceiver.sol"; import { Origin } from "./interfaces/ILayerZeroEndpointV2.sol"; +import { OAppCore } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol"; import { BlockHashAdapter } from "../BlockHashAdapter.sol"; -contract LayerZeroAdapter is BlockHashAdapter, Ownable, ILayerZeroReceiver { +contract LayerZeroAdapter is BlockHashAdapter, Ownable, ILayerZeroReceiver, OAppCore { string public constant PROVIDER = "layer-zero"; address public immutable LAYER_ZERO_ENDPOINT; @@ -17,7 +18,7 @@ contract LayerZeroAdapter is BlockHashAdapter, Ownable, ILayerZeroReceiver { event ReporterSet(uint256 indexed chainId, uint32 indexed endpointId, address indexed reporter); - constructor(address lzEndpoint) { + constructor(address lzEndpoint, address delegate) OAppCore(lzEndpoint, delegate) { LAYER_ZERO_ENDPOINT = lzEndpoint; } @@ -36,6 +37,18 @@ contract LayerZeroAdapter is BlockHashAdapter, Ownable, ILayerZeroReceiver { _storeHashes(chainIds[_origin.srcEid], ids, hashes); } + function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public pure override returns (uint64 nonce) { + return 0; + } + + function allowInitializePath(Origin calldata origin) public view override returns (bool) { + return peers[origin.srcEid] == origin.sender; + } + + function oAppVersion() public pure virtual override returns (uint64 senderVersion, uint64 receiverVersion) { + return (1, 1); + } + function setReporterByChain(uint256 chainId, uint32 endpointId, address reporter) external onlyOwner { enabledReporter[endpointId] = reporter; chainIds[endpointId] = chainId; diff --git a/packages/evm/contracts/adapters/LayerZero/LayerZeroReporter.sol b/packages/evm/contracts/adapters/LayerZero/LayerZeroReporter.sol index a7d8c27f..eb7566e7 100644 --- a/packages/evm/contracts/adapters/LayerZero/LayerZeroReporter.sol +++ b/packages/evm/contracts/adapters/LayerZero/LayerZeroReporter.sol @@ -5,8 +5,9 @@ import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; import { ILayerZeroEndpointV2, MessagingParams } from "./interfaces/ILayerZeroEndpointV2.sol"; import { Reporter } from "../Reporter.sol"; import { OptionsBuilder } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/libs/OptionsBuilder.sol"; +import { OAppCore } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol"; -contract LayerZeroReporter is Reporter, Ownable { +contract LayerZeroReporter is Reporter, Ownable, OAppCore { using OptionsBuilder for bytes; string public constant PROVIDER = "layer-zero"; @@ -21,7 +22,16 @@ contract LayerZeroReporter is Reporter, Ownable { event EndpointIdSet(uint256 indexed chainId, uint32 indexed endpointId); event FeeSet(uint256 fee); - constructor(address headerStorage, address yaho, address lzEndpoint) Reporter(headerStorage, yaho) { + constructor( + address headerStorage, + address yaho, + address lzEndpoint, + address delegate, + address refundAddress_, + uint128 defaultFee_ + ) Reporter(headerStorage, yaho) OAppCore(lzEndpoint, delegate) { + refundAddress = refundAddress_; + fee = defaultFee_; LAYER_ZERO_ENDPOINT = ILayerZeroEndpointV2(lzEndpoint); } @@ -35,10 +45,14 @@ contract LayerZeroReporter is Reporter, Ownable { emit FeeSet(fee); } - function setRefundAddress(address refundAddress_) external onlyOwner { + function setDefaultRefundAddress(address refundAddress_) external onlyOwner { refundAddress = refundAddress_; } + function oAppVersion() public pure virtual override returns (uint64 senderVersion, uint64 receiverVersion) { + return (1, 1); + } + function _dispatch( uint256 targetChainId, address adapter, diff --git a/packages/evm/contracts/adapters/LayerZero/interfaces/ILayerZeroReceiver.sol b/packages/evm/contracts/adapters/LayerZero/interfaces/ILayerZeroReceiver.sol index 6c6144da..124c24e3 100644 --- a/packages/evm/contracts/adapters/LayerZero/interfaces/ILayerZeroReceiver.sol +++ b/packages/evm/contracts/adapters/LayerZero/interfaces/ILayerZeroReceiver.sol @@ -10,4 +10,8 @@ interface ILayerZeroReceiver { address _executor, bytes calldata _extraData ) external payable; + + function allowInitializePath(Origin calldata _origin) external view returns (bool); + + function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64); } diff --git a/packages/evm/tasks/deploy/adapters/layerzero.ts b/packages/evm/tasks/deploy/adapters/layerzero.ts index aed9a324..b2cd195d 100644 --- a/packages/evm/tasks/deploy/adapters/layerzero.ts +++ b/packages/evm/tasks/deploy/adapters/layerzero.ts @@ -9,7 +9,8 @@ import type { LayerZeroReporter__factory } from "../../../types/factories/contra import { verify } from "../index" task("deploy:LayerZeroAdapter") - .addParam("lzEndpoint", "address of the LayerZero endpoint contract") + .addParam("lzendpoint", "address of the LayerZero endpoint contract") + .addParam("delegate", "address of delegate") .addFlag("verify", "whether to verify the contract on Etherscan") .setAction(async function (taskArguments: TaskArguments, hre) { console.log("Deploying LayerZeroAdapter...") @@ -17,7 +18,7 @@ task("deploy:LayerZeroAdapter") const layerZeroAdapterFactory: LayerZeroAdapter__factory = ( await hre.ethers.getContractFactory("LayerZeroAdapter") ) - const constructorArguments = [taskArguments.lzEndpoint] as const + const constructorArguments = [taskArguments.lzendpoint, taskArguments.delegate] as const const layerZeroAdapter: LayerZeroAdapter = ( await layerZeroAdapterFactory.connect(signers[0]).deploy(...constructorArguments) ) @@ -27,9 +28,12 @@ task("deploy:LayerZeroAdapter") }) task("deploy:LayerZeroReporter") - .addParam("headerStorage", "address of the header storage contract") + .addParam("headerstorage", "address of the header storage contract") .addParam("yaho", "address of the Yaho contract") - .addParam("lzEndpoint", "address of the LayerZero endpoint contract") + .addParam("lzendpoint", "address of the LayerZero endpoint contract") + .addParam("delegate", "address of delegate") + .addParam("refundaddress", "refund address") + .addParam("defaultfee", "default fee") .addFlag("verify", "whether to verify the contract on Etherscan") .setAction(async function (taskArguments: TaskArguments, hre) { console.log("Deploying LayerZeroReporter...") @@ -37,7 +41,14 @@ task("deploy:LayerZeroReporter") const layerZeroReporterFactory: LayerZeroReporter__factory = ( await hre.ethers.getContractFactory("LayerZeroReporter") ) - const constructorArguments = [taskArguments.headerStorage, taskArguments.yaho, taskArguments.lzEndpoint] as const + const constructorArguments = [ + taskArguments.headerstorage, + taskArguments.yaho, + taskArguments.lzendpoint, + taskArguments.delegate, + taskArguments.refundaddress, + taskArguments.defaultfee, + ] as const const layerZeroReporter: LayerZeroReporter = ( await layerZeroReporterFactory.connect(signers[0]).deploy(...constructorArguments) ) From cb557de25b2d121860dd0b153513fbbfaa84c9a9 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Tue, 16 Jul 2024 05:14:45 +0800 Subject: [PATCH 52/81] feat: add Base config to LayerZero controller --- packages/reporter/src/index.ts | 8 ++++++-- packages/reporter/src/settings/index.ts | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 2e261371..40b20c93 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -2,6 +2,7 @@ import { arbitrum, arbitrumSepolia, avalanche, + base, bsc, bscTestnet, gnosis, @@ -36,6 +37,7 @@ const main = () => { arbitrum, avalanche, arbitrumSepolia, + base, bsc, bscTestnet, gnosis, @@ -49,7 +51,6 @@ const main = () => { ] const sourceChain: Chain = Object.values(chains).find((_chain) => _chain.id === sourceChainId) as Chain const destinationChains: Chain[] = Object.values(chains).filter((_chain) => destinationChainIds?.includes(_chain.id)) - const unidirectionalAdaptersAddresses = settings.contractAddresses.adapterAddresses.unidirectional as any const unidirectionalReportersAddresses = settings.contractAddresses.reporterAddresses.unidirectional as any const lightClientAddresses = settings.contractAddresses.lightClientAddresses as any @@ -210,13 +211,16 @@ const main = () => { // unidirectionalReportersAddresses[sourceChain.name]?.[optimismSepolia.name]?.LayerZeroReporter, [polygon.name]: unidirectionalReportersAddresses[sourceChain.name]?.[polygon.name]?.LayerZeroReporter, [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroReporter, + [base.name]: unidirectionalReportersAddresses[sourceChain.name]?.[base.name]?.LayerZeroReporter, + [optimism.name]: unidirectionalReportersAddresses[sourceChain.name]?.[optimism.name]?.LayerZeroReporter, [arbitrumSepolia.name]: unidirectionalReportersAddresses[sourceChain.name]?.[arbitrumSepolia.name]?.LayerZeroReporter, }, adapterAddresses: { [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[polygon.name]?.LayerZeroAdapter, [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroAdapter, - + [base.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[base.name].LayerZeroAdapter, + [optimism.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[optimism.name].layerZeroAdapter, [arbitrumSepolia.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[arbitrumSepolia.name]?.LayerZeroAdapter, [optimismSepolia.name]: diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index d5190295..9c7d9315 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -4,6 +4,7 @@ import { arbitrum, arbitrumSepolia, avalanche, + base, bsc, bscTestnet, gnosis, @@ -65,6 +66,7 @@ export const settings = { TelepathyAdapter: process.env.OPTIMISM_TELEPATHY_ADAPTER as `0x${string}`, L2CrossDomainMessengerAdapter: process.env .OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS as `0x${string}`, + LayerZeroAdapter: process.env.OPTIMISM_MAINNET_LAYER_ZERO_ADAPTER as `0x${string}`, }, [arbitrum.name]: { TelepathyAdapter: process.env.ARBITRUM_TELEPATHY_ADAPTER as `0x${string}`, @@ -73,6 +75,9 @@ export const settings = { LayerZeroAdapter: process.env.AVALANCHE_LAYER_ZERO_ADAPTER_MAINNET as `0x${string}`, CCIPAdapter: process.env.AVALANCHE_CCIP_ADAPTER_MAINNET as `0x${string}`, }, + [base.name]: { + LayerZeroAdapter: process.env.BASE_MAINNET_LAYER_ZERO_ADAPTER as `0x${string}`, + }, /*[goerli.name]: { AMBReporter: "0xedc0b1d3de4496e0d917af42f29cb71eb2982319" as `0x${string}`, SygmaReporter: "0x2f96d347c932ac73b56e9352ecc0707e25173d88" as `0x${string}`, @@ -138,6 +143,10 @@ export const settings = { [optimism.name]: { L1CrossDomainMessengerHeaderReporter: process.env .MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS as `0x${string}`, + LayerZeroReporter: process.env.MAINNET_LAYER_ZERO_REPORTER as `0x${string}`, + }, + [base.name]: { + LayerZeroReporter: process.env.MAINNET_LAYER_ZERO_REPORTER as `0x${string}`, }, [polygon.name]: { CelerReporter: process.env.MAINNET_CELER_REPORTER_POLYGON as `0x${string}`, From da427a496b67c6923884eb4396eb76f21c48e4d6 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Tue, 16 Jul 2024 05:15:14 +0800 Subject: [PATCH 53/81] chore: update tsconfig.json and Dockerfile --- packages/reporter/Dockerfile | 9 ++++++--- packages/reporter/tsconfig.json | 26 ++++++++++++++++++++------ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/packages/reporter/Dockerfile b/packages/reporter/Dockerfile index 58daafc7..b251100d 100644 --- a/packages/reporter/Dockerfile +++ b/packages/reporter/Dockerfile @@ -1,13 +1,16 @@ -FROM node:alpine +FROM node:18-alpine WORKDIR /usr/src/app COPY package.json yarn.lock .env ./ -RUN yarn install +RUN corepack enable && \ + corepack prepare --activate yarn@3.2.2 && \ + yarn install ADD . /usr/src/app -RUN yarn compile +RUN yarn install && \ + yarn compile CMD ["node", "dist/index.js"] \ No newline at end of file diff --git a/packages/reporter/tsconfig.json b/packages/reporter/tsconfig.json index 22729817..93d4d790 100644 --- a/packages/reporter/tsconfig.json +++ b/packages/reporter/tsconfig.json @@ -6,16 +6,30 @@ "esModuleInterop": true, "experimentalDecorators": true, "forceConsistentCasingInFileNames": true, - "lib": ["es6", "ESNext", "DOM"], - "module": "NodeNext", + "lib": [ + "es6", + "ESNext", + "DOM" + ], + "module": "ESNext", + "moduleResolution": "node", "noImplicitAny": true, "outDir": "./dist", + "rootDir": "./src", "removeComments": true, "resolveJsonModule": true, "sourceMap": true, "strict": true, - "target": "ES2020" + "target": "ESNext" }, - "exclude": ["node_modules"], - "include": ["./src/**/*"] -} + "exclude": [ + "node_modules" + ], + "include": [ + "./src/**/*" + ], + "ts-node": { + "esm": true, + "experimentalSpecifierResolution": "node" + } +} \ No newline at end of file From b7177be2f22c69ee04337e0d9fbd176bace540df Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Tue, 16 Jul 2024 05:15:54 +0800 Subject: [PATCH 54/81] chore: add configuration logs in Controller class --- packages/reporter/src/Coordinator.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/reporter/src/Coordinator.ts b/packages/reporter/src/Coordinator.ts index 8101e33a..44c04b64 100644 --- a/packages/reporter/src/Coordinator.ts +++ b/packages/reporter/src/Coordinator.ts @@ -47,7 +47,13 @@ class Coordinator { } start() { - console.log("controllers: ", this.controllers) + this.logger.info(`Start Reporter with config${this.controllers}`) + this.logger.info(`Source chain: ${this.sourceChain}`) + this.logger.info(`Query block length: ${this._queryBlockLength}`) + this.logger.info(`Block Buffer: ${this._blockBuffer}`) + this.logger.info(`Interval to fetch blocks (ms): ${this._intervalFetchBlocksMs}`) + this.logger.info(`Interval to update light clients: ${this._intervalsUpdateLightClients}`) + this.fetchBlocks() this.intervals.push( setInterval(() => { From aac37d55d0ddaafe5dc4a61f5bc4a18be0275d7a Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Tue, 16 Jul 2024 05:22:59 +0800 Subject: [PATCH 55/81] update .env.example --- packages/reporter/.env.example | 115 +++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index 0281cfb3..b4f1fb0b 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -20,7 +20,122 @@ LAYER_ZERO_REPORT_HEADERS_VALUE=0.0002 CCIP_REPORT_HEADERS_VALUE=0.002 CONNEXT_REPORT_HEADERS_VALUE=0.00003 ZETA_CHAIN_REPORT_HEADERS_VALUE=0.001 +# Fake private key +PRIVATE_KEY= +# 0xdcaf8079eaf0d349e391dfa694ebfeb14d6e9187afec1aa79ccb3facbc6af251 +REPORTERS_ENABLED= +GNOSIS_RPC_URL=https://rpc.ankr.com/gnosis +MAINNET_RPC_URL= +# MAINNET_RPC_URL=https://eth.llamarpc.com +BSC_RPC_URL=https://bsc-dataseed1.binance.org +GOERLI_RPC_URL= +POLYGON_RPC_URL= +OPTIMISM_RPC_URL=https://optimism.llamarpc.com +ARBITRUM_RPC_URL=https://arbitrum.llamarpc.com +SEPOLIA_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/-nS9M81JxS_vHfz1wlWLIuSo0O6W_HMC +CHIADO_RPC_URL=https://rpc.chiadochain.net +GOERLI_BEACON_API_URL= + +AMB_REPORTER_HEADERS_GAS=200000 +AXELAR_REPORT_HEADERS_VALUE=0.0001 +CELER_REPORT_HEADERS_VALUE=0.0001 +LAYER_ZERO_REPORT_HEADERS_VALUE=0.00015 +CCIP_REPORT_HEADERS_VALUE=0.002 +CONNEXT_REPORT_HEADERS_VALUE=0.00003 +ZETA_CHAIN_REPORT_HEADERS_VALUE=0.001 + +TELEPATHY_PROOF_API_URL= +TELEPATHY_BLOCK_BUFFER=10 +TELEPATHY_INTERVAL_UPDATE=30000 +ELECTRON_INTERVAL_UPDATE=30000 + +WORMHOLE_SCAN_BASE_URL=https://api.wormholescan.io + +TIME_FETCH_BLOCKS_MS=60000 +BLOCK_BUFFER=10 +QUERY_BLOCK_LENGTH=200 + + +# For Mainnet +SOURCE_CHAIN_ID= +DESTINATION_CHAIN_IDS= + + +# Mainnet +## Layer Zero +MAINNET_LAYER_ZERO_REPORTER=0xbc5f67da5347cd4304e9623bc86e71a874287ea1 +BSC_MAINNET_LAYER_ZERO_ADAPTER=0xDbdF80c87f414fac8342e04D870764197bD3bAC7 +POLYGON_MAINNET_LAYER_ZERO_ADAPTER=0x998dA7f6cF98541E4F4469cc9d53B9374F186591 +BASE_MAINNET_LAYER_ZERO_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 +OPTIMISM_MAINNET_LAYER_ZERO_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 + + +## AMB +MAINNET_AMB_REPORTER=0xDbdF80c87f414fac8342e04D870764197bD3bAC7 +GNOSIS_AMB_ADAPTER=0x79e4D1B8b8De0bC2F8A3DC477480C935C66F373E + + +# Testnet +SEPOLIA_CHIADO_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 +CHIADO_SEPOLIA_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B + + + +# LEGACY +GNOSIS_AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 +GNOSIS_AMB_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 +SEPOLIA_CHIADO_CCIP_REPORTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC +SEPOLIA_CHIADO_CCIP_ADAPTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC # FAKE +SEPOLIA_CHIADO_LZ_REPORTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 +SEPOLIA_CHIADO_LZ_ADAPTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 + +SEPOLIA_ARB_LZ_REPORTER=0x49f6BE2C7DB433395939b2c728dF2CB99Ca5f8c5 +SEPOLIA_ARB_LZ_ADAPTER=0x21eAB033C7D2DF6A67AeF6C5Bda9A7F151eB9f52 + +OPTIMISM_SEPOLIA_LZ_ADAPTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 +CHIADO_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B + +#AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 +SYMGA_ADAPTER=0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15 +GNOSIS_TELEPATHY_ADAPTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 +# MAINNET_AMB_REPORTER=0x6be796cb66CdB3566b8AbebA2C516CbDF93fE831 +MAINNET_HEADER_REPORTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a +POLYGON_TELEPATHY_ADAPTER=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 +BSC_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 +OPTIMISM_TELEPATHY_ADAPTER=0x856dcc80f75a9737D9D498266E1Af013668316Fb +ARBITRUM_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 +GNOSIS_WORMHOLE_ADAPTER=0x8EA3F385be8FCB98eB4dBfad2D00846860Bf648D +POLYGON_WORMHOLE_ADAPTER=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 +BSC_WORMHOLE_ADAPTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a +OPTIMISM_WORMHOLE_ADAPTER=0x1fF52708D610b1D17F0830f036e992677CDc508A +AVALANCHE_WORMHOLE_ADAPTER=0x6E9ce437c46e7fA4F0888c21AAC0d9099Ad133ea +MAINNET_WORMHOLE_HEADER_REPORTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 +MAINNET_WORMHOLE_ADDRESS=0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B +MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS=0xbA5B3f0643582E75AF252e7631dE62c046970167 +OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS=0xe58E7bF7aCD1396D8F9eAF44DB3D4Fd055DCDb51 +MAINNET_AXELAR_REPORTER_BSC=0xBfd877753F8B4f4117a08aD54DcBE69cF3165d81 +BSC_AXELAR_ADAPTER_MAINNET=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 +POLYGON_CELER_ADAPTER_MAINNET=0x1fF52708D610b1D17F0830f036e992677CDc508A +MAINNET_CELER_REPORTER_POLYGON=0x52258b83051B7031483740aC9EcAa07926392ea0 +AVALANCHE_LAYER_ZERO_ADAPTER_MAINNET=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a +MAINNET_LAYER_ZERO_REPORTER_AVALANCHE=0x16B43E348e0A19E9196ae79D172aDC52B3Aa3E20 +OPTIMISM_GOERLI_CCIP_ADAPTER_SEPOLIA=0x520185210Aa645220a49afD9C33d28b73494e14d +SEPOLIA_CCIP_REPORTER_OPTIMISM_GOERLI=0xF3D2877866cd8E6771843b96B66aFcE425B2353C +BSC_TESTNET_CCIP_ADAPTER_SEPOLIA=0xB6133Ab655B990E80Af3E948852C8ec2a46651A5 +SEPOLIA_CCIP_REPORTER_BSC_TESTNET=0x855A2814E0DFf8327f1a52aCC9537772B829e226 + +BSC_LAYER_ZERO_ADAPTER_MAINNET=0xaC3c8D19A64B98d62ED16FFf8a4229E8ED36A469 +GOERLI_ZETA_REPORTER_BSC_TESTNET=0x9a9fc484D3F83B489bc58c2A3EeeA8331F21796B +BSC_TESTNET_ZETA_ADAPTER_GOERLI=0x2829D554678a767c5B091D28A0A294dB7643ec05 +MAINNET_CCIP_REPORTER_AVALANCHE=0xeEFD0D67E4eF9330870961C38a3e25ECE369B141 +AVALANCHE_CCIP_ADAPTER_MAINNET=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 +GNOSIS_SYGMA_ADAPTER=0x483285D0e24401D0C5DB6cF1FAC4f79f412079C0 +MAINNET_SYGMA_REPORTER_GNOSIS=0x973bB99db211755b80c9087fe436fBb81A45AD5E +MAINNET_HEADER_STORAGE=0x22F1fc71A505c0b2bf4D5075801cc5E0ec84B09e +GOERLI_HEADER_STORAGE=0x4cD014AC64AAa899b46BF3a477B68bb67e33eDC4 +CHIADO_ELECTRON_ADAPTER_GOERLI=0x66fBC348aef3797fb885f8073173E5064bf7ABBb +CHIADO_ELECTRON_LIGHT_CLIENT_GOERLI=0xc01707bD835f6108785DF081C943C7C108FC3D89 TELEPATHY_PROOF_API_URL= TELEPATHY_BLOCK_BUFFER=10 TELEPATHY_INTERVAL_UPDATE=30000 From 1aeff54a2163902dfd9f81de8b9b0ea19ad169a8 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Thu, 18 Jul 2024 19:25:34 +0800 Subject: [PATCH 56/81] fix: typo and .env.example --- packages/reporter/.env.example | 13 +++++-------- packages/reporter/src/index.ts | 4 ++-- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index b4f1fb0b..4f4f5e19 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -51,7 +51,7 @@ ELECTRON_INTERVAL_UPDATE=30000 WORMHOLE_SCAN_BASE_URL=https://api.wormholescan.io -TIME_FETCH_BLOCKS_MS=60000 +TIME_FETCH_BLOCKS_MS=1440000 # 24 minutes BLOCK_BUFFER=10 QUERY_BLOCK_LENGTH=200 @@ -76,17 +76,14 @@ GNOSIS_AMB_ADAPTER=0x79e4D1B8b8De0bC2F8A3DC477480C935C66F373E # Testnet -SEPOLIA_CHIADO_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 -CHIADO_SEPOLIA_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B - +GNOSIS_AMB_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B +GNOSIS_AMB_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 +SEPOLIA_CHIADO_CCIP_REPORTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC +SEPOLIA_CHIADO_CCIP_ADAPTER=0x8A2A7509B98f0f21BEFF82e2520A920DB61fFa9d # LEGACY -GNOSIS_AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 -GNOSIS_AMB_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 -SEPOLIA_CHIADO_CCIP_REPORTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC -SEPOLIA_CHIADO_CCIP_ADAPTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC # FAKE SEPOLIA_CHIADO_LZ_REPORTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 SEPOLIA_CHIADO_LZ_ADAPTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 40b20c93..a7a5c22d 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -219,8 +219,8 @@ const main = () => { adapterAddresses: { [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[polygon.name]?.LayerZeroAdapter, [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroAdapter, - [base.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[base.name].LayerZeroAdapter, - [optimism.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[optimism.name].layerZeroAdapter, + [base.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[base.name]?.LayerZeroAdapter, + [optimism.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[optimism.name]?.LayerZeroAdapter, [arbitrumSepolia.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[arbitrumSepolia.name]?.LayerZeroAdapter, [optimismSepolia.name]: From fc6f62d2eeb528c9764cc2045339830796e2f52a Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Fri, 26 Jul 2024 13:01:57 +0800 Subject: [PATCH 57/81] feat(reporter): update Wormhole Reporter syntax and address --- packages/reporter/.env.example | 130 ++---------------- .../controllers/WormholeReporterController.ts | 9 +- packages/reporter/src/index.ts | 13 +- packages/reporter/src/settings/index.ts | 15 +- 4 files changed, 40 insertions(+), 127 deletions(-) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index 4f4f5e19..e341bce5 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -1,29 +1,7 @@ # Fake private key PRIVATE_KEY= -REPORTERS_ENABLED=AMBReporterController,LayerZeroReporterController -GNOSIS_RPC_URL=https://rpc.ankr.com/gnosis -MAINNET_RPC_URL=https://eth.llamarpc.com -BSC_RPC_URL=https://bsc-dataseed1.binance.org -GOERLI_RPC_URL= -POLYGON_RPC_URL=https://polygon.llamarpc.com -OPTIMISM_RPC_URL=https://optimism.llamarpc.com -ARBITRUM_RPC_URL=https://arbitrum.llamarpc.com -SEPOLIA_RPC_URL=https://1rpc.io/sepolia -CHIADO_RPC_URL=https://rpc.chiadochain.net -GOERLI_BEACON_API_URL= - -AMB_REPORTER_HEADERS_GAS=200000 -AXELAR_REPORT_HEADERS_VALUE=0.0001 -CELER_REPORT_HEADERS_VALUE=0.0001 -LAYER_ZERO_REPORT_HEADERS_VALUE=0.0002 -CCIP_REPORT_HEADERS_VALUE=0.002 -CONNEXT_REPORT_HEADERS_VALUE=0.00003 -ZETA_CHAIN_REPORT_HEADERS_VALUE=0.001 -# Fake private key -PRIVATE_KEY= -# 0xdcaf8079eaf0d349e391dfa694ebfeb14d6e9187afec1aa79ccb3facbc6af251 -REPORTERS_ENABLED= +REPORTERS_ENABLED=WormholeReporterController,AMBReporterController,LayerZeroReporterController GNOSIS_RPC_URL=https://rpc.ankr.com/gnosis MAINNET_RPC_URL= # MAINNET_RPC_URL=https://eth.llamarpc.com @@ -32,7 +10,7 @@ GOERLI_RPC_URL= POLYGON_RPC_URL= OPTIMISM_RPC_URL=https://optimism.llamarpc.com ARBITRUM_RPC_URL=https://arbitrum.llamarpc.com -SEPOLIA_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/-nS9M81JxS_vHfz1wlWLIuSo0O6W_HMC +SEPOLIA_RPC_URL= CHIADO_RPC_URL=https://rpc.chiadochain.net GOERLI_BEACON_API_URL= @@ -49,14 +27,16 @@ TELEPATHY_BLOCK_BUFFER=10 TELEPATHY_INTERVAL_UPDATE=30000 ELECTRON_INTERVAL_UPDATE=30000 -WORMHOLE_SCAN_BASE_URL=https://api.wormholescan.io +# WORMHOLE_SCAN_BASE_URL=https://api.wormholescan.io # Mainnet +WORMHOLE_SCAN_BASE_URL=https://api.testnet.wormholescan.io/ # Testnet + -TIME_FETCH_BLOCKS_MS=1440000 # 24 minutes +TIME_FETCH_BLOCKS_MS=30000 BLOCK_BUFFER=10 QUERY_BLOCK_LENGTH=200 -# For Mainnet + SOURCE_CHAIN_ID= DESTINATION_CHAIN_IDS= @@ -81,106 +61,22 @@ GNOSIS_AMB_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 SEPOLIA_CHIADO_CCIP_REPORTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC SEPOLIA_CHIADO_CCIP_ADAPTER=0x8A2A7509B98f0f21BEFF82e2520A920DB61fFa9d +SEPOLIA_WORMHOLE_ADDRESS=0x4a8bc80Ed5a4067f1CCf107057b8270E0cC11A78 -# LEGACY - -SEPOLIA_CHIADO_LZ_REPORTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 -SEPOLIA_CHIADO_LZ_ADAPTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 - -SEPOLIA_ARB_LZ_REPORTER=0x49f6BE2C7DB433395939b2c728dF2CB99Ca5f8c5 -SEPOLIA_ARB_LZ_ADAPTER=0x21eAB033C7D2DF6A67AeF6C5Bda9A7F151eB9f52 - -OPTIMISM_SEPOLIA_LZ_ADAPTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 -CHIADO_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B - -#AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 -SYMGA_ADAPTER=0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15 -GNOSIS_TELEPATHY_ADAPTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 -# MAINNET_AMB_REPORTER=0x6be796cb66CdB3566b8AbebA2C516CbDF93fE831 -MAINNET_HEADER_REPORTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a -POLYGON_TELEPATHY_ADAPTER=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 -BSC_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 -OPTIMISM_TELEPATHY_ADAPTER=0x856dcc80f75a9737D9D498266E1Af013668316Fb -ARBITRUM_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 -GNOSIS_WORMHOLE_ADAPTER=0x8EA3F385be8FCB98eB4dBfad2D00846860Bf648D -POLYGON_WORMHOLE_ADAPTER=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 -BSC_WORMHOLE_ADAPTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a -OPTIMISM_WORMHOLE_ADAPTER=0x1fF52708D610b1D17F0830f036e992677CDc508A -AVALANCHE_WORMHOLE_ADAPTER=0x6E9ce437c46e7fA4F0888c21AAC0d9099Ad133ea -MAINNET_WORMHOLE_HEADER_REPORTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 -MAINNET_WORMHOLE_ADDRESS=0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B -MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS=0xbA5B3f0643582E75AF252e7631dE62c046970167 -OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS=0xe58E7bF7aCD1396D8F9eAF44DB3D4Fd055DCDb51 -MAINNET_AXELAR_REPORTER_BSC=0xBfd877753F8B4f4117a08aD54DcBE69cF3165d81 -BSC_AXELAR_ADAPTER_MAINNET=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 -POLYGON_CELER_ADAPTER_MAINNET=0x1fF52708D610b1D17F0830f036e992677CDc508A -MAINNET_CELER_REPORTER_POLYGON=0x52258b83051B7031483740aC9EcAa07926392ea0 -AVALANCHE_LAYER_ZERO_ADAPTER_MAINNET=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a -MAINNET_LAYER_ZERO_REPORTER_AVALANCHE=0x16B43E348e0A19E9196ae79D172aDC52B3Aa3E20 -OPTIMISM_GOERLI_CCIP_ADAPTER_SEPOLIA=0x520185210Aa645220a49afD9C33d28b73494e14d -SEPOLIA_CCIP_REPORTER_OPTIMISM_GOERLI=0xF3D2877866cd8E6771843b96B66aFcE425B2353C -BSC_TESTNET_CCIP_ADAPTER_SEPOLIA=0xB6133Ab655B990E80Af3E948852C8ec2a46651A5 -SEPOLIA_CCIP_REPORTER_BSC_TESTNET=0x855A2814E0DFf8327f1a52aCC9537772B829e226 - -BSC_LAYER_ZERO_ADAPTER_MAINNET=0xaC3c8D19A64B98d62ED16FFf8a4229E8ED36A469 -GOERLI_ZETA_REPORTER_BSC_TESTNET=0x9a9fc484D3F83B489bc58c2A3EeeA8331F21796B -BSC_TESTNET_ZETA_ADAPTER_GOERLI=0x2829D554678a767c5B091D28A0A294dB7643ec05 -MAINNET_CCIP_REPORTER_AVALANCHE=0xeEFD0D67E4eF9330870961C38a3e25ECE369B141 -AVALANCHE_CCIP_ADAPTER_MAINNET=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 -GNOSIS_SYGMA_ADAPTER=0x483285D0e24401D0C5DB6cF1FAC4f79f412079C0 -MAINNET_SYGMA_REPORTER_GNOSIS=0x973bB99db211755b80c9087fe436fBb81A45AD5E -MAINNET_HEADER_STORAGE=0x22F1fc71A505c0b2bf4D5075801cc5E0ec84B09e -GOERLI_HEADER_STORAGE=0x4cD014AC64AAa899b46BF3a477B68bb67e33eDC4 -CHIADO_ELECTRON_ADAPTER_GOERLI=0x66fBC348aef3797fb885f8073173E5064bf7ABBb -CHIADO_ELECTRON_LIGHT_CLIENT_GOERLI=0xc01707bD835f6108785DF081C943C7C108FC3D89 -TELEPATHY_PROOF_API_URL= -TELEPATHY_BLOCK_BUFFER=10 -TELEPATHY_INTERVAL_UPDATE=30000 -ELECTRON_INTERVAL_UPDATE=30000 - -WORMHOLE_SCAN_BASE_URL=https://api.wormholescan.io - -TIME_FETCH_BLOCKS_MS=3600000 -BLOCK_BUFFER=10 -QUERY_BLOCK_LENGTH=200 - -# For Testnet -SOURCE_CHAIN_ID=11155111 -DESTINATION_CHAIN_IDS=10200,421614 - -# For Mainnet -# SOURCE_CHAIN_ID=1 -# DESTINATION_CHAIN_IDS=137,56 - - -# Mainnet -## Layer Zero -MAINNET_LAYER_ZERO_REPORTER=0x3da176b43604aacf6178128865afccb21ee0f943 -BSC_MAINNET_LAYER_ZERO_ADAPTER=0x7237bb8d1d38DF8b473b5A38eD90088AF162ad8e -POLYGON_MAINNET_LAYER_ZERO_ADAPTER=0x79e4D1B8b8De0bC2F8A3DC477480C935C66F373E - -## AMB -MAINNET_AMB_REPORTER=0xDbdF80c87f414fac8342e04D870764197bD3bAC7 -GNOSIS_AMB_ADAPTER=0x79e4D1B8b8De0bC2F8A3DC477480C935C66F373E - - -# Testnet -SEPOLIA_CHIADO_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 -CHIADO_SEPOLIA_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B - - +SEPOLIA_CHIADO_WORMHOLE_REPORTER=0xeE8082F48e768e096c2EEC5C80DC818eb6E15858 +SEPOLIA_CHIADO_WORMHOLE_ADAPTER=0x79e4D1B8b8De0bC2F8A3DC477480C935C66F373E # LEGACY GNOSIS_AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 GNOSIS_AMB_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 SEPOLIA_CHIADO_CCIP_REPORTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC -SEPOLIA_CHIADO_CCIP_ADAPTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC # FAKE +SEPOLIA_CHIADO_CCIP_ADAPTER=0x8A2A7509B98f0f21BEFF82e2520A920DB61fFa9d SEPOLIA_CHIADO_LZ_REPORTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 SEPOLIA_CHIADO_LZ_ADAPTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 -SEPOLIA_ARB_LZ_REPORTER=0x77B2cF15Ed888F3d5150E602d9805823Fdc8E51D -SEPOLIA_ARB_LZ_ADAPTER=0x117D7D593e6a7d9699a763C552BFA3177a46B957 +SEPOLIA_ARB_LZ_REPORTER=0x49f6BE2C7DB433395939b2c728dF2CB99Ca5f8c5 +SEPOLIA_ARB_LZ_ADAPTER=0x21eAB033C7D2DF6A67AeF6C5Bda9A7F151eB9f52 OPTIMISM_SEPOLIA_LZ_ADAPTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 CHIADO_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B diff --git a/packages/reporter/src/controllers/WormholeReporterController.ts b/packages/reporter/src/controllers/WormholeReporterController.ts index 822650fe..a0553eb1 100644 --- a/packages/reporter/src/controllers/WormholeReporterController.ts +++ b/packages/reporter/src/controllers/WormholeReporterController.ts @@ -32,6 +32,7 @@ class WormholeReporterController extends BaseController { async onBlocks(_blockNumbers: bigint[]) { const release = await this._mutex.acquire() + try { const wormholeChainId = this._wormholeChainIds[this.sourceChain.name] const client = this.multiClient.getClientByChain(this.sourceChain) @@ -57,14 +58,16 @@ class WormholeReporterController extends BaseController { this.logger.info(`header reported from ${this.sourceChain.name} to Wormhole Network: ${txHash}`) let vaaBytes = null + let sequence = Number(nextSequence) + while (true) { try { this.logger.info("Waiting for signed VAA ...") + const { data } = await this._wormholeScanClient.get( - `v1/signed_vaa/${wormholeChainId}/000000000000000000000000${this.reporterAddress?.slice( - wormholeChainId, - )}/${Number(nextSequence)}`, + `v1/signed_vaa/${wormholeChainId}/000000000000000000000000${this.reporterAddress?.slice(2)}/${sequence}`, ) + vaaBytes = "0x" + Buffer.from(data.vaaBytes, "base64").toString("hex") this.logger.info("Signed VAA available! Proceeding ...") break diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index a7a5c22d..59dba0df 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -121,13 +121,14 @@ const main = () => { destinationChains, logger, multiClient, - reporterAddress: (settings.contractAddresses.reporterAddresses as any)[sourceChain.name]?.WormholeHeaderReporter, + reporterAddress: (settings.contractAddresses.reporterAddresses as any)[sourceChain.name]?.WormholeReporter, adapterAddresses: { - [gnosis.name]: (settings.contractAddresses.adapterAddresses as any)?.Gnosis?.WormholeAdapter, - [optimism.name]: (settings.contractAddresses.adapterAddresses as any)["OP Mainnet"]?.WormholeAdapter, - [bsc.name]: (settings.contractAddresses.adapterAddresses as any)["BNB Smart Chain"]?.WormholeAdapter, - [polygon.name]: (settings.contractAddresses.adapterAddresses as any)?.Polygon.WormholeAdapter, - [avalanche.name]: (settings.contractAddresses.adapterAddresses as any)?.Avalanche.WormholeAdapter, + // [gnosis.name]: (settings.contractAddresses.adapterAddresses as any)?.Gnosis?.WormholeAdapter, + // [optimism.name]: (settings.contractAddresses.adapterAddresses as any)["OP Mainnet"]?.WormholeAdapter, + // [bsc.name]: (settings.contractAddresses.adapterAddresses as any)["BNB Smart Chain"]?.WormholeAdapter, + // [polygon.name]: (settings.contractAddresses.adapterAddresses as any)?.Polygon.WormholeAdapter, + // [avalanche.name]: (settings.contractAddresses.adapterAddresses as any)?.Avalanche.WormholeAdapter, + [gnosisChiado.name]: (settings.contractAddresses.adapterAddresses as any)?.[gnosisChiado.name]?.WormholeAdapter, }, wormholeScanBaseUrl: settings.reporterControllers.WormholeReporterController.wormholeScanBaseUrl, wormholeAddress: (settings.contractAddresses as any)[sourceChain.name]?.Wormhole, diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 9c7d9315..654b2df0 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -97,6 +97,7 @@ export const settings = { AMBAdapter: process.env.CHIADO_SEPOLIA_ADAPTER as `0x${string}`, CCIPAdapter: process.env.SEPOLIA_CHIADO_CCIP_ADAPTER as `0x${string}`, LayerZeroAdapter: process.env.SEPOLIA_CHIADO_LZ_ADAPTER as `0x${string}`, + WormholeAdapter: process.env.SEPOLIA_CHIADO_WORMHOLE_ADAPTER as `0x${string}`, }, [arbitrumSepolia.name]: { LayerZeroAdapter: process.env.SEPOLIA_ARB_LZ_ADAPTER as `0x${string}`, @@ -111,6 +112,9 @@ export const settings = { }, }, }, + [gnosisChiado.name]: { + WormholeAdapter: process.env.SEPOLIA_CHIADO_WORMHOLE_ADAPTER as `0x${string}`, + }, [gnosis.name]: { WormholeAdapter: process.env.GNOSIS_WORMHOLE_ADAPTER as `0x${string}`, }, @@ -171,6 +175,7 @@ export const settings = { AMBReporter: process.env.SEPOLIA_CHIADO_REPORTER as `0x${string}`, CCIPReporter: process.env.SEPOLIA_CHIADO_CCIP_REPORTER as `0x${string}`, LayerZeroReporter: process.env.SEPOLIA_CHIADO_LZ_REPORTER as `0x${string}`, + WormholeReporter: process.env.SEPOLIA_CHIADO_WORMHOLE_REPORTER as `0x${string}`, }, [arbitrumSepolia.name]: { LayerZeroReporter: process.env.SEPOLIA_ARB_LZ_REPORTER as `0x${string}`, @@ -185,6 +190,9 @@ export const settings = { [mainnet.name]: { WormholeHeaderReporter: process.env.MAINNET_WORMHOLE_HEADER_REPORTER as `0x${string}`, }, + [sepolia.name]: { + WormholeReporter: process.env.SEPOLIA_CHIADO_WORMHOLE_REPORTER as `0x${string}`, + }, }, lightClientAddresses: { [gnosisChiado.name]: { @@ -225,6 +233,9 @@ export const settings = { Wormhole: process.env.MAINNET_WORMHOLE_ADDRESS as `0x${string}`, HeaderStorage: process.env.MAINNET_HEADER_STORAGE as `0x${string}`, }, + [sepolia.name]: { + Wormhole: process.env.SEPOLIA_WORMHOLE_ADDRESS as `0x${string}`, + }, }, reporterControllers: { AMBReporterController: { @@ -254,10 +265,12 @@ export const settings = { baseProofUrl: process.env.TELEPATHY_PROOF_API_URL as string, }, WormholeReporterController: { + wormholeAddress: process.env.WORMHOLE_CONTRACT_ADDRESS as `0x${string}`, wormholeChainIds: { [mainnet.name]: 2, + [sepolia.name]: 10002, }, - wormholeScanBaseUrl: "https://api.wormholescan.io", + wormholeScanBaseUrl: process.env.WORMHOLE_SCAN_BASE_URL as string, }, ZetaReporterController: { reportHeadersValue: parseEther(process.env.ZETA_CHAIN_REPORT_HEADERS_VALUE as string), From 10a88b58d65ff2d7c4326ff3d054b00a5bcad99d Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Fri, 26 Jul 2024 14:00:28 +0800 Subject: [PATCH 58/81] chore(evm): update Wormhole deploy task --- .../evm/tasks/deploy/adapters/wormhole.ts | 59 +++++-------------- 1 file changed, 15 insertions(+), 44 deletions(-) diff --git a/packages/evm/tasks/deploy/adapters/wormhole.ts b/packages/evm/tasks/deploy/adapters/wormhole.ts index b61ed770..5dd59e2f 100644 --- a/packages/evm/tasks/deploy/adapters/wormhole.ts +++ b/packages/evm/tasks/deploy/adapters/wormhole.ts @@ -4,18 +4,13 @@ import type { TaskArguments } from "hardhat/types" import { verify } from ".." import type { WormholeAdapter } from "../../../types/contracts/adapters/Wormhole/WormholeAdapter" -import type { WormholeHeaderReporter } from "../../../types/contracts/adapters/Wormhole/WormholeHeaderReporter" -import type { WormholeMessageRelay } from "../../../types/contracts/adapters/Wormhole/WormholeMessageRelay" +import type { WormholeReporter } from "../../../types/contracts/adapters/Wormhole/WormholeReporter" import type { WormholeAdapter__factory } from "../../../types/factories/contracts/adapters/Wormhole/WormholeAdapter__factory" -import type { WormholeHeaderReporter__factory } from "../../../types/factories/contracts/adapters/Wormhole/WormholeHeaderReporter__factory" -import type { WormholeMessageRelay__factory } from "../../../types/factories/contracts/adapters/Wormhole/WormholeMessageRelay__factory" +import type { WormholeReporter__factory } from "../../../types/factories/contracts/adapters/Wormhole/WormholeReporter__factory" // Deploy on destination chain task("deploy:Wormhole:Adapter") .addParam("wormhole", "address of the Wormhole contract", undefined, types.string) - .addParam("reporter", "address of the hash reporter", undefined, types.string) - .addParam("chainId", "source chain id", undefined, types.string) - .addParam("wormholeChainId", "wormhole source chain id", undefined, types.string) .addFlag("verify", "whether to verify the contract on Etherscan") .setAction(async function (taskArguments: TaskArguments, hre) { console.log("Deploying WormholeAdapter...") @@ -23,12 +18,7 @@ task("deploy:Wormhole:Adapter") const wormholeAdapterFactory: WormholeAdapter__factory = ( await hre.ethers.getContractFactory("WormholeAdapter") ) - const constructorArguments = [ - taskArguments.wormhole, - taskArguments.reporter, - taskArguments.chainId, - taskArguments.wormholeChainId, - ] as const + const constructorArguments = [taskArguments.wormhole] as const const wormholeAdapter: WormholeAdapter = ( await wormholeAdapterFactory.connect(signers[0]).deploy(...constructorArguments) ) @@ -38,41 +28,22 @@ task("deploy:Wormhole:Adapter") }) // Deploy source chain -task("deploy:Wormhole:HeaderReporter") - .addParam("wormhole", "address of the Wormhole contract", undefined, types.string) - .addParam("headerStorage", "address of the header storage contract", undefined, types.string) - .addFlag("verify", "whether to verify the contract on Etherscan") - .setAction(async function (taskArguments: TaskArguments, hre) { - console.log("Deploying WormholeHeaderReporter...") - const signers: SignerWithAddress[] = await hre.ethers.getSigners() - const wormholeHeaderReporterFactory: WormholeHeaderReporter__factory = ( - await hre.ethers.getContractFactory("WormholeHeaderReporter") - ) - const constructorArguments = [taskArguments.wormhole, taskArguments.headerStorage] as const - const wormholeHeaderReporter: WormholeHeaderReporter = ( - await wormholeHeaderReporterFactory.connect(signers[0]).deploy(...constructorArguments) - ) - await wormholeHeaderReporter.deployed() - console.log("WormholeHeaderReporter deployed to:", wormholeHeaderReporter.address) - if (taskArguments.verify) await verify(hre, wormholeHeaderReporter, constructorArguments) - }) - -// Deploy source chain -task("deploy:Wormhole:MessageRelay") - .addParam("wormhole", "address of the Wormhole contract", undefined, types.string) +task("deploy:Wormhole:Reporter") .addParam("yaho", "address of the Yaho contract", undefined, types.string) + .addParam("wormhole", "address of the Wormhole contract", undefined, types.string) + .addParam("headerstorage", "address of the header storage contract", undefined, types.string) .addFlag("verify", "whether to verify the contract on Etherscan") .setAction(async function (taskArguments: TaskArguments, hre) { - console.log("Deploying WormholeMessageRelay...") + console.log("Deploying WormholeReporter...") const signers: SignerWithAddress[] = await hre.ethers.getSigners() - const wormholeMessageRelayFactory: WormholeMessageRelay__factory = ( - await hre.ethers.getContractFactory("WormholeMessageRelay") + const wormholeReporterFactory: WormholeReporter__factory = ( + await hre.ethers.getContractFactory("WormholeReporter") ) - const constructorArguments = [taskArguments.wormhole, taskArguments.yaho] as const - const wormholeMessageRelay: WormholeMessageRelay = ( - await wormholeMessageRelayFactory.connect(signers[0]).deploy(...constructorArguments) + const constructorArguments = [taskArguments.headerstorage, taskArguments.yaho, taskArguments.wormhole] as const + const wormholeReporter: WormholeReporter = ( + await wormholeReporterFactory.connect(signers[0]).deploy(...constructorArguments) ) - await wormholeMessageRelay.deployed() - console.log("WormholeMessageRelay deployed to:", wormholeMessageRelay.address) - if (taskArguments.verify) await verify(hre, wormholeMessageRelay, constructorArguments) + await wormholeReporter.deployed() + console.log("WormholeHeaderReporter deployed to:", wormholeReporter.address) + if (taskArguments.verify) await verify(hre, wormholeReporter, constructorArguments) }) From ea3bd0277738c05469187643925b36b76dec6f38 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Fri, 26 Jul 2024 18:03:58 +0800 Subject: [PATCH 59/81] misc(relayer): update .env.example --- packages/relayer/.env.example | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/relayer/.env.example b/packages/relayer/.env.example index 5f80c130..3380a0fd 100644 --- a/packages/relayer/.env.example +++ b/packages/relayer/.env.example @@ -3,6 +3,7 @@ CHAIN_ID= RPC= PK= WATCH_INTERVAL_TIME_MS= +CREATE_BATCH_INTERVAL_TIME_MS= MONGO_DB_URI= MIN_BATCH_SIZE= WHITELISTED_SENDER_ADDRESSES= \ No newline at end of file From 77e02754ac43cda4036a42dd11d90a1eabbd1df7 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Fri, 26 Jul 2024 20:05:04 +0800 Subject: [PATCH 60/81] chore(reporter): update AMB reporter variable name --- packages/reporter/.env.example | 4 ++-- packages/reporter/src/settings/index.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index e341bce5..8d701cc1 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -56,8 +56,8 @@ GNOSIS_AMB_ADAPTER=0x79e4D1B8b8De0bC2F8A3DC477480C935C66F373E # Testnet -GNOSIS_AMB_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B -GNOSIS_AMB_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 +SEPOLIA_CHIADO_AMB_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B +SEPOLIA_CHIADO_AMB_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 SEPOLIA_CHIADO_CCIP_REPORTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC SEPOLIA_CHIADO_CCIP_ADAPTER=0x8A2A7509B98f0f21BEFF82e2520A920DB61fFa9d diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 654b2df0..4f6a2c05 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -94,7 +94,7 @@ export const settings = { CCIPAdapter: process.env.BSC_TESTNET_CCIP_ADAPTER_SEPOLIA as `0x${string}`, }, [gnosisChiado.name]: { - AMBAdapter: process.env.CHIADO_SEPOLIA_ADAPTER as `0x${string}`, + AMBAdapter: process.env.SEPOLIA_CHIADO_AMB_ADAPTER as `0x${string}`, CCIPAdapter: process.env.SEPOLIA_CHIADO_CCIP_ADAPTER as `0x${string}`, LayerZeroAdapter: process.env.SEPOLIA_CHIADO_LZ_ADAPTER as `0x${string}`, WormholeAdapter: process.env.SEPOLIA_CHIADO_WORMHOLE_ADAPTER as `0x${string}`, @@ -172,7 +172,7 @@ export const settings = { CCIPReporter: process.env.SEPOLIA_CCIP_REPORTER_BSC_TESTNET as `0x${string}`, }, [gnosisChiado.name]: { - AMBReporter: process.env.SEPOLIA_CHIADO_REPORTER as `0x${string}`, + AMBReporter: process.env.SEPOLIA_CHIADO_AMB_REPORTER as `0x${string}`, CCIPReporter: process.env.SEPOLIA_CHIADO_CCIP_REPORTER as `0x${string}`, LayerZeroReporter: process.env.SEPOLIA_CHIADO_LZ_REPORTER as `0x${string}`, WormholeReporter: process.env.SEPOLIA_CHIADO_WORMHOLE_REPORTER as `0x${string}`, From 99a6a2a41ba9db3d9f84549f9981da18db18f2d0 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Mon, 29 Jul 2024 17:14:13 +0800 Subject: [PATCH 61/81] feat(reporter): add Base related addresses --- packages/reporter/.env.example | 12 +++++-- packages/reporter/src/Coordinator.ts | 5 ++- .../controllers/StandardReporterController.ts | 7 +++- packages/reporter/src/index.ts | 6 +++- packages/reporter/src/settings/index.ts | 35 +++++++++++++++++++ 5 files changed, 58 insertions(+), 7 deletions(-) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index 8d701cc1..9f8cdebf 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -10,6 +10,7 @@ GOERLI_RPC_URL= POLYGON_RPC_URL= OPTIMISM_RPC_URL=https://optimism.llamarpc.com ARBITRUM_RPC_URL=https://arbitrum.llamarpc.com +BASE_RPC_URL= SEPOLIA_RPC_URL= CHIADO_RPC_URL=https://rpc.chiadochain.net GOERLI_BEACON_API_URL= @@ -37,8 +38,8 @@ QUERY_BLOCK_LENGTH=200 -SOURCE_CHAIN_ID= -DESTINATION_CHAIN_IDS= +SOURCE_CHAIN_ID=8453 +DESTINATION_CHAIN_IDS=42161,10,56,137,100 # Mainnet @@ -49,6 +50,13 @@ POLYGON_MAINNET_LAYER_ZERO_ADAPTER=0x998dA7f6cF98541E4F4469cc9d53B9374F186591 BASE_MAINNET_LAYER_ZERO_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 OPTIMISM_MAINNET_LAYER_ZERO_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 +### BASE +BASE_LZ_REPORTER=0x495b872b329eba69F81A749f8A152766851C23b0 +BASE_POLYGON_LZ_ADAPTER=0x998dA7f6cF98541E4F4469cc9d53B9374F186591 +BASE_GNO_LZ_ADAPTER=0xC82e50cc90C84DC492B4Beb6792DEeB496d52424 +BASE_BNB_LZ_ADAPTER=0xDbdF80c87f414fac8342e04D870764197bD3bAC7 +BASE_OPTIMISM_LZ_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 +BASE_ARBITRUM_LZ_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 ## AMB MAINNET_AMB_REPORTER=0xDbdF80c87f414fac8342e04D870764197bD3bAC7 diff --git a/packages/reporter/src/Coordinator.ts b/packages/reporter/src/Coordinator.ts index 44c04b64..4a5be932 100644 --- a/packages/reporter/src/Coordinator.ts +++ b/packages/reporter/src/Coordinator.ts @@ -47,12 +47,11 @@ class Coordinator { } start() { - this.logger.info(`Start Reporter with config${this.controllers}`) - this.logger.info(`Source chain: ${this.sourceChain}`) + this.logger.info(`Running ${this.controllers[0].name}`) + this.logger.info(`Source chain: ${this.sourceChain.name}`) this.logger.info(`Query block length: ${this._queryBlockLength}`) this.logger.info(`Block Buffer: ${this._blockBuffer}`) this.logger.info(`Interval to fetch blocks (ms): ${this._intervalFetchBlocksMs}`) - this.logger.info(`Interval to update light clients: ${this._intervalsUpdateLightClients}`) this.fetchBlocks() this.intervals.push( diff --git a/packages/reporter/src/controllers/StandardReporterController.ts b/packages/reporter/src/controllers/StandardReporterController.ts index 1ee5d06d..5686cdfe 100644 --- a/packages/reporter/src/controllers/StandardReporterController.ts +++ b/packages/reporter/src/controllers/StandardReporterController.ts @@ -25,7 +25,10 @@ class StandardReporterController extends BaseController { const blockNumber = _blockNumbers[_blockNumbers.length - 1] for (const chain of this.destinationChains as Chain[]) { - if (!this.adapterAddresses[chain.name]) continue + if (!this.adapterAddresses[chain.name]) { + this.logger.info(`Adapter address is missing for ${chain.name}. Skipping...`) + continue + } this.logger.info(`reporting block header for block ${blockNumber} on ${chain.name} ...`) const { request } = await client.simulateContract({ @@ -38,6 +41,8 @@ class StandardReporterController extends BaseController { const txHash = await client.writeContract(request) this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) + + await new Promise((resolve) => setTimeout(resolve, 12000)) } } catch (_error) { this.logger.error(_error) diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 59dba0df..45835d67 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -31,6 +31,7 @@ import logger from "./utils/logger.js" const main = () => { const controllersEnabled = process.env.REPORTERS_ENABLED?.split(",") + const sourceChainId = Number(process.env.SOURCE_CHAIN_ID) const destinationChainIds = process.env.DESTINATION_CHAIN_IDS?.split(",").map((_chainId) => Number(_chainId)) const chains = [ @@ -212,16 +213,20 @@ const main = () => { // unidirectionalReportersAddresses[sourceChain.name]?.[optimismSepolia.name]?.LayerZeroReporter, [polygon.name]: unidirectionalReportersAddresses[sourceChain.name]?.[polygon.name]?.LayerZeroReporter, [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroReporter, + [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosis.name]?.LayerZeroReporter, [base.name]: unidirectionalReportersAddresses[sourceChain.name]?.[base.name]?.LayerZeroReporter, [optimism.name]: unidirectionalReportersAddresses[sourceChain.name]?.[optimism.name]?.LayerZeroReporter, + [arbitrum.name]: unidirectionalReportersAddresses[sourceChain.name]?.[arbitrum.name]?.LayerZeroReporter, [arbitrumSepolia.name]: unidirectionalReportersAddresses[sourceChain.name]?.[arbitrumSepolia.name]?.LayerZeroReporter, }, adapterAddresses: { [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[polygon.name]?.LayerZeroAdapter, [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroAdapter, + [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[gnosis.name]?.LayerZeroAdapter, [base.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[base.name]?.LayerZeroAdapter, [optimism.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[optimism.name]?.LayerZeroAdapter, + [arbitrum.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[arbitrum.name]?.LayerZeroAdapter, [arbitrumSepolia.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[arbitrumSepolia.name]?.LayerZeroAdapter, [optimismSepolia.name]: @@ -317,7 +322,6 @@ const main = () => { celerReporterController, layerZeroReporterController, hyperlaneReporterController, - ccipReporterController, zetaReporterController, electronReporterController, ].filter((_controller) => controllersEnabled?.includes(_controller.name)), diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index 4f6a2c05..e21db5e1 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -37,6 +37,7 @@ export const settings = { [bsc.name]: process.env.BSC_RPC_URL as string, [arbitrum.name]: process.env.ARBITRUM_RPC_URL as string, [sepolia.name]: process.env.SEPOLIA_RPC_URL as string, + [base.name]: process.env.BASE_RPC_URL as string, }, beaconApiUrls: { [goerli.name]: process.env.GOERLI_BEACON_API_URL as string, @@ -83,6 +84,23 @@ export const settings = { SygmaReporter: "0x2f96d347c932ac73b56e9352ecc0707e25173d88" as `0x${string}`, },*/ }, + [base.name]: { + [polygon.name]: { + LayerZeroAdapter: process.env.BASE_POLYGON_LZ_ADAPTER as `0x${string}`, + }, + [bsc.name]: { + LayerZeroAdapter: process.env.BASE_BNB_LZ_ADAPTER as `0x${string}`, + }, + [gnosis.name]: { + LayerZeroAdapter: process.env.BASE_GNO_LZ_ADAPTER as `0x${string}`, + }, + [arbitrum.name]: { + LayerZeroAdapter: process.env.BASE_ARBITRUM_LZ_ADAPTER as `0x${string}`, + }, + [optimism.name]: { + LayerZeroAdapter: process.env.BASE_OPTIMISM_LZ_ADAPTER as `0x${string}`, + }, + }, [sepolia.name]: { [optimismSepolia.name]: { LayerZeroAdapter: process.env.OPTIMISM_SEPOLIA_LZ_ADAPTER as `0x${string}`, @@ -161,6 +179,23 @@ export const settings = { CCIPReporter: process.env.MAINNET_CCIP_REPORTER_AVALANCHE as `0x${string}`, }, }, + [base.name]: { + [polygon.name]: { + LayerZeroReporter: process.env.BASE_LZ_REPORTER as `0x${string}`, + }, + [bsc.name]: { + LayerZeroReporter: process.env.BASE_LZ_REPORTER as `0x${string}`, + }, + [gnosis.name]: { + LayerZeroReporter: process.env.BASE_LZ_REPORTER as `0x${string}`, + }, + [arbitrum.name]: { + LayerZeroReporter: process.env.BASE_LZ_REPORTER as `0x${string}`, + }, + [optimism.name]: { + LayerZeroReporter: process.env.BASE_LZ_REPORTER as `0x${string}`, + }, + }, [sepolia.name]: { [optimismSepolia.name]: { LayerZeroReporter: process.env.SEPOLIA_CHIADO_LZ_REPORTER as `0x${string}`, From c6558b2c3b7061b8778c276db12570effc54ab93 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Sun, 25 Aug 2024 14:36:07 +0800 Subject: [PATCH 62/81] feat: dockerfile and docker compose for executor and relayer --- Dockerfile.executor | 30 ++++++++++++++++++++++++++ Dockerfile.relayer | 30 ++++++++++++++++++++++++++ docker-compose.yml | 38 +++++++++++++++++++++++++++++++++ packages/common/package.json | 4 ++-- packages/executor/package.json | 4 ++-- packages/executor/tsconfig.json | 20 ++++++++++++----- packages/relayer/tsconfig.json | 3 ++- 7 files changed, 119 insertions(+), 10 deletions(-) create mode 100644 Dockerfile.executor create mode 100644 Dockerfile.relayer create mode 100644 docker-compose.yml diff --git a/Dockerfile.executor b/Dockerfile.executor new file mode 100644 index 00000000..c3404b9f --- /dev/null +++ b/Dockerfile.executor @@ -0,0 +1,30 @@ +FROM node:18-alpine + +WORKDIR /usr/src/app +COPY package.json yarn.lock ./ + +COPY packages/common/package.json ./packages/common/ +COPY packages/executor/package.json ./packages/executor/ + +RUN yarn install --ignore-scripts + +WORKDIR /usr/src/app/packages/common +RUN yarn install --ignore-scripts + +WORKDIR /usr/src/app/packages/executor +RUN yarn install --ignore-scripts + +WORKDIR /usr/src/app + +COPY packages/common/ ./packages/common/ +COPY packages/executor/ ./packages/executor/ + +WORKDIR /usr/src/app/packages/common +RUN yarn compile + + + +WORKDIR /usr/src/app/packages/executor +RUN yarn compile + +CMD ["yarn", "start"] \ No newline at end of file diff --git a/Dockerfile.relayer b/Dockerfile.relayer new file mode 100644 index 00000000..f2d4479a --- /dev/null +++ b/Dockerfile.relayer @@ -0,0 +1,30 @@ +FROM node:18-alpine + +WORKDIR /usr/src/app +COPY package.json yarn.lock ./ + +COPY packages/common/package.json ./packages/common/ +COPY packages/relayer/package.json ./packages/relayer/ + +RUN yarn install --ignore-scripts + +WORKDIR /usr/src/app/packages/common +RUN yarn install --ignore-scripts + +WORKDIR /usr/src/app/packages/relayer +RUN yarn install --ignore-scripts + +WORKDIR /usr/src/app + +COPY packages/common/ ./packages/common/ +COPY packages/relayer/ ./packages/relayer/ + +WORKDIR /usr/src/app/packages/common +RUN yarn compile + + + +WORKDIR /usr/src/app/packages/relayer +RUN yarn compile + +CMD ["yarn", "start"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..f25ad892 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,38 @@ +version: "3.8" + +services: + mongodb: + image: mongo:latest + container_name: mongodb + ports: + - "27017:27017" + networks: + - mongo-network + volumes: -mongo-data:/data/db + + executor: + build: + context: . + dockerfile: Dockerfile.executor + container_name: executor + networks: + - mongo-network + depends_on: + - mongodb + + relayer: + build: + context: . + dockerfile: Dockerfile.relayer + container_name: relayer + networks: + - mongo-network + depends_on: + - mongodb +networks: + mongo-network: + driver: bridge + +volumes: + mongo-data: + driver: local diff --git a/packages/common/package.json b/packages/common/package.json index 8ce9e361..104f572f 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -17,8 +17,8 @@ "prettier:write": "prettier --write \"**/*.{js,json,md,sol,ts,yml}\"" }, "dependencies": { - "winston": "^3.11.0", - "viem": "^2.9.28" + "viem": "^2.9.28", + "winston": "^3.11.0" }, "devDependencies": { "@types/node": "^20.8.9", diff --git a/packages/executor/package.json b/packages/executor/package.json index 8af52a07..39e31722 100644 --- a/packages/executor/package.json +++ b/packages/executor/package.json @@ -12,14 +12,14 @@ "lint": "eslint --ignore-path ./.eslintignore --ext .js,.ts .", "prettier:check": "prettier --check \"**/*.{js,json,md,sol,ts,yml}\"", "prettier:write": "prettier --write \"**/*.{js,json,md,sol,ts,yml}\"", - "start": "ts-node --esm ./src/index.ts", + "start": "node --loader ts-node/esm ./src/index.ts", "start:dev": "nodemon" }, "dependencies": { "@gnosis/hashi-common": "0.1.0", "dotenv": "^16.3.1", "mongodb": "6.5.0", - "viem": "^2.9.28", + "viem": "2.20.0", "winston": "^3.11.0" }, "devDependencies": { diff --git a/packages/executor/tsconfig.json b/packages/executor/tsconfig.json index d69a137b..974c23aa 100644 --- a/packages/executor/tsconfig.json +++ b/packages/executor/tsconfig.json @@ -6,21 +6,31 @@ "esModuleInterop": true, "experimentalDecorators": true, "forceConsistentCasingInFileNames": true, - "lib": ["es6", "ESNext", "DOM"], + "lib": [ + "es6", + "ESNext", + "DOM" + ], "module": "ESNext", "moduleResolution": "node", "noImplicitAny": true, "outDir": "./dist", + "rootDir": "./src", "removeComments": true, "resolveJsonModule": true, "sourceMap": true, "strict": true, - "target": "ESNext" + "target": "ESNext", + "skipLibCheck": true, }, - "exclude": ["node_modules"], - "include": ["./src/**/*"], + "exclude": [ + "node_modules" + ], + "include": [ + "./src/**/*" + ], "ts-node": { "esm": true, "experimentalSpecifierResolution": "node" } -} +} \ No newline at end of file diff --git a/packages/relayer/tsconfig.json b/packages/relayer/tsconfig.json index d167b40a..652aa407 100644 --- a/packages/relayer/tsconfig.json +++ b/packages/relayer/tsconfig.json @@ -19,7 +19,8 @@ "resolveJsonModule": true, "sourceMap": true, "strict": true, - "target": "ESNext" + "target": "ESNext", + "skipLibCheck": true, }, "exclude": [ "node_modules" From 926ef27fee1e1aeb1f7ab35d26d9d979fdef4546 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Sun, 25 Aug 2024 15:28:21 +0800 Subject: [PATCH 63/81] fix: docker-compose format error --- docker-compose.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index f25ad892..5afb0136 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,8 @@ services: - "27017:27017" networks: - mongo-network - volumes: -mongo-data:/data/db + volumes: + - mongo-data:/data/db executor: build: From b1517a23f9d7b401098eb167217ed857da6ea929 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Fri, 30 Aug 2024 16:50:35 +0800 Subject: [PATCH 64/81] fix: Executor messageIds type & relayer start script --- docker-compose.yml | 2 +- packages/executor/src/index.ts | 18 ++++++++++++------ packages/relayer/package.json | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 5afb0136..80025ddb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,7 +25,7 @@ services: build: context: . dockerfile: Dockerfile.relayer - container_name: relayer + container_name: hashi-relayer networks: - mongo-network depends_on: diff --git a/packages/executor/src/index.ts b/packages/executor/src/index.ts index d5217b3a..668b89ae 100644 --- a/packages/executor/src/index.ts +++ b/packages/executor/src/index.ts @@ -1,8 +1,8 @@ -import 'dotenv/config' -import { createWalletClient, http, Chain, publicActions, Log } from "viem" +import "dotenv/config" +import { createWalletClient, http, Chain, publicActions, Log, createPublicClient } from "viem" import { privateKeyToAccount } from "viem/accounts" import * as chains from "viem/chains" -import { MongoClient} from "mongodb" +import { MongoClient } from "mongodb" import { adapterAbi, Batcher, logger, Message, Watcher, yahoAbi, yaruAbi } from "@gnosis/hashi-common" const mongoClient = new MongoClient(process.env.MONGO_DB_URI as string) @@ -12,13 +12,14 @@ const db = mongoClient.db("hashi") const sourceChain = Object.values(chains).find(({ id }) => id.toString() === (process.env.SOURCE_CHAIN_ID as string)) if (!sourceChain) throw new Error("Invalid SOURCE_CHAIN_ID") const targetChain = Object.values(chains).find(({ id }) => id.toString() === (process.env.TARGET_CHAIN_ID as string)) -if (!sourceChain) throw new Error("Invalid TARGET_CHAIN_ID") +if (!targetChain) throw new Error("Invalid TARGET_CHAIN_ID") const sourceClient = createWalletClient({ account: privateKeyToAccount(process.env.PK as `0x${string}`), chain: sourceChain as Chain | undefined, transport: http(process.env.SOURCE_RPC as string), }).extend(publicActions) + const targetClient = createWalletClient({ account: privateKeyToAccount(process.env.PK as `0x${string}`), chain: targetChain as Chain | undefined, @@ -37,7 +38,11 @@ const watchers = adapters.map( service: `ExecutorWatcher:${_adapter.slice(0, 6)}${_adapter.slice(_adapter.length - 4, _adapter.length)}`, watchIntervalTimeMs: Number(process.env.WATCH_INTERVAL_TIME_MS as string), onLogs: async (_logs: Log[]) => { - const messageIds = _logs.map((_log) => _log.topics[1]) + const messageIds = _logs + .map((_log) => _log.topics[1]) + .filter((id): id is `0x${string}` => id !== undefined) // Filter out undefined values + .map((id) => BigInt(id)) // Convert each string to bigint + // NOTE: without setting fromBlock and toBlock, it's not possible to getContractEvents const blockNumber = await sourceClient.getBlockNumber() const messageDispatchedLogs = await sourceClient.getContractEvents({ @@ -49,8 +54,9 @@ const watchers = adapters.map( }, fromBlock: blockNumber - BigInt(process.env.BLOCKS_WINDOW as string), toBlock: blockNumber, + strict: true, }) - + logger.info(`Found corresponding ${messageDispatchedLogs.length} message dispatch logs`) const messages = messageDispatchedLogs.map((_log) => Message.fromLog(_log)) for (const message of messages) { const hashStoredLog = _logs.find((_log) => _log.topics[1] === message.id) as Log diff --git a/packages/relayer/package.json b/packages/relayer/package.json index 33ab6a51..fbc166b2 100644 --- a/packages/relayer/package.json +++ b/packages/relayer/package.json @@ -12,7 +12,7 @@ "lint": "eslint --ignore-path ./.eslintignore --ext .js,.ts .", "prettier:check": "prettier --check \"**/*.{js,json,md,sol,ts,yml}\"", "prettier:write": "prettier --write \"**/*.{js,json,md,sol,ts,yml}\"", - "start": "ts-node --esm ./src/index.ts", + "start": "node --loader ts-node/esm ./src/index.ts", "start:dev": "nodemon" }, "dependencies": { From 10f1856f55fc6868211a20a8c3753451d21694f5 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Fri, 13 Sep 2024 18:51:20 +0800 Subject: [PATCH 65/81] chore(reporter): update reporters and adapters configs --- .../adapters/LayerZero/LayerZeroReporter.sol | 10 +- packages/reporter/.env.example | 183 ++++++++++-------- packages/reporter/src/index.ts | 12 -- packages/reporter/src/settings/index.ts | 180 ++++++++++++++++- 4 files changed, 281 insertions(+), 104 deletions(-) diff --git a/packages/evm/contracts/adapters/LayerZero/LayerZeroReporter.sol b/packages/evm/contracts/adapters/LayerZero/LayerZeroReporter.sol index eb7566e7..69986c4d 100644 --- a/packages/evm/contracts/adapters/LayerZero/LayerZeroReporter.sol +++ b/packages/evm/contracts/adapters/LayerZero/LayerZeroReporter.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.20; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; -import { ILayerZeroEndpointV2, MessagingParams } from "./interfaces/ILayerZeroEndpointV2.sol"; +import { ILayerZeroEndpointV2, MessagingParams, MessagingFee, MessagingReceipt } from "./interfaces/ILayerZeroEndpointV2.sol"; import { Reporter } from "../Reporter.sol"; import { OptionsBuilder } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/libs/OptionsBuilder.sol"; import { OAppCore } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OAppCore.sol"; @@ -52,7 +52,6 @@ contract LayerZeroReporter is Reporter, Ownable, OAppCore { function oAppVersion() public pure virtual override returns (uint64 senderVersion, uint64 receiverVersion) { return (1, 1); } - function _dispatch( uint256 targetChainId, address adapter, @@ -71,7 +70,10 @@ contract LayerZeroReporter is Reporter, Ownable, OAppCore { false // receiver in lz Token ); // solhint-disable-next-line check-send-result - LAYER_ZERO_ENDPOINT.send{ value: msg.value }(params, refundAddress); - return bytes32(0); + MessagingFee memory msgFee = LAYER_ZERO_ENDPOINT.quote(params, address(this)); + MessagingReceipt memory receipt = LAYER_ZERO_ENDPOINT.send{ value: msgFee.nativeFee }(params, refundAddress); + return receipt.guid; } + + receive() external payable {} } diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index 9f8cdebf..e4ab8bae 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -44,88 +44,105 @@ DESTINATION_CHAIN_IDS=42161,10,56,137,100 # Mainnet ## Layer Zero -MAINNET_LAYER_ZERO_REPORTER=0xbc5f67da5347cd4304e9623bc86e71a874287ea1 -BSC_MAINNET_LAYER_ZERO_ADAPTER=0xDbdF80c87f414fac8342e04D870764197bD3bAC7 -POLYGON_MAINNET_LAYER_ZERO_ADAPTER=0x998dA7f6cF98541E4F4469cc9d53B9374F186591 -BASE_MAINNET_LAYER_ZERO_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 -OPTIMISM_MAINNET_LAYER_ZERO_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 -### BASE + +GNOSIS_LZ_ADAPTER=0x6602dc9b6bd964C2a11BBdA9B2275308D1Bbc14f +POLYGON_LZ_ADAPTER=0xf4C84D9ced01534f235078A10E8A44A726c4b73c +BSC_LZ_ADAPTER=0x97761F61736Ec2D108a1b6826f5Ee2E02d1B333e +OPTIMISM_LZ_ADAPTER=0x746dfa0251A31e587E97bBe0c58ED67A343280Df +ARBITRUM_LZ_ADAPTER=0x97761F61736Ec2D108a1b6826f5Ee2E02d1B333e +BASE_LZ_ADAPTER=0x5F98c418C10132aA4D1b3c98cE4F68Ef2435e4eC + + +GNOSIS_LZ_REPORTER=0xA3Bc83D557E3f2dDfF4D44966A96397760159D8B +OPTIMISM_LZ_REPORTER=0xB866C6dD03434d8fA792C471b454cb4E72ca35dc +ARBITRUM_LZ_REPORTER=0xf4C84D9ced01534f235078A10E8A44A726c4b73c +POLYGON_LZ_REPORTER=0x231e48AAEaAC6398978a1dBA4Cd38fcA208Ec391 +BSC_LZ_REPORTER=0xc9618e4d4B59570Da67b4fb0E8fC7EB40A5f8462 BASE_LZ_REPORTER=0x495b872b329eba69F81A749f8A152766851C23b0 -BASE_POLYGON_LZ_ADAPTER=0x998dA7f6cF98541E4F4469cc9d53B9374F186591 -BASE_GNO_LZ_ADAPTER=0xC82e50cc90C84DC492B4Beb6792DEeB496d52424 -BASE_BNB_LZ_ADAPTER=0xDbdF80c87f414fac8342e04D870764197bD3bAC7 -BASE_OPTIMISM_LZ_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 -BASE_ARBITRUM_LZ_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 - -## AMB -MAINNET_AMB_REPORTER=0xDbdF80c87f414fac8342e04D870764197bD3bAC7 -GNOSIS_AMB_ADAPTER=0x79e4D1B8b8De0bC2F8A3DC477480C935C66F373E - - -# Testnet -SEPOLIA_CHIADO_AMB_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B -SEPOLIA_CHIADO_AMB_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 - -SEPOLIA_CHIADO_CCIP_REPORTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC -SEPOLIA_CHIADO_CCIP_ADAPTER=0x8A2A7509B98f0f21BEFF82e2520A920DB61fFa9d -SEPOLIA_WORMHOLE_ADDRESS=0x4a8bc80Ed5a4067f1CCf107057b8270E0cC11A78 - -SEPOLIA_CHIADO_WORMHOLE_REPORTER=0xeE8082F48e768e096c2EEC5C80DC818eb6E15858 -SEPOLIA_CHIADO_WORMHOLE_ADAPTER=0x79e4D1B8b8De0bC2F8A3DC477480C935C66F373E - -# LEGACY -GNOSIS_AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 -GNOSIS_AMB_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 - -SEPOLIA_CHIADO_CCIP_REPORTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC -SEPOLIA_CHIADO_CCIP_ADAPTER=0x8A2A7509B98f0f21BEFF82e2520A920DB61fFa9d -SEPOLIA_CHIADO_LZ_REPORTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 -SEPOLIA_CHIADO_LZ_ADAPTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 - -SEPOLIA_ARB_LZ_REPORTER=0x49f6BE2C7DB433395939b2c728dF2CB99Ca5f8c5 -SEPOLIA_ARB_LZ_ADAPTER=0x21eAB033C7D2DF6A67AeF6C5Bda9A7F151eB9f52 - -OPTIMISM_SEPOLIA_LZ_ADAPTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 -CHIADO_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B - -#AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 -SYMGA_ADAPTER=0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15 -GNOSIS_TELEPATHY_ADAPTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 -# MAINNET_AMB_REPORTER=0x6be796cb66CdB3566b8AbebA2C516CbDF93fE831 -MAINNET_HEADER_REPORTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a -POLYGON_TELEPATHY_ADAPTER=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 -BSC_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 -OPTIMISM_TELEPATHY_ADAPTER=0x856dcc80f75a9737D9D498266E1Af013668316Fb -ARBITRUM_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 -GNOSIS_WORMHOLE_ADAPTER=0x8EA3F385be8FCB98eB4dBfad2D00846860Bf648D -POLYGON_WORMHOLE_ADAPTER=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 -BSC_WORMHOLE_ADAPTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a -OPTIMISM_WORMHOLE_ADAPTER=0x1fF52708D610b1D17F0830f036e992677CDc508A -AVALANCHE_WORMHOLE_ADAPTER=0x6E9ce437c46e7fA4F0888c21AAC0d9099Ad133ea -MAINNET_WORMHOLE_HEADER_REPORTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 -MAINNET_WORMHOLE_ADDRESS=0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B -MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS=0xbA5B3f0643582E75AF252e7631dE62c046970167 -OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS=0xe58E7bF7aCD1396D8F9eAF44DB3D4Fd055DCDb51 -MAINNET_AXELAR_REPORTER_BSC=0xBfd877753F8B4f4117a08aD54DcBE69cF3165d81 -BSC_AXELAR_ADAPTER_MAINNET=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 -POLYGON_CELER_ADAPTER_MAINNET=0x1fF52708D610b1D17F0830f036e992677CDc508A -MAINNET_CELER_REPORTER_POLYGON=0x52258b83051B7031483740aC9EcAa07926392ea0 -AVALANCHE_LAYER_ZERO_ADAPTER_MAINNET=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a -MAINNET_LAYER_ZERO_REPORTER_AVALANCHE=0x16B43E348e0A19E9196ae79D172aDC52B3Aa3E20 -OPTIMISM_GOERLI_CCIP_ADAPTER_SEPOLIA=0x520185210Aa645220a49afD9C33d28b73494e14d -SEPOLIA_CCIP_REPORTER_OPTIMISM_GOERLI=0xF3D2877866cd8E6771843b96B66aFcE425B2353C -BSC_TESTNET_CCIP_ADAPTER_SEPOLIA=0xB6133Ab655B990E80Af3E948852C8ec2a46651A5 -SEPOLIA_CCIP_REPORTER_BSC_TESTNET=0x855A2814E0DFf8327f1a52aCC9537772B829e226 - -BSC_LAYER_ZERO_ADAPTER_MAINNET=0xaC3c8D19A64B98d62ED16FFf8a4229E8ED36A469 -GOERLI_ZETA_REPORTER_BSC_TESTNET=0x9a9fc484D3F83B489bc58c2A3EeeA8331F21796B -BSC_TESTNET_ZETA_ADAPTER_GOERLI=0x2829D554678a767c5B091D28A0A294dB7643ec05 -MAINNET_CCIP_REPORTER_AVALANCHE=0xeEFD0D67E4eF9330870961C38a3e25ECE369B141 -AVALANCHE_CCIP_ADAPTER_MAINNET=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 -GNOSIS_SYGMA_ADAPTER=0x483285D0e24401D0C5DB6cF1FAC4f79f412079C0 -MAINNET_SYGMA_REPORTER_GNOSIS=0x973bB99db211755b80c9087fe436fBb81A45AD5E -MAINNET_HEADER_STORAGE=0x22F1fc71A505c0b2bf4D5075801cc5E0ec84B09e -GOERLI_HEADER_STORAGE=0x4cD014AC64AAa899b46BF3a477B68bb67e33eDC4 -CHIADO_ELECTRON_ADAPTER_GOERLI=0x66fBC348aef3797fb885f8073173E5064bf7ABBb -CHIADO_ELECTRON_LIGHT_CLIENT_GOERLI=0xc01707bD835f6108785DF081C943C7C108FC3D89 \ No newline at end of file + +# MAINNET_LAYER_ZERO_REPORTER=0xbc5f67da5347cd4304e9623bc86e71a874287ea1 +# BSC_MAINNET_LAYER_ZERO_ADAPTER=0xDbdF80c87f414fac8342e04D870764197bD3bAC7 +# POLYGON_MAINNET_LAYER_ZERO_ADAPTER=0x998dA7f6cF98541E4F4469cc9d53B9374F186591 +# BASE_MAINNET_LAYER_ZERO_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 +# OPTIMISM_MAINNET_LAYER_ZERO_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 + +# ### BASE +# BASE_LZ_REPORTER=0x495b872b329eba69F81A749f8A152766851C23b0 +# BASE_POLYGON_LZ_ADAPTER=0x998dA7f6cF98541E4F4469cc9d53B9374F186591 +# BASE_GNO_LZ_ADAPTER=0xC82e50cc90C84DC492B4Beb6792DEeB496d52424 +# BASE_BNB_LZ_ADAPTER=0xDbdF80c87f414fac8342e04D870764197bD3bAC7 +# BASE_OPTIMISM_LZ_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 +# BASE_ARBITRUM_LZ_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 + +# ## AMB +# MAINNET_AMB_REPORTER=0xDbdF80c87f414fac8342e04D870764197bD3bAC7 +# GNOSIS_AMB_ADAPTER=0x79e4D1B8b8De0bC2F8A3DC477480C935C66F373E + + +# # Testnet +# SEPOLIA_CHIADO_AMB_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B +# SEPOLIA_CHIADO_AMB_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 + +# SEPOLIA_CHIADO_CCIP_REPORTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC +# SEPOLIA_CHIADO_CCIP_ADAPTER=0x8A2A7509B98f0f21BEFF82e2520A920DB61fFa9d +# SEPOLIA_WORMHOLE_ADDRESS=0x4a8bc80Ed5a4067f1CCf107057b8270E0cC11A78 + +# SEPOLIA_CHIADO_WORMHOLE_REPORTER=0xeE8082F48e768e096c2EEC5C80DC818eb6E15858 +# SEPOLIA_CHIADO_WORMHOLE_ADAPTER=0x79e4D1B8b8De0bC2F8A3DC477480C935C66F373E + +# # LEGACY +# GNOSIS_AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 +# GNOSIS_AMB_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 + +# SEPOLIA_CHIADO_CCIP_REPORTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC +# SEPOLIA_CHIADO_CCIP_ADAPTER=0x8A2A7509B98f0f21BEFF82e2520A920DB61fFa9d +# SEPOLIA_CHIADO_LZ_REPORTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 +# SEPOLIA_CHIADO_LZ_ADAPTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 + +# SEPOLIA_ARB_LZ_REPORTER=0x49f6BE2C7DB433395939b2c728dF2CB99Ca5f8c5 +# SEPOLIA_ARB_LZ_ADAPTER=0x21eAB033C7D2DF6A67AeF6C5Bda9A7F151eB9f52 + +# OPTIMISM_SEPOLIA_LZ_ADAPTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 +# CHIADO_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B + +# #AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 +# SYMGA_ADAPTER=0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15 +# GNOSIS_TELEPATHY_ADAPTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 +# # MAINNET_AMB_REPORTER=0x6be796cb66CdB3566b8AbebA2C516CbDF93fE831 +# MAINNET_HEADER_REPORTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a +# POLYGON_TELEPATHY_ADAPTER=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 +# BSC_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 +# OPTIMISM_TELEPATHY_ADAPTER=0x856dcc80f75a9737D9D498266E1Af013668316Fb +# ARBITRUM_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 +# GNOSIS_WORMHOLE_ADAPTER=0x8EA3F385be8FCB98eB4dBfad2D00846860Bf648D +# POLYGON_WORMHOLE_ADAPTER=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 +# BSC_WORMHOLE_ADAPTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a +# OPTIMISM_WORMHOLE_ADAPTER=0x1fF52708D610b1D17F0830f036e992677CDc508A +# AVALANCHE_WORMHOLE_ADAPTER=0x6E9ce437c46e7fA4F0888c21AAC0d9099Ad133ea +# MAINNET_WORMHOLE_HEADER_REPORTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 +# MAINNET_WORMHOLE_ADDRESS=0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B +# MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS=0xbA5B3f0643582E75AF252e7631dE62c046970167 +# OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS=0xe58E7bF7aCD1396D8F9eAF44DB3D4Fd055DCDb51 +# MAINNET_AXELAR_REPORTER_BSC=0xBfd877753F8B4f4117a08aD54DcBE69cF3165d81 +# BSC_AXELAR_ADAPTER_MAINNET=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 +# POLYGON_CELER_ADAPTER_MAINNET=0x1fF52708D610b1D17F0830f036e992677CDc508A +# MAINNET_CELER_REPORTER_POLYGON=0x52258b83051B7031483740aC9EcAa07926392ea0 +# AVALANCHE_LAYER_ZERO_ADAPTER_MAINNET=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a +# MAINNET_LAYER_ZERO_REPORTER_AVALANCHE=0x16B43E348e0A19E9196ae79D172aDC52B3Aa3E20 +# OPTIMISM_GOERLI_CCIP_ADAPTER_SEPOLIA=0x520185210Aa645220a49afD9C33d28b73494e14d +# SEPOLIA_CCIP_REPORTER_OPTIMISM_GOERLI=0xF3D2877866cd8E6771843b96B66aFcE425B2353C +# BSC_TESTNET_CCIP_ADAPTER_SEPOLIA=0xB6133Ab655B990E80Af3E948852C8ec2a46651A5 +# SEPOLIA_CCIP_REPORTER_BSC_TESTNET=0x855A2814E0DFf8327f1a52aCC9537772B829e226 + +# BSC_LAYER_ZERO_ADAPTER_MAINNET=0xaC3c8D19A64B98d62ED16FFf8a4229E8ED36A469 +# GOERLI_ZETA_REPORTER_BSC_TESTNET=0x9a9fc484D3F83B489bc58c2A3EeeA8331F21796B +# BSC_TESTNET_ZETA_ADAPTER_GOERLI=0x2829D554678a767c5B091D28A0A294dB7643ec05 +# MAINNET_CCIP_REPORTER_AVALANCHE=0xeEFD0D67E4eF9330870961C38a3e25ECE369B141 +# AVALANCHE_CCIP_ADAPTER_MAINNET=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 +# GNOSIS_SYGMA_ADAPTER=0x483285D0e24401D0C5DB6cF1FAC4f79f412079C0 +# MAINNET_SYGMA_REPORTER_GNOSIS=0x973bB99db211755b80c9087fe436fBb81A45AD5E +# MAINNET_HEADER_STORAGE=0x22F1fc71A505c0b2bf4D5075801cc5E0ec84B09e +# GOERLI_HEADER_STORAGE=0x4cD014AC64AAa899b46BF3a477B68bb67e33eDC4 +# CHIADO_ELECTRON_ADAPTER_GOERLI=0x66fBC348aef3797fb885f8073173E5064bf7ABBb +# CHIADO_ELECTRON_LIGHT_CLIENT_GOERLI=0xc01707bD835f6108785DF081C943C7C108FC3D89 \ No newline at end of file diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 45835d67..9baa2ec7 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -207,18 +207,12 @@ const main = () => { logger, multiClient, reporterAddresses: { - // [avalanche.name]: unidirectionalReportersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroReporter, - // [gnosisChiado.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosisChiado.name]?.LayerZeroReporter, - // [optimismSepolia.name]: - // unidirectionalReportersAddresses[sourceChain.name]?.[optimismSepolia.name]?.LayerZeroReporter, [polygon.name]: unidirectionalReportersAddresses[sourceChain.name]?.[polygon.name]?.LayerZeroReporter, [bsc.name]: unidirectionalReportersAddresses[sourceChain.name]?.[bsc.name]?.LayerZeroReporter, [gnosis.name]: unidirectionalReportersAddresses[sourceChain.name]?.[gnosis.name]?.LayerZeroReporter, [base.name]: unidirectionalReportersAddresses[sourceChain.name]?.[base.name]?.LayerZeroReporter, [optimism.name]: unidirectionalReportersAddresses[sourceChain.name]?.[optimism.name]?.LayerZeroReporter, [arbitrum.name]: unidirectionalReportersAddresses[sourceChain.name]?.[arbitrum.name]?.LayerZeroReporter, - [arbitrumSepolia.name]: - unidirectionalReportersAddresses[sourceChain.name]?.[arbitrumSepolia.name]?.LayerZeroReporter, }, adapterAddresses: { [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[polygon.name]?.LayerZeroAdapter, @@ -227,12 +221,6 @@ const main = () => { [base.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[base.name]?.LayerZeroAdapter, [optimism.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[optimism.name]?.LayerZeroAdapter, [arbitrum.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[arbitrum.name]?.LayerZeroAdapter, - [arbitrumSepolia.name]: - unidirectionalAdaptersAddresses[sourceChain.name]?.[arbitrumSepolia.name]?.LayerZeroAdapter, - [optimismSepolia.name]: - unidirectionalAdaptersAddresses[sourceChain.name]?.[optimismSepolia.name]?.LayerZeroAdapter, - // [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[gnosisChiado.name]?.LayerZeroAdapter, - // [avalanche.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.[avalanche.name]?.LayerZeroAdapter, }, reportHeadersValue: settings.reporterControllers.LayerZeroReporterController.reportHeadersValue, }) diff --git a/packages/reporter/src/settings/index.ts b/packages/reporter/src/settings/index.ts index e21db5e1..c324fe45 100644 --- a/packages/reporter/src/settings/index.ts +++ b/packages/reporter/src/settings/index.ts @@ -86,19 +86,104 @@ export const settings = { }, [base.name]: { [polygon.name]: { - LayerZeroAdapter: process.env.BASE_POLYGON_LZ_ADAPTER as `0x${string}`, + LayerZeroAdapter: process.env.POLYGON_LZ_ADAPTER as `0x${string}`, }, [bsc.name]: { - LayerZeroAdapter: process.env.BASE_BNB_LZ_ADAPTER as `0x${string}`, + LayerZeroAdapter: process.env.BSC_LZ_ADAPTER as `0x${string}`, }, [gnosis.name]: { - LayerZeroAdapter: process.env.BASE_GNO_LZ_ADAPTER as `0x${string}`, + LayerZeroAdapter: process.env.GNOSIS_LZ_ADAPTER as `0x${string}`, }, [arbitrum.name]: { - LayerZeroAdapter: process.env.BASE_ARBITRUM_LZ_ADAPTER as `0x${string}`, + LayerZeroAdapter: process.env.ARBITRUM_LZ_ADAPTER as `0x${string}`, }, [optimism.name]: { - LayerZeroAdapter: process.env.BASE_OPTIMISM_LZ_ADAPTER as `0x${string}`, + LayerZeroAdapter: process.env.OPTIMISM_LZ_ADAPTER as `0x${string}`, + }, + }, + [gnosis.name]: { + [polygon.name]: { + LayerZeroAdapter: process.env.POLYGON_LZ_ADAPTER as `0x${string}`, + }, + [bsc.name]: { + LayerZeroAdapter: process.env.BSC_LZ_ADAPTER as `0x${string}`, + }, + [base.name]: { + LayerZeroAdapter: process.env.BASE_LZ_ADAPTER as `0x${string}`, + }, + [arbitrum.name]: { + LayerZeroAdapter: process.env.ARBITRUM_LZ_ADAPTER as `0x${string}`, + }, + [optimism.name]: { + LayerZeroAdapter: process.env.OPTIMISM_LZ_ADAPTER as `0x${string}`, + }, + }, + [polygon.name]: { + [base.name]: { + LayerZeroAdapter: process.env.BASE_LZ_ADAPTER as `0x${string}`, + }, + [bsc.name]: { + LayerZeroAdapter: process.env.BSC_LZ_ADAPTER as `0x${string}`, + }, + [gnosis.name]: { + LayerZeroAdapter: process.env.GNOSIS_LZ_ADAPTER as `0x${string}`, + }, + [arbitrum.name]: { + LayerZeroAdapter: process.env.ARBITRUM_LZ_ADAPTER as `0x${string}`, + }, + [optimism.name]: { + LayerZeroAdapter: process.env.OPTIMISM_LZ_ADAPTER as `0x${string}`, + }, + }, + [bsc.name]: { + [polygon.name]: { + LayerZeroAdapter: process.env.POLYGON_LZ_ADAPTER as `0x${string}`, + }, + [base.name]: { + LayerZeroAdapter: process.env.BASE_LZ_ADAPTER as `0x${string}`, + }, + [gnosis.name]: { + LayerZeroAdapter: process.env.GNOSIS_LZ_ADAPTER as `0x${string}`, + }, + [arbitrum.name]: { + LayerZeroAdapter: process.env.ARBITRUM_LZ_ADAPTER as `0x${string}`, + }, + [optimism.name]: { + LayerZeroAdapter: process.env.OPTIMISM_LZ_ADAPTER as `0x${string}`, + }, + }, + [optimism.name]: { + [polygon.name]: { + LayerZeroAdapter: process.env.POLYGON_LZ_ADAPTER as `0x${string}`, + }, + [bsc.name]: { + LayerZeroAdapter: process.env.BSC_LZ_ADAPTER as `0x${string}`, + }, + [gnosis.name]: { + LayerZeroAdapter: process.env.GNOSIS_LZ_ADAPTER as `0x${string}`, + }, + [arbitrum.name]: { + LayerZeroAdapter: process.env.ARBITRUM_LZ_ADAPTER as `0x${string}`, + }, + [base.name]: { + LayerZeroAdapter: process.env.BASE_LZ_ADAPTER as `0x${string}`, + }, + }, + [arbitrum.name]: { + [polygon.name]: { + LayerZeroAdapter: process.env.POLYGON_LZ_ADAPTER as `0x${string}`, + }, + [bsc.name]: { + LayerZeroAdapter: process.env.BSC_LZ_ADAPTER as `0x${string}`, + }, + [gnosis.name]: { + LayerZeroAdapter: process.env.GNOSIS_LZ_ADAPTER as `0x${string}`, + }, + [base.name]: { + LayerZeroAdapter: process.env.BASE_LZ_ADAPTER as `0x${string}`, + }, + [optimism.name]: { + LayerZeroAdapter: process.env.OPTIMISM_LZ_ADAPTER as `0x${string}`, }, }, [sepolia.name]: { @@ -196,6 +281,91 @@ export const settings = { LayerZeroReporter: process.env.BASE_LZ_REPORTER as `0x${string}`, }, }, + [gnosis.name]: { + [polygon.name]: { + LayerZeroReporter: process.env.GNOSIS_LZ_REPORTER as `0x${string}`, + }, + [bsc.name]: { + LayerZeroReporter: process.env.GNOSIS_LZ_REPORTER as `0x${string}`, + }, + [base.name]: { + LayerZeroReporter: process.env.GNOSIS_LZ_REPORTER as `0x${string}`, + }, + [arbitrum.name]: { + LayerZeroReporter: process.env.GNOSIS_LZ_REPORTER as `0x${string}`, + }, + [optimism.name]: { + LayerZeroReporter: process.env.GNOSIS_LZ_REPORTER as `0x${string}`, + }, + }, + [optimism.name]: { + [polygon.name]: { + LayerZeroReporter: process.env.OPTIMISM_LZ_REPORTER as `0x${string}`, + }, + [bsc.name]: { + LayerZeroReporter: process.env.OPTIMISM_LZ_REPORTER as `0x${string}`, + }, + [base.name]: { + LayerZeroReporter: process.env.OPTIMISM_LZ_REPORTER as `0x${string}`, + }, + [arbitrum.name]: { + LayerZeroReporter: process.env.OPTIMISM_LZ_REPORTER as `0x${string}`, + }, + [gnosis.name]: { + LayerZeroReporter: process.env.OPTIMISM_LZ_REPORTER as `0x${string}`, + }, + }, + [arbitrum.name]: { + [polygon.name]: { + LayerZeroReporter: process.env.ARBITRUM_LZ_REPORTER as `0x${string}`, + }, + [bsc.name]: { + LayerZeroReporter: process.env.ARBITRUM_LZ_REPORTER as `0x${string}`, + }, + [base.name]: { + LayerZeroReporter: process.env.ARBITRUM_LZ_REPORTER as `0x${string}`, + }, + [optimism.name]: { + LayerZeroReporter: process.env.ARBITRUM_LZ_REPORTER as `0x${string}`, + }, + [gnosis.name]: { + LayerZeroReporter: process.env.ARBITRUM_LZ_REPORTER as `0x${string}`, + }, + }, + [polygon.name]: { + [arbitrum.name]: { + LayerZeroReporter: process.env.POLYGON_LZ_REPORTER as `0x${string}`, + }, + [bsc.name]: { + LayerZeroReporter: process.env.POLYGON_LZ_REPORTER as `0x${string}`, + }, + [base.name]: { + LayerZeroReporter: process.env.POLYGON_LZ_REPORTER as `0x${string}`, + }, + [optimism.name]: { + LayerZeroReporter: process.env.POLYGON_LZ_REPORTER as `0x${string}`, + }, + [gnosis.name]: { + LayerZeroReporter: process.env.POLYGON_LZ_REPORTER as `0x${string}`, + }, + }, + [bsc.name]: { + [arbitrum.name]: { + LayerZeroReporter: process.env.BSC_LZ_REPORTER as `0x${string}`, + }, + [polygon.name]: { + LayerZeroReporter: process.env.BSC_LZ_REPORTER as `0x${string}`, + }, + [base.name]: { + LayerZeroReporter: process.env.BSC_LZ_REPORTER as `0x${string}`, + }, + [optimism.name]: { + LayerZeroReporter: process.env.BSC_LZ_REPORTER as `0x${string}`, + }, + [gnosis.name]: { + LayerZeroReporter: process.env.BSC_LZ_REPORTER as `0x${string}`, + }, + }, [sepolia.name]: { [optimismSepolia.name]: { LayerZeroReporter: process.env.SEPOLIA_CHIADO_LZ_REPORTER as `0x${string}`, From 943ae5fa788123bc0657a65f90c92cc9857d350c Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Mon, 16 Sep 2024 15:26:54 +0800 Subject: [PATCH 66/81] chore: remove unused ABI files --- .../src/ABIs/AMBReporterContractABI.json | 268 ------------- .../src/ABIs/CCIPReporterContractABI.json | 368 ------------------ .../ABIs/LayerZeroReporterContractABI.json | 368 ------------------ 3 files changed, 1004 deletions(-) delete mode 100644 packages/reporter/src/ABIs/AMBReporterContractABI.json delete mode 100644 packages/reporter/src/ABIs/CCIPReporterContractABI.json delete mode 100644 packages/reporter/src/ABIs/LayerZeroReporterContractABI.json diff --git a/packages/reporter/src/ABIs/AMBReporterContractABI.json b/packages/reporter/src/ABIs/AMBReporterContractABI.json deleted file mode 100644 index b9c1b8e4..00000000 --- a/packages/reporter/src/ABIs/AMBReporterContractABI.json +++ /dev/null @@ -1,268 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "headerStorage", - "type": "address" - }, - { - "internalType": "address", - "name": "yaho", - "type": "address" - }, - { - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gas", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedChainId", - "type": "uint256" - } - ], - "name": "InvalidToChainId", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "expectedYaho", - "type": "address" - } - ], - "name": "NotYaho", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "blockHeader", - "type": "bytes32" - } - ], - "name": "BlockDispatched", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "messageId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "MessageDispatched", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "HEADER_STORAGE", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROVIDER", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TARGET_CHAIN_ID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "YAHO", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "blockNumbers", - "type": "uint256[]" - } - ], - "name": "dispatchBlocks", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "messageIds", - "type": "uint256[]" - }, - { - "internalType": "bytes32[]", - "name": "messageHashes", - "type": "bytes32[]" - } - ], - "name": "dispatchMessages", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - } -] diff --git a/packages/reporter/src/ABIs/CCIPReporterContractABI.json b/packages/reporter/src/ABIs/CCIPReporterContractABI.json deleted file mode 100644 index fdd75331..00000000 --- a/packages/reporter/src/ABIs/CCIPReporterContractABI.json +++ /dev/null @@ -1,368 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "headerStorage", - "type": "address" - }, - { - "internalType": "address", - "name": "yaho", - "type": "address" - }, - { - "internalType": "address", - "name": "ccipRouter", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ChainSelectorNotAvailable", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "expectedYaho", - "type": "address" - } - ], - "name": "NotYaho", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "blockHeader", - "type": "bytes32" - } - ], - "name": "BlockDispatched", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint64", - "name": "chainSelector", - "type": "uint64" - } - ], - "name": "ChainSelectorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "FeeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "messageId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "MessageDispatched", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "CCIP_ROUTER", - "outputs": [ - { - "internalType": "contract IRouterClient", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "HEADER_STORAGE", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROVIDER", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "YAHO", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "chainSelectors", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "blockNumbers", - "type": "uint256[]" - } - ], - "name": "dispatchBlocks", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "messageIds", - "type": "uint256[]" - }, - { - "internalType": "bytes32[]", - "name": "messageHashes", - "type": "bytes32[]" - } - ], - "name": "dispatchMessages", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "fee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint64", - "name": "chainSelector", - "type": "uint64" - } - ], - "name": "setChainSelectorByChainId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "fee_", - "type": "uint256" - } - ], - "name": "setFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/packages/reporter/src/ABIs/LayerZeroReporterContractABI.json b/packages/reporter/src/ABIs/LayerZeroReporterContractABI.json deleted file mode 100644 index 6d6a228c..00000000 --- a/packages/reporter/src/ABIs/LayerZeroReporterContractABI.json +++ /dev/null @@ -1,368 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "headerStorage", - "type": "address" - }, - { - "internalType": "address", - "name": "yaho", - "type": "address" - }, - { - "internalType": "address", - "name": "lzEndpoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "EndpointIdNotAvailable", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "expectedYaho", - "type": "address" - } - ], - "name": "NotYaho", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "blockHeader", - "type": "bytes32" - } - ], - "name": "BlockDispatched", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint16", - "name": "endpointId", - "type": "uint16" - } - ], - "name": "EndpointIdSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "FeeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "messageId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "MessageDispatched", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "HEADER_STORAGE", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LAYER_ZERO_ENDPOINT", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpoint", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROVIDER", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "YAHO", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "blockNumbers", - "type": "uint256[]" - } - ], - "name": "dispatchBlocks", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "messageIds", - "type": "uint256[]" - }, - { - "internalType": "bytes32[]", - "name": "messageHashes", - "type": "bytes32[]" - } - ], - "name": "dispatchMessages", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "endpointIds", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "endpointId", - "type": "uint16" - } - ], - "name": "setEndpointIdByChainId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "fee_", - "type": "uint256" - } - ], - "name": "setFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] From 0e86e03fa5ac10557fb37b9c1ac68a2126c9e0a1 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Wed, 18 Sep 2024 18:03:51 +0800 Subject: [PATCH 67/81] chore(reporter): remove redundant addresses in .env.example --- packages/reporter/.env.example | 89 +--------------------------------- 1 file changed, 1 insertion(+), 88 deletions(-) diff --git a/packages/reporter/.env.example b/packages/reporter/.env.example index e4ab8bae..8ff12943 100644 --- a/packages/reporter/.env.example +++ b/packages/reporter/.env.example @@ -3,8 +3,7 @@ PRIVATE_KEY= REPORTERS_ENABLED=WormholeReporterController,AMBReporterController,LayerZeroReporterController GNOSIS_RPC_URL=https://rpc.ankr.com/gnosis -MAINNET_RPC_URL= -# MAINNET_RPC_URL=https://eth.llamarpc.com +MAINNET_RPC_URL=https://eth.llamarpc.com BSC_RPC_URL=https://bsc-dataseed1.binance.org GOERLI_RPC_URL= POLYGON_RPC_URL= @@ -60,89 +59,3 @@ ARBITRUM_LZ_REPORTER=0xf4C84D9ced01534f235078A10E8A44A726c4b73c POLYGON_LZ_REPORTER=0x231e48AAEaAC6398978a1dBA4Cd38fcA208Ec391 BSC_LZ_REPORTER=0xc9618e4d4B59570Da67b4fb0E8fC7EB40A5f8462 BASE_LZ_REPORTER=0x495b872b329eba69F81A749f8A152766851C23b0 - -# MAINNET_LAYER_ZERO_REPORTER=0xbc5f67da5347cd4304e9623bc86e71a874287ea1 -# BSC_MAINNET_LAYER_ZERO_ADAPTER=0xDbdF80c87f414fac8342e04D870764197bD3bAC7 -# POLYGON_MAINNET_LAYER_ZERO_ADAPTER=0x998dA7f6cF98541E4F4469cc9d53B9374F186591 -# BASE_MAINNET_LAYER_ZERO_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 -# OPTIMISM_MAINNET_LAYER_ZERO_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 - -# ### BASE -# BASE_LZ_REPORTER=0x495b872b329eba69F81A749f8A152766851C23b0 -# BASE_POLYGON_LZ_ADAPTER=0x998dA7f6cF98541E4F4469cc9d53B9374F186591 -# BASE_GNO_LZ_ADAPTER=0xC82e50cc90C84DC492B4Beb6792DEeB496d52424 -# BASE_BNB_LZ_ADAPTER=0xDbdF80c87f414fac8342e04D870764197bD3bAC7 -# BASE_OPTIMISM_LZ_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 -# BASE_ARBITRUM_LZ_ADAPTER=0xA86bc62Ac53Dc86687AB6C15fdebC71ad51fB615 - -# ## AMB -# MAINNET_AMB_REPORTER=0xDbdF80c87f414fac8342e04D870764197bD3bAC7 -# GNOSIS_AMB_ADAPTER=0x79e4D1B8b8De0bC2F8A3DC477480C935C66F373E - - -# # Testnet -# SEPOLIA_CHIADO_AMB_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B -# SEPOLIA_CHIADO_AMB_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 - -# SEPOLIA_CHIADO_CCIP_REPORTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC -# SEPOLIA_CHIADO_CCIP_ADAPTER=0x8A2A7509B98f0f21BEFF82e2520A920DB61fFa9d -# SEPOLIA_WORMHOLE_ADDRESS=0x4a8bc80Ed5a4067f1CCf107057b8270E0cC11A78 - -# SEPOLIA_CHIADO_WORMHOLE_REPORTER=0xeE8082F48e768e096c2EEC5C80DC818eb6E15858 -# SEPOLIA_CHIADO_WORMHOLE_ADAPTER=0x79e4D1B8b8De0bC2F8A3DC477480C935C66F373E - -# # LEGACY -# GNOSIS_AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 -# GNOSIS_AMB_REPORTER=0xc6755144d60548f3DD420F47Cf48DAe553bBf042 - -# SEPOLIA_CHIADO_CCIP_REPORTER=0xf66871C91952b09270d223cD3A1e5Dad57b14fbC -# SEPOLIA_CHIADO_CCIP_ADAPTER=0x8A2A7509B98f0f21BEFF82e2520A920DB61fFa9d -# SEPOLIA_CHIADO_LZ_REPORTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 -# SEPOLIA_CHIADO_LZ_ADAPTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 - -# SEPOLIA_ARB_LZ_REPORTER=0x49f6BE2C7DB433395939b2c728dF2CB99Ca5f8c5 -# SEPOLIA_ARB_LZ_ADAPTER=0x21eAB033C7D2DF6A67AeF6C5Bda9A7F151eB9f52 - -# OPTIMISM_SEPOLIA_LZ_ADAPTER=0xF7c2687c75FcBC7A00663f9436783A2B898537a4 -# CHIADO_ADAPTER=0x3F5929bee6A59661D6CcC9c4eB751048009CE11B - -# #AMB_ADAPTER=0x4efB95c26bB2ebD3281749A5eAA388bc302b4445 -# SYMGA_ADAPTER=0x9AD7a6f4FDA8247cC0bF5932B68c5b619937dB15 -# GNOSIS_TELEPATHY_ADAPTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 -# # MAINNET_AMB_REPORTER=0x6be796cb66CdB3566b8AbebA2C516CbDF93fE831 -# MAINNET_HEADER_REPORTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a -# POLYGON_TELEPATHY_ADAPTER=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 -# BSC_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 -# OPTIMISM_TELEPATHY_ADAPTER=0x856dcc80f75a9737D9D498266E1Af013668316Fb -# ARBITRUM_TELEPATHY_ADAPTER=0x2E5685F20f42cC3b01e4A9ADE49F6848E242f022 -# GNOSIS_WORMHOLE_ADAPTER=0x8EA3F385be8FCB98eB4dBfad2D00846860Bf648D -# POLYGON_WORMHOLE_ADAPTER=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 -# BSC_WORMHOLE_ADAPTER=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a -# OPTIMISM_WORMHOLE_ADAPTER=0x1fF52708D610b1D17F0830f036e992677CDc508A -# AVALANCHE_WORMHOLE_ADAPTER=0x6E9ce437c46e7fA4F0888c21AAC0d9099Ad133ea -# MAINNET_WORMHOLE_HEADER_REPORTER=0xDeF29f44f8315d0079A25EF03cfB0b0D8CdA3cF8 -# MAINNET_WORMHOLE_ADDRESS=0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B -# MAINNET_L1_CROSS_DOMAIN_MESSENGER_HEADER_REPORTER_ADDRESS=0xbA5B3f0643582E75AF252e7631dE62c046970167 -# OPTIMISM_L2_CROSS_DOMAIN_MESSENGER_ADAPTER_ADDRESS=0xe58E7bF7aCD1396D8F9eAF44DB3D4Fd055DCDb51 -# MAINNET_AXELAR_REPORTER_BSC=0xBfd877753F8B4f4117a08aD54DcBE69cF3165d81 -# BSC_AXELAR_ADAPTER_MAINNET=0xb7806ea66c1bb9FfeB41Dc303601a469ddf3b9C2 -# POLYGON_CELER_ADAPTER_MAINNET=0x1fF52708D610b1D17F0830f036e992677CDc508A -# MAINNET_CELER_REPORTER_POLYGON=0x52258b83051B7031483740aC9EcAa07926392ea0 -# AVALANCHE_LAYER_ZERO_ADAPTER_MAINNET=0x11378C54aA4e2Daf4603f9be86ae0Cb70786682a -# MAINNET_LAYER_ZERO_REPORTER_AVALANCHE=0x16B43E348e0A19E9196ae79D172aDC52B3Aa3E20 -# OPTIMISM_GOERLI_CCIP_ADAPTER_SEPOLIA=0x520185210Aa645220a49afD9C33d28b73494e14d -# SEPOLIA_CCIP_REPORTER_OPTIMISM_GOERLI=0xF3D2877866cd8E6771843b96B66aFcE425B2353C -# BSC_TESTNET_CCIP_ADAPTER_SEPOLIA=0xB6133Ab655B990E80Af3E948852C8ec2a46651A5 -# SEPOLIA_CCIP_REPORTER_BSC_TESTNET=0x855A2814E0DFf8327f1a52aCC9537772B829e226 - -# BSC_LAYER_ZERO_ADAPTER_MAINNET=0xaC3c8D19A64B98d62ED16FFf8a4229E8ED36A469 -# GOERLI_ZETA_REPORTER_BSC_TESTNET=0x9a9fc484D3F83B489bc58c2A3EeeA8331F21796B -# BSC_TESTNET_ZETA_ADAPTER_GOERLI=0x2829D554678a767c5B091D28A0A294dB7643ec05 -# MAINNET_CCIP_REPORTER_AVALANCHE=0xeEFD0D67E4eF9330870961C38a3e25ECE369B141 -# AVALANCHE_CCIP_ADAPTER_MAINNET=0x04413A4795dD1f5347eAD1CD7C76Bd9E5e48b461 -# GNOSIS_SYGMA_ADAPTER=0x483285D0e24401D0C5DB6cF1FAC4f79f412079C0 -# MAINNET_SYGMA_REPORTER_GNOSIS=0x973bB99db211755b80c9087fe436fBb81A45AD5E -# MAINNET_HEADER_STORAGE=0x22F1fc71A505c0b2bf4D5075801cc5E0ec84B09e -# GOERLI_HEADER_STORAGE=0x4cD014AC64AAa899b46BF3a477B68bb67e33eDC4 -# CHIADO_ELECTRON_ADAPTER_GOERLI=0x66fBC348aef3797fb885f8073173E5064bf7ABBb -# CHIADO_ELECTRON_LIGHT_CLIENT_GOERLI=0xc01707bD835f6108785DF081C943C7C108FC3D89 \ No newline at end of file From 19b06662a2f1abaeb4b94ab10fcfd03991f57db0 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Wed, 18 Sep 2024 18:06:44 +0800 Subject: [PATCH 68/81] chore(evm): rename LayerZeroAdapter.sol enabledReporters mapping --- .../evm/contracts/adapters/LayerZero/LayerZeroAdapter.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/evm/contracts/adapters/LayerZero/LayerZeroAdapter.sol b/packages/evm/contracts/adapters/LayerZero/LayerZeroAdapter.sol index 0c112382..280fcefb 100644 --- a/packages/evm/contracts/adapters/LayerZero/LayerZeroAdapter.sol +++ b/packages/evm/contracts/adapters/LayerZero/LayerZeroAdapter.sol @@ -11,7 +11,7 @@ contract LayerZeroAdapter is BlockHashAdapter, Ownable, ILayerZeroReceiver, OApp string public constant PROVIDER = "layer-zero"; address public immutable LAYER_ZERO_ENDPOINT; - mapping(uint32 => address) public enabledReporter; + mapping(uint32 => address) public enabledReporters; mapping(uint32 => uint256) public chainIds; error UnauthorizedLayerZeroReceive(); @@ -31,7 +31,7 @@ contract LayerZeroAdapter is BlockHashAdapter, Ownable, ILayerZeroReceiver, OApp ) external payable { if ( msg.sender != LAYER_ZERO_ENDPOINT || - enabledReporter[_origin.srcEid] != address(uint160(uint256(_origin.sender))) + enabledReporters[_origin.srcEid] != address(uint160(uint256(_origin.sender))) ) revert UnauthorizedLayerZeroReceive(); (uint256[] memory ids, bytes32[] memory hashes) = abi.decode(_message, (uint256[], bytes32[])); _storeHashes(chainIds[_origin.srcEid], ids, hashes); @@ -50,7 +50,7 @@ contract LayerZeroAdapter is BlockHashAdapter, Ownable, ILayerZeroReceiver, OApp } function setReporterByChain(uint256 chainId, uint32 endpointId, address reporter) external onlyOwner { - enabledReporter[endpointId] = reporter; + enabledReporters[endpointId] = reporter; chainIds[endpointId] = chainId; emit ReporterSet(chainId, endpointId, reporter); } From 5e9b58a1f0d7618f1b5ab57d6b43a2fa144b0d59 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Wed, 18 Sep 2024 18:47:22 +0800 Subject: [PATCH 69/81] chore(reporter): remove SygmaReporterController class --- .../controllers/StandardReporterController.ts | 2 - .../controllers/SygmaReporterController.ts | 38 ------------------- packages/reporter/src/index.ts | 4 +- 3 files changed, 2 insertions(+), 42 deletions(-) delete mode 100644 packages/reporter/src/controllers/SygmaReporterController.ts diff --git a/packages/reporter/src/controllers/StandardReporterController.ts b/packages/reporter/src/controllers/StandardReporterController.ts index 5686cdfe..4a7fb8b6 100644 --- a/packages/reporter/src/controllers/StandardReporterController.ts +++ b/packages/reporter/src/controllers/StandardReporterController.ts @@ -41,8 +41,6 @@ class StandardReporterController extends BaseController { const txHash = await client.writeContract(request) this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) - - await new Promise((resolve) => setTimeout(resolve, 12000)) } } catch (_error) { this.logger.error(_error) diff --git a/packages/reporter/src/controllers/SygmaReporterController.ts b/packages/reporter/src/controllers/SygmaReporterController.ts deleted file mode 100644 index 272c73b0..00000000 --- a/packages/reporter/src/controllers/SygmaReporterController.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Chain, parseEther } from "viem" - -import ABI from "../ABIs/SygmaReporterContractABI.json" assert { type: "json" } -import BaseController from "./BaseController.js" - -import { BaseControllerConfigs } from "./BaseController.js" - -class SygmaReporterController extends BaseController { - constructor(_configs: BaseControllerConfigs) { - super(_configs, "SygmaReporterController") - } - - async onBlocks(_blockNumbers: bigint[]) { - try { - const client = this.multiClient.getClientByChain(this.sourceChain) - const blockNumber = _blockNumbers[_blockNumbers.length - 1] - - for (const chain of this.destinationChains as Chain[]) { - if (!this.adapterAddresses[chain.name]) continue - - this.logger.info(`reporting block header for block ${blockNumber} on ${chain.name} ...`) - - const { request } = await client.simulateContract({ - address: this.reporterAddresses[chain.name], - abi: ABI, - functionName: "dispatchBlocks", - args: [chain.id, this.adapterAddresses[chain.name], [blockNumber]], - }) - const txHash = await client.writeContract(request) - this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) - } - } catch (_error) { - this.logger.error(_error) - } - } -} - -export default SygmaReporterController diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 9baa2ec7..3c0e1be8 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -20,7 +20,6 @@ import { Chain } from "viem" import Multiclient from "./MultiClient.js" import ElectronReporterController from "./controllers/ElectronReporterController.js" import OptimismReporterController from "./controllers/OptimismReporterController.js" -import SygmaReporterController from "./controllers/SygmaReporterController.js" import StandardReporterController from "./controllers/StandardReporterController.js" import TelepathyReporterController from "./controllers/TelepathyReporterController.js" import WormholeReporterController from "./controllers/WormholeReporterController.js" @@ -79,7 +78,8 @@ const main = () => { }, }) - const sygmaReporterController = new SygmaReporterController({ + const sygmaReporterController = new StandardReporterController({ + name: "SygmaReporterController", type: "classic", sourceChain, destinationChains, From 7d03cc0f34c422357af961057a4931a7ba842c8f Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Thu, 19 Sep 2024 09:54:18 +0800 Subject: [PATCH 70/81] chore(reporter): delete files unrelated to Hashi v0.2.0 --- .../reporter/src/ABIs/ElectronAdapterABI.json | 287 ---------- .../src/ABIs/ElectronLightClientABI.json | 21 - .../reporter/src/ABIs/HeaderStorageABI.json | 89 ---- ...CrossDomainMessengerHeaderReporterABI.json | 250 --------- .../src/ABIs/SygmaReporterContractABI.json | 425 --------------- .../src/ABIs/TelepathyAdapterABI.json | 205 -------- .../src/ABIs/TelepathyContractABI.json | 497 ------------------ .../controllers/ElectronReporterController.ts | 177 ------- .../controllers/OptimismReporterController.ts | 37 -- .../TelepathyReporterController.ts | 92 ---- packages/reporter/src/index.ts | 63 --- 11 files changed, 2143 deletions(-) delete mode 100644 packages/reporter/src/ABIs/ElectronAdapterABI.json delete mode 100644 packages/reporter/src/ABIs/ElectronLightClientABI.json delete mode 100644 packages/reporter/src/ABIs/HeaderStorageABI.json delete mode 100644 packages/reporter/src/ABIs/L1CrossDomainMessengerHeaderReporterABI.json delete mode 100644 packages/reporter/src/ABIs/SygmaReporterContractABI.json delete mode 100644 packages/reporter/src/ABIs/TelepathyAdapterABI.json delete mode 100644 packages/reporter/src/ABIs/TelepathyContractABI.json delete mode 100644 packages/reporter/src/controllers/ElectronReporterController.ts delete mode 100644 packages/reporter/src/controllers/OptimismReporterController.ts delete mode 100644 packages/reporter/src/controllers/TelepathyReporterController.ts diff --git a/packages/reporter/src/ABIs/ElectronAdapterABI.json b/packages/reporter/src/ABIs/ElectronAdapterABI.json deleted file mode 100644 index 159d376a..00000000 --- a/packages/reporter/src/ABIs/ElectronAdapterABI.json +++ /dev/null @@ -1,287 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_lightClientAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "_eventSourceAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_chainIdSource", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "blockHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "storedBlockHash", - "type": "bytes32" - } - ], - "name": "ConflictingBlockHeader", - "type": "error" - }, - { - "inputs": [], - "name": "ErrorParseReceipt", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "InvalidBlockHeaderLength", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidBlockHeaderRLP", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidEventSignature", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidEventSource", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidReceiptsRoot", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "slot", - "type": "uint256" - } - ], - "name": "MissingHeaderOnLC", - "type": "error" - }, - { - "inputs": [], - "name": "UnsupportedTxType", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "HashStored", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "EVENT_SIG_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "chainIdSource", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "eventSource", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "domain", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "getHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lightClient", - "outputs": [ - { - "internalType": "contract ILightClient", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "bytes[]", - "name": "blockHeaders", - "type": "bytes[]" - } - ], - "name": "proveAncestralBlockHashes", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "lightclientAddress", - "type": "address" - } - ], - "name": "setLightClientAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_metadata", - "type": "bytes" - } - ], - "name": "storeHash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/packages/reporter/src/ABIs/ElectronLightClientABI.json b/packages/reporter/src/ABIs/ElectronLightClientABI.json deleted file mode 100644 index 95ec605f..00000000 --- a/packages/reporter/src/ABIs/ElectronLightClientABI.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "uint256", - "name": "slot", - "type": "uint256" - } - ], - "name": "headers", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/packages/reporter/src/ABIs/HeaderStorageABI.json b/packages/reporter/src/ABIs/HeaderStorageABI.json deleted file mode 100644 index 7810c996..00000000 --- a/packages/reporter/src/ABIs/HeaderStorageABI.json +++ /dev/null @@ -1,89 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "name": "HeaderOutOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "blockHeader", - "type": "bytes32" - } - ], - "name": "HeaderStored", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "headers", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "name": "storeBlockHeader", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "blockNumbers", - "type": "uint256[]" - } - ], - "name": "storeBlockHeaders", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "", - "type": "bytes32[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/packages/reporter/src/ABIs/L1CrossDomainMessengerHeaderReporterABI.json b/packages/reporter/src/ABIs/L1CrossDomainMessengerHeaderReporterABI.json deleted file mode 100644 index 6553392d..00000000 --- a/packages/reporter/src/ABIs/L1CrossDomainMessengerHeaderReporterABI.json +++ /dev/null @@ -1,250 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "headerStorage", - "type": "address" - }, - { - "internalType": "address", - "name": "yaho", - "type": "address" - }, - { - "internalType": "address", - "name": "l1CrossDomainMessenger", - "type": "address" - }, - { - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedChainId", - "type": "uint256" - } - ], - "name": "InvalidToChainId", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "expectedYaho", - "type": "address" - } - ], - "name": "NotYaho", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "blockHeader", - "type": "bytes32" - } - ], - "name": "BlockDispatched", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "messageId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "MessageDispatched", - "type": "event" - }, - { - "inputs": [], - "name": "HEADER_STORAGE", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "L1_CROSS_DOMAIN_MESSENGER", - "outputs": [ - { - "internalType": "contract ICrossDomainMessenger", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROVIDER", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TARGET_CHAIN_ID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "YAHO", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "blockNumbers", - "type": "uint256[]" - } - ], - "name": "dispatchBlocks", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "messageIds", - "type": "uint256[]" - }, - { - "internalType": "bytes32[]", - "name": "messageHashes", - "type": "bytes32[]" - } - ], - "name": "dispatchMessages", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - } -] diff --git a/packages/reporter/src/ABIs/SygmaReporterContractABI.json b/packages/reporter/src/ABIs/SygmaReporterContractABI.json deleted file mode 100644 index a69d67e3..00000000 --- a/packages/reporter/src/ABIs/SygmaReporterContractABI.json +++ /dev/null @@ -1,425 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "headerStorage", - "type": "address" - }, - { - "internalType": "address", - "name": "yaho", - "type": "address" - }, - { - "internalType": "address", - "name": "bridge", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "DomainIdNotAvailable", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "expectedYaho", - "type": "address" - } - ], - "name": "NotYaho", - "type": "error" - }, - { - "inputs": [], - "name": "ResourceIdNotAvailable", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "blockHeader", - "type": "bytes32" - } - ], - "name": "BlockDispatched", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint8", - "name": "domainId", - "type": "uint8" - } - ], - "name": "DomainIdSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "messageId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "MessageDispatched", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "resourceId", - "type": "bytes32" - } - ], - "name": "ResourceIdSet", - "type": "event" - }, - { - "inputs": [], - "name": "BRIDGE", - "outputs": [ - { - "internalType": "contract IBridge", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "HEADER_STORAGE", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROVIDER", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "YAHO", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "blockNumbers", - "type": "uint256[]" - } - ], - "name": "dispatchBlocks", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "targetChainId", - "type": "uint256" - }, - { - "internalType": "contract IAdapter", - "name": "adapter", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "messageIds", - "type": "uint256[]" - }, - { - "internalType": "bytes32[]", - "name": "messageHashes", - "type": "bytes32[]" - } - ], - "name": "dispatchMessages", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "domainIds", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "messageIds", - "type": "uint256[]" - }, - { - "internalType": "bytes32[]", - "name": "hashes", - "type": "bytes32[]" - } - ], - "name": "prepareDepositData", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "resourceIds", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "domainId", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "resourceId", - "type": "bytes32" - } - ], - "name": "setDomainIdAndResourceIdByChainId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "input", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "position", - "type": "uint256" - } - ], - "name": "slice", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/packages/reporter/src/ABIs/TelepathyAdapterABI.json b/packages/reporter/src/ABIs/TelepathyAdapterABI.json deleted file mode 100644 index 83723f1e..00000000 --- a/packages/reporter/src/ABIs/TelepathyAdapterABI.json +++ /dev/null @@ -1,205 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_telepathyRouter", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "slot", - "type": "uint256" - } - ], - "name": "BlockHeaderNotAvailable", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "blockHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "storedBlockHash", - "type": "bytes32" - } - ], - "name": "ConflictingBlockHeader", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "lightClient", - "type": "address" - } - ], - "name": "InconsistentLightClient", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidBlockHashProof", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "InvalidBlockHeaderLength", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidBlockHeaderRLP", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidBlockNumberProof", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "chainId", - "type": "uint32" - } - ], - "name": "NoLightClientOnChain", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "HashStored", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "domain", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "getHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "bytes[]", - "name": "blockHeaders", - "type": "bytes[]" - } - ], - "name": "proveAncestralBlockHashes", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_chainId", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "_slot", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "_blockNumber", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "_blockNumberProof", - "type": "bytes32[]" - }, - { - "internalType": "bytes32", - "name": "_blockHash", - "type": "bytes32" - }, - { - "internalType": "bytes32[]", - "name": "_blockHashProof", - "type": "bytes32[]" - } - ], - "name": "storeBlockHeader", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "telepathyRouter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/packages/reporter/src/ABIs/TelepathyContractABI.json b/packages/reporter/src/ABIs/TelepathyContractABI.json deleted file mode 100644 index 082fc596..00000000 --- a/packages/reporter/src/ABIs/TelepathyContractABI.json +++ /dev/null @@ -1,497 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes32", - "name": "genesisValidatorsRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "genesisTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "secondsPerSlot", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slotsPerPeriod", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "syncCommitteePeriod", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "syncCommitteePoseidon", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "sourceChainId", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "finalityThreshold", - "type": "uint16" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "slot", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "HeadUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "period", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "SyncCommitteeUpdate", - "type": "event" - }, - { - "inputs": [], - "name": "FINALITY_THRESHOLD", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "GENESIS_TIME", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "GENESIS_VALIDATORS_ROOT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SECONDS_PER_SLOT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SLOTS_PER_PERIOD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SOURCE_CHAIN_ID", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "consistent", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "executionStateRoots", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "head", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "headers", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint256", - "name": "attestedSlot", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalizedSlot", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "participation", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "finalizedHeaderRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "executionStateRoot", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint256[2]", - "name": "a", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "b", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "c", - "type": "uint256[2]" - } - ], - "internalType": "struct Groth16Proof", - "name": "proof", - "type": "tuple" - } - ], - "internalType": "struct LightClientStep", - "name": "step", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "syncCommitteeSSZ", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "syncCommitteePoseidon", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint256[2]", - "name": "a", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "b", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "c", - "type": "uint256[2]" - } - ], - "internalType": "struct Groth16Proof", - "name": "proof", - "type": "tuple" - } - ], - "internalType": "struct LightClientRotate", - "name": "update", - "type": "tuple" - } - ], - "name": "rotate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "attestedSlot", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalizedSlot", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "participation", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "finalizedHeaderRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "executionStateRoot", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint256[2]", - "name": "a", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "b", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "c", - "type": "uint256[2]" - } - ], - "internalType": "struct Groth16Proof", - "name": "proof", - "type": "tuple" - } - ], - "internalType": "struct LightClientStep", - "name": "update", - "type": "tuple" - } - ], - "name": "step", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "syncCommitteePoseidons", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "timestamps", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[2]", - "name": "a", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "b", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "c", - "type": "uint256[2]" - }, - { - "internalType": "uint256[65]", - "name": "input", - "type": "uint256[65]" - } - ], - "name": "verifyProofRotate", - "outputs": [ - { - "internalType": "bool", - "name": "r", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[2]", - "name": "a", - "type": "uint256[2]" - }, - { - "internalType": "uint256[2][2]", - "name": "b", - "type": "uint256[2][2]" - }, - { - "internalType": "uint256[2]", - "name": "c", - "type": "uint256[2]" - }, - { - "internalType": "uint256[1]", - "name": "input", - "type": "uint256[1]" - } - ], - "name": "verifyProofStep", - "outputs": [ - { - "internalType": "bool", - "name": "r", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/packages/reporter/src/controllers/ElectronReporterController.ts b/packages/reporter/src/controllers/ElectronReporterController.ts deleted file mode 100644 index cf429691..00000000 --- a/packages/reporter/src/controllers/ElectronReporterController.ts +++ /dev/null @@ -1,177 +0,0 @@ -import axios from "axios" -import { RLP } from "@ethereumjs/rlp" -import { bytesToHex } from "@ethereumjs/util" -import { Chain, encodeAbiParameters } from "viem" -import { Mutex } from "async-mutex" - -import { getReceiptsRootProof, getReceiptProof } from "../utils/proofs.js" -import HeaderStorageABI from "../ABIs/HeaderStorageABI.json" assert { type: "json" } -import AdapterContractABI from "../ABIs/ElectronAdapterABI.json" assert { type: "json" } -import ElectronLightClientABI from "../ABIs/ElectronLightClientABI.json" assert { type: "json" } -import BaseController from "./BaseController.js" -import { BaseControllerConfigs } from "./BaseController.js" -import sleep from "../utils/sleep.js" - -const EXPECTED_TOPIC = "0xf7df17dce0093aedfcbae24b4f04e823f9e863c97986ab1ba6c5267ace49ddea" //HeaderStored(uint256,bytes32) - -interface TelepathyReporterControllerConfigs extends BaseControllerConfigs { - headerStorageAddress: `0x${string}` - lightClientAddresses: { [chainName: string]: `0x${string}` } - beaconchaBaseUrl: string - beaconApiBaseUrl: string -} - -class ElectronReporterController extends BaseController { - headerStorageAddress: `0x${string}` - lastProcessedBlock: bigint - lightClientAddresses: { [chainName: string]: `0x${string}` } - private _mutex: Mutex - private _beaconchaBaseUrl: string - private _beaconApiBaseUrl: string - - constructor(_configs: TelepathyReporterControllerConfigs) { - super(_configs, "ElectronReporterController") - - this.headerStorageAddress = _configs.headerStorageAddress - this.lightClientAddresses = _configs.lightClientAddresses - this._beaconchaBaseUrl = _configs.beaconchaBaseUrl - this._beaconApiBaseUrl = _configs.beaconApiBaseUrl - this.lastProcessedBlock = 0n - this._mutex = new Mutex() - } - - async update() { - const release = await this._mutex.acquire() - try { - if (!this.headerStorageAddress || this.destinationChains?.length === 0) { - release() - return - } - - const sourceClient = this.multiClient.getClientByChain(this.sourceChain) - const blockNumber = await sourceClient.getBlockNumber() - - this.logger.info(`storing a block header for block ${blockNumber - 1n} on ${this.sourceChain.name} ...`) - const { request } = await sourceClient.simulateContract({ - address: this.headerStorageAddress as `0x${string}`, - abi: HeaderStorageABI, - functionName: "storeBlockHeader", - args: [blockNumber - 1n], - }) - - const hash = await sourceClient.writeContract(request) - this.logger.info( - `header reported from ${this.sourceChain.name} to ${ - this.destinationChains![0].name - }: ${hash} Waiting for the receipt ...`, - ) - const receipt = await sourceClient.waitForTransactionReceipt({ hash }) - - this.logger.info("Calculating receipt proof ...") - const { receiptProof, receiptsRoot } = await getReceiptProof(hash, sourceClient) - - this.logger.info("Getting log index ...") - const logIndex = receipt.logs.findIndex( - ({ address, topics }: { address: string; topics: string[] }) => - address.toLowerCase() === this.headerStorageAddress.toLowerCase() && topics[0] === EXPECTED_TOPIC, - ) - - this.logger.info("Getting transaction slot ...") - let transactionSlot - while (true) { - try { - this.logger.info("Waiting for finality ...") - const { - data: { data }, - } = await axios.get(`${this._beaconchaBaseUrl}/api/v1/execution/block/${receipt.blockNumber}`) - const [ - { - posConsensus: { slot, finalized }, - }, - ] = data - if (finalized) { - transactionSlot = slot - break - } - await sleep(10000) - } catch (_err) { - await sleep(10000) - } - } - - const proof = { - lcSlotTxSlotPack: "0x" as `0x${string}`, - logIndex: BigInt(logIndex), - receiptProof: receiptProof.map((_el) => bytesToHex(_el)) as `0x${string}`[], - receiptsRoot, - receiptsRootProof: [] as string[], - txIndexRLP: ("0x" + Buffer.from(RLP.encode(receipt.transactionIndex)).toString("hex")) as `0x${string}`, - } - - for (const chain of this.destinationChains as Chain[]) { - const destinationClient = this.multiClient.getClientByChain(chain) - const lightClientSlot: bigint = (await destinationClient.readContract({ - address: this.lightClientAddresses[chain.name], - abi: ElectronLightClientABI, - functionName: "head", - args: [], - })) as bigint - - // TODO: check that head is greater than transactionSlot - - proof.lcSlotTxSlotPack = encodeAbiParameters( - [{ type: "uint64" }, { type: "uint64" }], - [lightClientSlot, transactionSlot], - ) - - this.logger.info("Calculating receipts root proof ...") - const { receiptsRootProof } = await getReceiptsRootProof( - Number(lightClientSlot), - Number(transactionSlot), - axios.create({ - baseURL: this._beaconApiBaseUrl, - responseType: "json", - headers: { "Content-Type": "application/json" }, - }), - ) - proof.receiptsRootProof = receiptsRootProof - - const encodedProof = encodeAbiParameters( - [ - { type: "bytes" }, - { type: "bytes32[]" }, - { type: "bytes32" }, - { type: "bytes[]" }, - { type: "bytes" }, - { type: "uint256" }, - ], - [ - proof.lcSlotTxSlotPack, - proof.receiptsRootProof as `0x${string}`[], - proof.receiptsRoot, - proof.receiptProof, - proof.txIndexRLP, - proof.logIndex, - ], - ) - - this.logger.info(`Storing block header for ${blockNumber} on contract ${chain.name} ...`) - const { request } = await destinationClient.simulateContract({ - address: this.adapterAddresses[chain.name], - abi: AdapterContractABI, - functionName: "storeHash", - args: [encodedProof], - }) - const txHash = await destinationClient.writeContract(request) - this.logger.info(`tx sent on ${chain.name}: ${txHash}`) - } - this.lastProcessedBlock = blockNumber - } catch (_error) { - this.logger.error(_error) - } finally { - release() - } - } -} - -export default ElectronReporterController diff --git a/packages/reporter/src/controllers/OptimismReporterController.ts b/packages/reporter/src/controllers/OptimismReporterController.ts deleted file mode 100644 index 8ac1c9e8..00000000 --- a/packages/reporter/src/controllers/OptimismReporterController.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { optimism } from "viem/chains" - -import ABI from "../ABIs/L1CrossDomainMessengerHeaderReporterABI.json" assert { type: "json" } -import BaseController from "./BaseController.js" - -import { BaseControllerConfigs } from "./BaseController.js" - -interface OptimismReporterControllerConfigs extends BaseControllerConfigs {} - -class OptimismReporterController extends BaseController { - constructor(_configs: OptimismReporterControllerConfigs) { - super(_configs, "OptimismReporterController") - } - - async onBlocks(_blockNumbers: bigint[]) { - try { - const client = this.multiClient.getClientByChain(this.sourceChain) - const blockNumber = _blockNumbers[_blockNumbers.length - 1] - - this.logger.info(`reporting block header for block ${blockNumber} on ${optimism.name} ...`) - const { request } = await client.simulateContract({ - address: this.reporterAddress as `0x${string}`, - abi: ABI, - functionName: "reportHeaders", - args: [[blockNumber], this.adapterAddresses[optimism.name]], - gas: 300000n, // NOTE: if we don't put the gas here, the tx fails because of out of gas - }) - - const txHash = await client.writeContract(request) - this.logger.info(`headers reporter from ${this.sourceChain.name} to ${optimism.name}: ${txHash}`) - } catch (_error) { - this.logger.error(_error) - } - } -} - -export default OptimismReporterController diff --git a/packages/reporter/src/controllers/TelepathyReporterController.ts b/packages/reporter/src/controllers/TelepathyReporterController.ts deleted file mode 100644 index a7032fc0..00000000 --- a/packages/reporter/src/controllers/TelepathyReporterController.ts +++ /dev/null @@ -1,92 +0,0 @@ -import axios from "axios" -import { Chain, hexToNumber } from "viem" -import { Mutex } from "async-mutex" - -import LightClientContractABI from "../ABIs/TelepathyContractABI.json" assert { type: "json" } -import AdapterContractABI from "../ABIs/TelepathyAdapterABI.json" assert { type: "json" } -import BaseController from "./BaseController.js" - -import { BaseControllerConfigs } from "./BaseController.js" - -// TODO: Update to comply with Hashi v0.2.0 -interface TelepathyReporterControllerConfigs extends BaseControllerConfigs { - lightClientAddresses: { [chainName: string]: `0x${string}` } - baseProofUrl: string -} - -class TelepathyReporterController extends BaseController { - lastProcessedBlock: bigint - lightClientAddresses: { [chainName: string]: `0x${string}` } - private _baseProofUrl: string - - constructor(_configs: TelepathyReporterControllerConfigs) { - super(_configs, "TelepathyReporterController") - - this.lightClientAddresses = _configs.lightClientAddresses - this._baseProofUrl = _configs.baseProofUrl - - this.lastProcessedBlock = 0n - } - - async update() { - try { - let mutex = new Mutex() - for (const chain of this.destinationChains as Chain[]) { - const client = this.multiClient.getClientByChain(chain) - - const currentBlockNumber = await client.getBlockNumber() - const fromBlock = this.lastProcessedBlock === 0n ? currentBlockNumber : this.lastProcessedBlock + 1n - const toBlock = currentBlockNumber - this.logger.info( - `getting HeadUpdate events in [${fromBlock},${toBlock}] on ${chain.name} , on contract ${ - this.lightClientAddresses[chain.name] - }...`, - ) - - const logs = await client.getContractEvents({ - address: this.lightClientAddresses[chain.name] as `0x${string}`, - abi: LightClientContractABI, - eventName: "HeadUpdate", - fromBlock, - toBlock, - }) - - if (logs.length == 0) { - this.logger.info("No HeadUpdate events. Skipping ...") - this.lastProcessedBlock = toBlock - continue - } - - this.logger.info(`detected ${logs.length} HeadUpdate events. Processing them ...`) - logs.forEach(async (_log: any) => { - const slotValue = _log.topics[1] - this.logger.info(`fetching proof for slot ${slotValue} on ${chain.name} ...`) - - const response = await axios.post(`${this._baseProofUrl}${this.sourceChain.id}/${hexToNumber(slotValue!)}`) - const { chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof } = response.data.result - this.logger.info( - `calling storeBlockHeader for block number ${blockNumber} on contract ${ - this.adapterAddresses[chain.name] - } ...`, - ) - - const { request } = await client.simulateContract({ - address: this.adapterAddresses[chain.name] as `0x${string}`, - abi: AdapterContractABI, - functionName: "storeBlockHeader", - args: [chainId, slot, blockNumber, blockNumberProof, blockHash, blockHashProof], - }) - const release = await mutex.acquire() - const txHash = await client.writeContract(request) - this.logger.info(`tx sent on ${chain.name}: ${txHash}`) - release() - }) - this.lastProcessedBlock = toBlock - } - } catch (_error) { - this.logger.error(_error) - } - } -} - -export default TelepathyReporterController diff --git a/packages/reporter/src/index.ts b/packages/reporter/src/index.ts index 3c0e1be8..0cdc7b67 100644 --- a/packages/reporter/src/index.ts +++ b/packages/reporter/src/index.ts @@ -18,10 +18,7 @@ import { import { Chain } from "viem" import Multiclient from "./MultiClient.js" -import ElectronReporterController from "./controllers/ElectronReporterController.js" -import OptimismReporterController from "./controllers/OptimismReporterController.js" import StandardReporterController from "./controllers/StandardReporterController.js" -import TelepathyReporterController from "./controllers/TelepathyReporterController.js" import WormholeReporterController from "./controllers/WormholeReporterController.js" import Coordinator from "./Coordinator.js" @@ -93,29 +90,6 @@ const main = () => { }, }) - const telepathyReporterController = new TelepathyReporterController({ - type: "lightClient", - sourceChain, - destinationChains, - logger, - multiClient, - adapterAddresses: { - [gnosis.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Gnosis?.TelepathyAdapter, - [arbitrum.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["Arbitrum One"]?.TelepathyAdapter, - [optimism.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["OP Mainnet"]?.TelepathyAdapter, - [bsc.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["BNB Smart Chain"]?.TelepathyAdapter, - [polygon.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.Polygon?.TelepathyAdapter, - }, - baseProofUrl: settings.reporterControllers.TelepathyReporterController.baseProofUrl, - lightClientAddresses: { - [gnosis.name]: lightClientAddresses.Gnosis?.[sourceChain.name]?.TelepathyLightClient, - [arbitrum.name]: lightClientAddresses["Arbitrum One"]?.[sourceChain.name]?.TelepathyLightClient, - [optimism.name]: lightClientAddresses["OP Mainnet"]?.[sourceChain.name]?.TelepathyLightClient, - [bsc.name]: lightClientAddresses["BNB Smart Chain"]?.[sourceChain.name]?.TelepathyLightClient, - [polygon.name]: lightClientAddresses.Polygon?.[sourceChain.name]?.TelepathyLightClient, - }, - }) - const wormholeReporterController = new WormholeReporterController({ type: "classic", sourceChain, @@ -136,21 +110,6 @@ const main = () => { wormholeChainIds: settings.reporterControllers.WormholeReporterController.wormholeChainIds, }) - // TODO: add check to prevent to always run OptimismReporterController even when destinationChains does not include optimism - const optimismReporterController = new OptimismReporterController({ - type: "native", - sourceChain, - logger, - multiClient, - reporterAddress: - settings.contractAddresses.reporterAddresses.unidirectional.Ethereum["OP Mainnet"] - .L1CrossDomainMessengerHeaderReporter, - adapterAddresses: { - [optimism.name]: - settings.contractAddresses.adapterAddresses.unidirectional.Ethereum["OP Mainnet"].L2CrossDomainMessengerAdapter, - }, - }) - const axelarReporterController = new StandardReporterController({ name: "AxelarReporterController", type: "classic", @@ -278,40 +237,18 @@ const main = () => { reportHeadersValue: settings.reporterControllers.ZetaReporterController.reportHeadersValue, }) - const electronReporterController = new ElectronReporterController({ - type: "lightClient", - sourceChain, - destinationChains, - logger, - multiClient, - adapterAddresses: { - [gnosisChiado.name]: unidirectionalAdaptersAddresses[sourceChain.name]?.["Gnosis Chiado"]?.ElectronAdapter, - }, - headerStorageAddress: (settings.contractAddresses as any)[sourceChain.name]?.HeaderStorage, - lightClientAddresses: { - [gnosisChiado.name]: lightClientAddresses["Gnosis Chiado"]?.[sourceChain.name]?.ElectronLightClient, - }, - beaconchaBaseUrl: (settings.reporterControllers.ElectronReporterController.beaconchaBaseUrls as any)[ - sourceChain.name - ], - beaconApiBaseUrl: (settings.beaconApiUrls as any)[sourceChain.name], - }) - const coordinator = new Coordinator({ controllers: [ ambReporterController, ccipReporterController, sygmaReporterController, - telepathyReporterController, wormholeReporterController, - optimismReporterController, axelarReporterController, connextReporterController, celerReporterController, layerZeroReporterController, hyperlaneReporterController, zetaReporterController, - electronReporterController, ].filter((_controller) => controllersEnabled?.includes(_controller.name)), intervalFetchBlocksMs: settings.Coordinator.intervalFetchBlocksMs, logger, From 56bb792a258aa2eaff7141b51e7d3bc5e21f8a95 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Thu, 19 Sep 2024 17:15:43 +0800 Subject: [PATCH 71/81] fix(reporter): wormhole reporter ABI file name --- .../ABIs/{WormhomeReporterABI.json => WormholeReporterABI.json} | 0 packages/reporter/src/controllers/WormholeReporterController.ts | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename packages/reporter/src/ABIs/{WormhomeReporterABI.json => WormholeReporterABI.json} (100%) diff --git a/packages/reporter/src/ABIs/WormhomeReporterABI.json b/packages/reporter/src/ABIs/WormholeReporterABI.json similarity index 100% rename from packages/reporter/src/ABIs/WormhomeReporterABI.json rename to packages/reporter/src/ABIs/WormholeReporterABI.json diff --git a/packages/reporter/src/controllers/WormholeReporterController.ts b/packages/reporter/src/controllers/WormholeReporterController.ts index a0553eb1..5bbff0ba 100644 --- a/packages/reporter/src/controllers/WormholeReporterController.ts +++ b/packages/reporter/src/controllers/WormholeReporterController.ts @@ -4,7 +4,7 @@ import { Chain } from "viem" import BaseController from "./BaseController.js" import sleep from "../utils/sleep.js" -import ReporterABI from "../ABIs/WormhomeReporterABI.json" assert { type: "json" } +import ReporterABI from "../ABIs/WormholeReporterABI.json" assert { type: "json" } import AdapterABI from "../ABIs/WormholeAdapterABI.json" assert { type: "json" } import WormholeABI from "../ABIs/WormholeABI.json" assert { type: "json" } From a90cde0ec4b3ddfe38e70041d3405243b2a70a85 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Thu, 19 Sep 2024 17:56:39 +0800 Subject: [PATCH 72/81] chore(reporter): remove yarn.lock --- packages/reporter/yarn.lock | 3562 ----------------------------------- 1 file changed, 3562 deletions(-) delete mode 100644 packages/reporter/yarn.lock diff --git a/packages/reporter/yarn.lock b/packages/reporter/yarn.lock deleted file mode 100644 index 17edb509..00000000 --- a/packages/reporter/yarn.lock +++ /dev/null @@ -1,3562 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 6 - cacheKey: 8 - -"@aashutoshrathi/word-wrap@npm:^1.2.3": - version: 1.2.6 - resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" - checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd - languageName: node - linkType: hard - -"@adraffy/ens-normalize@npm:1.10.0": - version: 1.10.0 - resolution: "@adraffy/ens-normalize@npm:1.10.0" - checksum: af0540f963a2632da2bbc37e36ea6593dcfc607b937857133791781e246d47f870d5e3d21fa70d5cfe94e772c284588c81ea3f5b7f4ea8fbb824369444e4dbcb - languageName: node - linkType: hard - -"@adraffy/ens-normalize@npm:1.9.4": - version: 1.9.4 - resolution: "@adraffy/ens-normalize@npm:1.9.4" - checksum: 7d7fff58ebe2c4961f7e5e61dad123aa6a63fec0df5c84af1fa41079dc05d398599690be4427b3a94d2baa94084544bcfdf2d51cbed7504b9b0583b0960ad550 - languageName: node - linkType: hard - -"@chainsafe/as-sha256@npm:^0.4.1": - version: 0.4.1 - resolution: "@chainsafe/as-sha256@npm:0.4.1" - checksum: 6d86975e648ecdafd366802278ac15b392b252e967f3681412ec48b5a3518b936cc5e977517499882b084991446d25787d98f8f585891943688cc81549a44e9a - languageName: node - linkType: hard - -"@chainsafe/persistent-merkle-tree@npm:^0.6.1": - version: 0.6.1 - resolution: "@chainsafe/persistent-merkle-tree@npm:0.6.1" - dependencies: - "@chainsafe/as-sha256": ^0.4.1 - "@noble/hashes": ^1.3.0 - checksum: 74614b8d40970dc930d5bf741619498b0bbbde5ff24ce45fce6ad122143aa77bf57249a28175b1b972cf56bff57d529a4258b7222ab4e60c1261119b5986c51b - languageName: node - linkType: hard - -"@chainsafe/ssz@npm:^0.14.0": - version: 0.14.0 - resolution: "@chainsafe/ssz@npm:0.14.0" - dependencies: - "@chainsafe/as-sha256": ^0.4.1 - "@chainsafe/persistent-merkle-tree": ^0.6.1 - checksum: fffec7b8966edb24a146b3c4ada23c9d9b2159c60327eaba2174c7175355f8c750646816a187b439da861fc3cdad5e93a9c0387c1758a3e97d7b4d79a36480c9 - languageName: node - linkType: hard - -"@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0": - version: 1.6.0 - resolution: "@colors/colors@npm:1.6.0" - checksum: aa209963e0c3218e80a4a20553ba8c0fbb6fa13140540b4e5f97923790be06801fc90172c1114fc8b7e888b3d012b67298cde6b9e81521361becfaee400c662f - languageName: node - linkType: hard - -"@cspotcode/source-map-support@npm:^0.8.0": - version: 0.8.1 - resolution: "@cspotcode/source-map-support@npm:0.8.1" - dependencies: - "@jridgewell/trace-mapping": 0.3.9 - checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa - languageName: node - linkType: hard - -"@dabh/diagnostics@npm:^2.0.2": - version: 2.0.3 - resolution: "@dabh/diagnostics@npm:2.0.3" - dependencies: - colorspace: 1.1.x - enabled: 2.0.x - kuler: ^2.0.0 - checksum: 4879600c55c8315a0fb85fbb19057bad1adc08f0a080a8cb4e2b63f723c379bfc4283b68123a2b078d367b327dd8df12fcb27464efe791addc0a48b9df6d79a1 - languageName: node - linkType: hard - -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": - version: 4.4.0 - resolution: "@eslint-community/eslint-utils@npm:4.4.0" - dependencies: - eslint-visitor-keys: ^3.3.0 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 - languageName: node - linkType: hard - -"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": - version: 4.10.0 - resolution: "@eslint-community/regexpp@npm:4.10.0" - checksum: 2a6e345429ea8382aaaf3a61f865cae16ed44d31ca917910033c02dc00d505d939f10b81e079fa14d43b51499c640138e153b7e40743c4c094d9df97d4e56f7b - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^2.1.2": - version: 2.1.2 - resolution: "@eslint/eslintrc@npm:2.1.2" - dependencies: - ajv: ^6.12.4 - debug: ^4.3.2 - espree: ^9.6.0 - globals: ^13.19.0 - ignore: ^5.2.0 - import-fresh: ^3.2.1 - js-yaml: ^4.1.0 - minimatch: ^3.1.2 - strip-json-comments: ^3.1.1 - checksum: bc742a1e3b361f06fedb4afb6bf32cbd27171292ef7924f61c62f2aed73048367bcc7ac68f98c06d4245cd3fabc43270f844e3c1699936d4734b3ac5398814a7 - languageName: node - linkType: hard - -"@eslint/js@npm:8.52.0": - version: 8.52.0 - resolution: "@eslint/js@npm:8.52.0" - checksum: 490893b8091a66415f4ac98b963d23eb287264ea3bd6af7ec788f0570705cf64fd6ab84b717785980f55e39d08ff5c7fde6d8e4391ccb507169370ce3a6d091a - languageName: node - linkType: hard - -"@ethereumjs/block@npm:^5.0.1": - version: 5.0.1 - resolution: "@ethereumjs/block@npm:5.0.1" - dependencies: - "@ethereumjs/common": ^4.1.0 - "@ethereumjs/rlp": ^5.0.1 - "@ethereumjs/trie": ^6.0.1 - "@ethereumjs/tx": ^5.1.0 - "@ethereumjs/util": ^9.0.1 - ethereum-cryptography: ^2.1.2 - checksum: 6bee1189bf097b8a7ea328cdef50ffce352698f4bac4e594b0d721ee715626947e3863e7a546a55ec88547dd50c57447ecbb44b4e0fee746290745ac081566c0 - languageName: node - linkType: hard - -"@ethereumjs/blockchain@npm:^7.0.1": - version: 7.0.1 - resolution: "@ethereumjs/blockchain@npm:7.0.1" - dependencies: - "@ethereumjs/block": ^5.0.1 - "@ethereumjs/common": ^4.1.0 - "@ethereumjs/ethash": ^3.0.1 - "@ethereumjs/rlp": ^5.0.1 - "@ethereumjs/trie": ^6.0.1 - "@ethereumjs/tx": ^5.1.0 - "@ethereumjs/util": ^9.0.1 - debug: ^4.3.3 - ethereum-cryptography: ^2.1.2 - lru-cache: ^10.0.0 - checksum: 54c3019f66528e8549aa48ebe9e700017551c74491cd168353a43af25493e2cddd6f995575bfbcedb31f4b3a55f76f76c5393687495851b57a2024edad01ffa4 - languageName: node - linkType: hard - -"@ethereumjs/common@npm:^4.1.0": - version: 4.1.0 - resolution: "@ethereumjs/common@npm:4.1.0" - dependencies: - "@ethereumjs/util": ^9.0.1 - crc: ^4.3.2 - checksum: 8494e6d179fe3949d8d8285badfb7be9ade71864e477da5dbf432ecc8046a58a0db73e99b5543c807fdc1b3f5959ed9c85ba99536b2f4753e08eaeb096af4beb - languageName: node - linkType: hard - -"@ethereumjs/ethash@npm:^3.0.1": - version: 3.0.1 - resolution: "@ethereumjs/ethash@npm:3.0.1" - dependencies: - "@ethereumjs/block": ^5.0.1 - "@ethereumjs/rlp": ^5.0.1 - "@ethereumjs/util": ^9.0.1 - bigint-crypto-utils: ^3.2.2 - ethereum-cryptography: ^2.1.2 - checksum: 9d613e1bb3c58a4f33b99588cdeeae79c4481f4a368e98bbbf8249883fdc0f66806b7644b4e4420b096711da859982ca5764a9076df3f767f5e73cc291ca81c5 - languageName: node - linkType: hard - -"@ethereumjs/evm@npm:^2.1.0": - version: 2.1.0 - resolution: "@ethereumjs/evm@npm:2.1.0" - dependencies: - "@ethereumjs/common": ^4.1.0 - "@ethereumjs/statemanager": ^2.1.0 - "@ethereumjs/tx": ^5.1.0 - "@ethereumjs/util": ^9.0.1 - "@types/debug": ^4.1.9 - debug: ^4.3.3 - ethereum-cryptography: ^2.1.2 - rustbn-wasm: ^0.2.0 - checksum: 27561150def4e23d91ed6443e0354a7d93f6e94aaefc60fb34016f71e49806012425e3b2b8b76eeef40fc5a1b2b95438e3d7827b8b1b4c8af3766af28877fdf1 - languageName: node - linkType: hard - -"@ethereumjs/rlp@npm:^5.0.1": - version: 5.0.1 - resolution: "@ethereumjs/rlp@npm:5.0.1" - bin: - rlp: bin/rlp.cjs - checksum: eddff08718c3b8312007ef51a951dff6b2c1152f9f9ea6fb9eec65d50caf3fa53f5894d79d6d450eef70a5ef3b0688be044912096aa8d263345a0d9debb4d477 - languageName: node - linkType: hard - -"@ethereumjs/statemanager@npm:^2.1.0": - version: 2.1.0 - resolution: "@ethereumjs/statemanager@npm:2.1.0" - dependencies: - "@ethereumjs/common": ^4.1.0 - "@ethereumjs/rlp": ^5.0.1 - "@ethereumjs/trie": ^6.0.1 - "@ethereumjs/util": ^9.0.1 - debug: ^4.3.3 - ethereum-cryptography: ^2.1.2 - ethers: ^6.4.0 - js-sdsl: ^4.1.4 - lru-cache: ^10.0.0 - checksum: 07e1b5b9d00851328c2ebf12df3ea0440012b9fcdcb8ce3f5301c74dd71d6192cdee197c2c040b11a6e95b466f255f532c4dc337f95585eaadc0e3919245190c - languageName: node - linkType: hard - -"@ethereumjs/trie@npm:^6.0.1": - version: 6.0.1 - resolution: "@ethereumjs/trie@npm:6.0.1" - dependencies: - "@ethereumjs/rlp": ^5.0.1 - "@ethereumjs/util": ^9.0.1 - "@types/readable-stream": ^2.3.13 - ethereum-cryptography: ^2.1.2 - lru-cache: ^10.0.0 - readable-stream: ^3.6.0 - checksum: 6773fc54f2dbdab2afa230cd9ebca16a14f774c7bc5c51c2ee0d51cd6a14cabbceac87a3d1100adf5b8e19a28c7ac4056f1879274a6ec5c22c3f40e2068e060d - languageName: node - linkType: hard - -"@ethereumjs/tx@npm:^5.1.0": - version: 5.1.0 - resolution: "@ethereumjs/tx@npm:5.1.0" - dependencies: - "@ethereumjs/common": ^4.1.0 - "@ethereumjs/rlp": ^5.0.1 - "@ethereumjs/util": ^9.0.1 - ethereum-cryptography: ^2.1.2 - peerDependencies: - c-kzg: ^2.1.2 - peerDependenciesMeta: - c-kzg: - optional: true - checksum: fd17b337f7a64a6a29b1d279c52ac5bfb9655cda06858b198b85a306cc978d25b871acc4ec57e0c29bab50a7c9600d934837fb62052cbde7dc88223be7ebc740 - languageName: node - linkType: hard - -"@ethereumjs/util@npm:^9.0.1": - version: 9.0.1 - resolution: "@ethereumjs/util@npm:9.0.1" - dependencies: - "@ethereumjs/rlp": ^5.0.1 - ethereum-cryptography: ^2.1.2 - peerDependencies: - c-kzg: ^2.1.2 - peerDependenciesMeta: - c-kzg: - optional: true - checksum: 3569dcc0106f5e962e62811be66b5f49529c9d1a29671908568528b2b45d6cae03cb497fc755a1ae4144170f749133308494be42255ac98b61c930d143ed26f4 - languageName: node - linkType: hard - -"@ethereumjs/vm@npm:^7.1.0": - version: 7.1.0 - resolution: "@ethereumjs/vm@npm:7.1.0" - dependencies: - "@ethereumjs/block": ^5.0.1 - "@ethereumjs/blockchain": ^7.0.1 - "@ethereumjs/common": ^4.1.0 - "@ethereumjs/evm": ^2.1.0 - "@ethereumjs/rlp": ^5.0.1 - "@ethereumjs/statemanager": ^2.1.0 - "@ethereumjs/trie": ^6.0.1 - "@ethereumjs/tx": ^5.1.0 - "@ethereumjs/util": ^9.0.1 - debug: ^4.3.3 - ethereum-cryptography: ^2.1.2 - checksum: 03ef823f33b92057b64884a9c96893517d3bc24c6fae1251373c2247be48cdc05b4d88c5fdbd23701944af185c13c751c1b7aa430dabfc32b1cc08a135dfc9d2 - languageName: node - linkType: hard - -"@humanwhocodes/config-array@npm:^0.11.13": - version: 0.11.13 - resolution: "@humanwhocodes/config-array@npm:0.11.13" - dependencies: - "@humanwhocodes/object-schema": ^2.0.1 - debug: ^4.1.1 - minimatch: ^3.0.5 - checksum: f8ea57b0d7ed7f2d64cd3944654976829d9da91c04d9c860e18804729a33f7681f78166ef4c761850b8c324d362f7d53f14c5c44907a6b38b32c703ff85e4805 - languageName: node - linkType: hard - -"@humanwhocodes/module-importer@npm:^1.0.1": - version: 1.0.1 - resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 - languageName: node - linkType: hard - -"@humanwhocodes/object-schema@npm:^2.0.1": - version: 2.0.1 - resolution: "@humanwhocodes/object-schema@npm:2.0.1" - checksum: 24929487b1ed48795d2f08346a0116cc5ee4634848bce64161fb947109352c562310fd159fc64dda0e8b853307f5794605191a9547f7341158559ca3c8262a45 - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: ^5.1.2 - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: ^7.0.1 - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: ^8.1.0 - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.0.3": - version: 3.1.1 - resolution: "@jridgewell/resolve-uri@npm:3.1.1" - checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:0.3.9": - version: 0.3.9 - resolution: "@jridgewell/trace-mapping@npm:0.3.9" - dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef - languageName: node - linkType: hard - -"@lodestar/params@npm:^1.12.0": - version: 1.12.0 - resolution: "@lodestar/params@npm:1.12.0" - checksum: 572a75b14163b0b742f7e75692e995b1cd4b01420e9a59305d124b941660185bf70315779f62a135ddc17ed7db7109a5a564588187c3ebe3fbbee0107a7c2ea8 - languageName: node - linkType: hard - -"@lodestar/types@npm:^1.12.0": - version: 1.12.0 - resolution: "@lodestar/types@npm:1.12.0" - dependencies: - "@chainsafe/ssz": ^0.14.0 - "@lodestar/params": ^1.12.0 - checksum: ebba20b637ae4ace22ffacadf2b0a7c0dd72701354042ff7508630f82657942672c6247899ecbe618cc4cc74af6dd2b6e87b0aff18735698a591e21f5f819761 - languageName: node - linkType: hard - -"@noble/curves@npm:1.1.0, @noble/curves@npm:~1.1.0": - version: 1.1.0 - resolution: "@noble/curves@npm:1.1.0" - dependencies: - "@noble/hashes": 1.3.1 - checksum: 2658cdd3f84f71079b4e3516c47559d22cf4b55c23ac8ee9d2b1f8e5b72916d9689e59820e0f9d9cb4a46a8423af5b56dc6bb7782405c88be06a015180508db5 - languageName: node - linkType: hard - -"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": - version: 1.2.0 - resolution: "@noble/curves@npm:1.2.0" - dependencies: - "@noble/hashes": 1.3.2 - checksum: bb798d7a66d8e43789e93bc3c2ddff91a1e19fdb79a99b86cd98f1e5eff0ee2024a2672902c2576ef3577b6f282f3b5c778bebd55761ddbb30e36bf275e83dd0 - languageName: node - linkType: hard - -"@noble/hashes@npm:1.3.1": - version: 1.3.1 - resolution: "@noble/hashes@npm:1.3.1" - checksum: 7fdefc0f7a0c1ec27acc6ff88841793e3f93ec4ce6b8a6a12bfc0dd70ae6b7c4c82fe305fdfeda1735d5ad4a9eebe761e6693b3d355689c559e91242f4bc95b1 - languageName: node - linkType: hard - -"@noble/hashes@npm:1.3.2, @noble/hashes@npm:^1.3.0, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.1, @noble/hashes@npm:~1.3.2": - version: 1.3.2 - resolution: "@noble/hashes@npm:1.3.2" - checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": 2.0.5 - run-parallel: ^1.1.9 - checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": 2.1.5 - fastq: ^1.6.0 - checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/fs@npm:3.1.0" - dependencies: - semver: ^7.3.5 - checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f - languageName: node - linkType: hard - -"@scure/base@npm:^1.1.1, @scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2": - version: 1.1.3 - resolution: "@scure/base@npm:1.1.3" - checksum: 1606ab8a4db898cb3a1ada16c15437c3bce4e25854fadc8eb03ae93cbbbac1ed90655af4b0be3da37e12056fef11c0374499f69b9e658c9e5b7b3e06353c630c - languageName: node - linkType: hard - -"@scure/bip32@npm:1.3.1": - version: 1.3.1 - resolution: "@scure/bip32@npm:1.3.1" - dependencies: - "@noble/curves": ~1.1.0 - "@noble/hashes": ~1.3.1 - "@scure/base": ~1.1.0 - checksum: 394d65f77a40651eba21a5096da0f4233c3b50d422864751d373fcf142eeedb94a1149f9ab1dbb078086dab2d0bc27e2b1afec8321bf22d4403c7df2fea5bfe2 - languageName: node - linkType: hard - -"@scure/bip32@npm:1.3.2": - version: 1.3.2 - resolution: "@scure/bip32@npm:1.3.2" - dependencies: - "@noble/curves": ~1.2.0 - "@noble/hashes": ~1.3.2 - "@scure/base": ~1.1.2 - checksum: c5ae84fae43490853693b481531132b89e056d45c945fc8b92b9d032577f753dfd79c5a7bbcbf0a7f035951006ff0311b6cf7a389e26c9ec6335e42b20c53157 - languageName: node - linkType: hard - -"@scure/bip39@npm:1.2.1": - version: 1.2.1 - resolution: "@scure/bip39@npm:1.2.1" - dependencies: - "@noble/hashes": ~1.3.0 - "@scure/base": ~1.1.0 - checksum: c5bd6f1328fdbeae2dcdd891825b1610225310e5e62a4942714db51066866e4f7bef242c7b06a1b9dcc8043a4a13412cf5c5df76d3b10aa9e36b82e9b6e3eeaa - languageName: node - linkType: hard - -"@tootallnate/once@npm:2": - version: 2.0.0 - resolution: "@tootallnate/once@npm:2.0.0" - checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 - languageName: node - linkType: hard - -"@tsconfig/node10@npm:^1.0.7": - version: 1.0.9 - resolution: "@tsconfig/node10@npm:1.0.9" - checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df - languageName: node - linkType: hard - -"@tsconfig/node12@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node12@npm:1.0.11" - checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a - languageName: node - linkType: hard - -"@tsconfig/node14@npm:^1.0.0": - version: 1.0.3 - resolution: "@tsconfig/node14@npm:1.0.3" - checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d - languageName: node - linkType: hard - -"@tsconfig/node16@npm:^1.0.2": - version: 1.0.4 - resolution: "@tsconfig/node16@npm:1.0.4" - checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff - languageName: node - linkType: hard - -"@types/debug@npm:^4.1.9": - version: 4.1.12 - resolution: "@types/debug@npm:4.1.12" - dependencies: - "@types/ms": "*" - checksum: 47876a852de8240bfdaf7481357af2b88cb660d30c72e73789abf00c499d6bc7cd5e52f41c915d1b9cd8ec9fef5b05688d7b7aef17f7f272c2d04679508d1053 - languageName: node - linkType: hard - -"@types/json-schema@npm:^7.0.12": - version: 7.0.14 - resolution: "@types/json-schema@npm:7.0.14" - checksum: 4b3dd99616c7c808201c56f6c7f6552eb67b5c0c753ab3fa03a6cb549aae950da537e9558e53fa65fba23d1be624a1e4e8d20c15027efbe41e03ca56f2b04fb0 - languageName: node - linkType: hard - -"@types/ms@npm:*": - version: 0.7.34 - resolution: "@types/ms@npm:0.7.34" - checksum: f38d36e7b6edecd9badc9cf50474159e9da5fa6965a75186cceaf883278611b9df6669dc3a3cc122b7938d317b68a9e3d573d316fcb35d1be47ec9e468c6bd8a - languageName: node - linkType: hard - -"@types/node-cron@npm:^3.0.9": - version: 3.0.9 - resolution: "@types/node-cron@npm:3.0.9" - checksum: 8335eb0a453b956cc2da5431269e4732e0063c6cca0763cf779c7c242d0dfe3eea1929951a0b11fb9e7a2eee838836ee8cda79e9d6098b1bee91d5a17dce1e73 - languageName: node - linkType: hard - -"@types/node@npm:*": - version: 20.10.3 - resolution: "@types/node@npm:20.10.3" - dependencies: - undici-types: ~5.26.4 - checksum: 34a329494f0ea239af05eeb6f00f396963725b3eb9a2f79c5e6a6d37e823f2ab85e1079c2ee56723a37d8b89e7bbe2bd050c97144e5bb06dab93fd1cace65c97 - languageName: node - linkType: hard - -"@types/node@npm:18.15.13": - version: 18.15.13 - resolution: "@types/node@npm:18.15.13" - checksum: 79cc5a2b5f98e8973061a4260a781425efd39161a0e117a69cd089603964816c1a14025e1387b4590c8e82d05133b7b4154fa53a7dffb3877890a66145e76515 - languageName: node - linkType: hard - -"@types/node@npm:^20.8.9": - version: 20.8.9 - resolution: "@types/node@npm:20.8.9" - dependencies: - undici-types: ~5.26.4 - checksum: 0c05f3502a9507ff27e91dd6fd574fa6f391b3fafedcfe8e0c8d33351fb22d02c0121f854e5b6b3ecb9a8a468407ddf6e7ac0029fb236d4c7e1361ffc758a01f - languageName: node - linkType: hard - -"@types/readable-stream@npm:^2.3.13": - version: 2.3.15 - resolution: "@types/readable-stream@npm:2.3.15" - dependencies: - "@types/node": "*" - safe-buffer: ~5.1.1 - checksum: ec36f525cad09b6c65a1dafcb5ad99b9e2ed824ec49b7aa23180ac427e5d35b8a0706193ecd79ab4253a283ad485ba03d5917a98daaaa144f0ea34f4823e9d82 - languageName: node - linkType: hard - -"@types/semver@npm:^7.5.0": - version: 7.5.4 - resolution: "@types/semver@npm:7.5.4" - checksum: 120c0189f6fec5f2d12d0d71ac8a4cfa952dc17fa3d842e8afddb82bba8828a4052f8799c1653e2b47ae1977435f38e8985658fde971905ce5afb8e23ee97ecf - languageName: node - linkType: hard - -"@types/triple-beam@npm:^1.3.2": - version: 1.3.4 - resolution: "@types/triple-beam@npm:1.3.4" - checksum: 869641358164a9b87aec710e046c11a65803b7dc3545f33c3365df9590d1059c70592bb35a7fc4099fa746f112ab5a207881ba9fb570e9b1dea4ffd89761d804 - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:^6.7.5": - version: 6.9.0 - resolution: "@typescript-eslint/eslint-plugin@npm:6.9.0" - dependencies: - "@eslint-community/regexpp": ^4.5.1 - "@typescript-eslint/scope-manager": 6.9.0 - "@typescript-eslint/type-utils": 6.9.0 - "@typescript-eslint/utils": 6.9.0 - "@typescript-eslint/visitor-keys": 6.9.0 - debug: ^4.3.4 - graphemer: ^1.4.0 - ignore: ^5.2.4 - natural-compare: ^1.4.0 - semver: ^7.5.4 - ts-api-utils: ^1.0.1 - peerDependencies: - "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 51d7afc18bab711e20147f7163083f05435b6860174169eae56de217ed2cb1b3c08cba01b7d338315c2d8ecb982e83ce8f2ca7d2108c1c7c04faff2001b094d3 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:^6.7.5": - version: 6.9.0 - resolution: "@typescript-eslint/parser@npm:6.9.0" - dependencies: - "@typescript-eslint/scope-manager": 6.9.0 - "@typescript-eslint/types": 6.9.0 - "@typescript-eslint/typescript-estree": 6.9.0 - "@typescript-eslint/visitor-keys": 6.9.0 - debug: ^4.3.4 - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: d8ff69d236d6495474ab93c67e2785cc94bf9c098f25c33f1c5958a4b2b5af2b70edf1cdd0c23ee3436df454a769e80eb47d2d34df8382a826fcdb79bac4382d - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:6.9.0": - version: 6.9.0 - resolution: "@typescript-eslint/scope-manager@npm:6.9.0" - dependencies: - "@typescript-eslint/types": 6.9.0 - "@typescript-eslint/visitor-keys": 6.9.0 - checksum: b7ddcea11bdb95107659800bdf3b33eae22a4dc5c28dc0f8dc5507aa9affaae0e332b6d8c7d5286a7ec75e7c4abd211eb9fdf9647a9a796689cdcc11f6ab40c6 - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:6.9.0": - version: 6.9.0 - resolution: "@typescript-eslint/type-utils@npm:6.9.0" - dependencies: - "@typescript-eslint/typescript-estree": 6.9.0 - "@typescript-eslint/utils": 6.9.0 - debug: ^4.3.4 - ts-api-utils: ^1.0.1 - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 279b0000cd2fe7ccfbd2f311736b14c8bb9287081f553c9452c95966650c822e67442ba5a62d7fea3ee2f61ccc0fcb218f21e1ee7ccf3984c52e5942d2bbb065 - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:6.9.0": - version: 6.9.0 - resolution: "@typescript-eslint/types@npm:6.9.0" - checksum: e0444afa1f2ebca746c72b3d0bf95982eb1e8b4fb91bcba465c1345c35fa13b36c589bfd91c776b864f223bc50817b2613df5892185c2e34332bf4cc57cc865d - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:6.9.0": - version: 6.9.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.9.0" - dependencies: - "@typescript-eslint/types": 6.9.0 - "@typescript-eslint/visitor-keys": 6.9.0 - debug: ^4.3.4 - globby: ^11.1.0 - is-glob: ^4.0.3 - semver: ^7.5.4 - ts-api-utils: ^1.0.1 - peerDependenciesMeta: - typescript: - optional: true - checksum: 51088c23cca608a6e5c195b0a2d8a17ad00ca47199ba4df0c1013912a80194bff9f5bd4d035d6ab2596788491e9a3e04bbf6cad6494a3b1bbd59fea442750268 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:6.9.0": - version: 6.9.0 - resolution: "@typescript-eslint/utils@npm:6.9.0" - dependencies: - "@eslint-community/eslint-utils": ^4.4.0 - "@types/json-schema": ^7.0.12 - "@types/semver": ^7.5.0 - "@typescript-eslint/scope-manager": 6.9.0 - "@typescript-eslint/types": 6.9.0 - "@typescript-eslint/typescript-estree": 6.9.0 - semver: ^7.5.4 - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - checksum: 973c24d7858f224934958ee58c21ff21dfe54dbb1d0e0c5f889298fadcd7ee2dbfd49cf86ccafab74d428c31de66cd9beee7c39d2b64f9edcc9e941573bac175 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:6.9.0": - version: 6.9.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.9.0" - dependencies: - "@typescript-eslint/types": 6.9.0 - eslint-visitor-keys: ^3.4.1 - checksum: de8e2e363df41e5ae9774a5ebd1c49d29c771ea8b3869917f65a74cd4d14a67417c79916f456ee81ef5b0d947b7b8975385fc6eea3f1812d53a2eaaea832459e - languageName: node - linkType: hard - -"@ungap/structured-clone@npm:^1.2.0": - version: 1.2.0 - resolution: "@ungap/structured-clone@npm:1.2.0" - checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 - languageName: node - linkType: hard - -"@yarnpkg/lockfile@npm:^1.1.0": - version: 1.1.0 - resolution: "@yarnpkg/lockfile@npm:1.1.0" - checksum: 05b881b4866a3546861fee756e6d3812776ea47fa6eb7098f983d6d0eefa02e12b66c3fff931574120f196286a7ad4879ce02743c8bb2be36c6a576c7852083a - languageName: node - linkType: hard - -"abbrev@npm:1, abbrev@npm:^1.0.0": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 - languageName: node - linkType: hard - -"abitype@npm:0.9.8": - version: 0.9.8 - resolution: "abitype@npm:0.9.8" - peerDependencies: - typescript: ">=5.0.4" - zod: ^3 >=3.19.1 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true - checksum: d7d887f29d6821e3f7a400de9620511b80ead3f85c5c87308aaec97965d3493e6687ed816e88722b4f512249bd66dee9e69231b49af0e1db8f69400a62c87cf6 - languageName: node - linkType: hard - -"acorn-jsx@npm:^5.3.2": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 - languageName: node - linkType: hard - -"acorn-walk@npm:^8.1.1": - version: 8.2.0 - resolution: "acorn-walk@npm:8.2.0" - checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 - languageName: node - linkType: hard - -"acorn@npm:^8.4.1, acorn@npm:^8.9.0": - version: 8.10.0 - resolution: "acorn@npm:8.10.0" - bin: - acorn: bin/acorn - checksum: 538ba38af0cc9e5ef983aee196c4b8b4d87c0c94532334fa7e065b2c8a1f85863467bb774231aae91613fcda5e68740c15d97b1967ae3394d20faddddd8af61d - languageName: node - linkType: hard - -"aes-js@npm:4.0.0-beta.5": - version: 4.0.0-beta.5 - resolution: "aes-js@npm:4.0.0-beta.5" - checksum: cc2ea969d77df939c32057f7e361b6530aa6cb93cb10617a17a45cd164e6d761002f031ff6330af3e67e58b1f0a3a8fd0b63a720afd591a653b02f649470e15b - languageName: node - linkType: hard - -"agent-base@npm:6, agent-base@npm:^6.0.2": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: 4 - checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d - languageName: node - linkType: hard - -"agentkeepalive@npm:^4.2.1": - version: 4.5.0 - resolution: "agentkeepalive@npm:4.5.0" - dependencies: - humanize-ms: ^1.2.1 - checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: ^2.0.0 - indent-string: ^4.0.0 - checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 - languageName: node - linkType: hard - -"ajv@npm:^6.12.4": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: ^3.1.1 - fast-json-stable-stringify: ^2.0.0 - json-schema-traverse: ^0.4.1 - uri-js: ^4.2.2 - checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: ^2.0.1 - checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 - languageName: node - linkType: hard - -"ansi-styles@npm:^6.1.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 - languageName: node - linkType: hard - -"anymatch@npm:~3.1.2": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: ^3.0.0 - picomatch: ^2.0.4 - checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 - languageName: node - linkType: hard - -"aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^3.0.0": - version: 3.0.1 - resolution: "are-we-there-yet@npm:3.0.1" - dependencies: - delegates: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 - languageName: node - linkType: hard - -"arg@npm:^4.1.0": - version: 4.1.3 - resolution: "arg@npm:4.1.3" - checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 - languageName: node - linkType: hard - -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d - languageName: node - linkType: hard - -"async-mutex@npm:^0.4.0": - version: 0.4.0 - resolution: "async-mutex@npm:0.4.0" - dependencies: - tslib: ^2.4.0 - checksum: 813a71728b35a4fbfd64dba719f04726d9133c67b577fcd951b7028c4a675a13ee34e69beb82d621f87bf81f5d4f135c4c44be0448550c7db728547244ef71fc - languageName: node - linkType: hard - -"async@npm:^3.2.3": - version: 3.2.4 - resolution: "async@npm:3.2.4" - checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be - languageName: node - linkType: hard - -"at-least-node@npm:^1.0.0": - version: 1.0.0 - resolution: "at-least-node@npm:1.0.0" - checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e - languageName: node - linkType: hard - -"axios@npm:^1.5.1": - version: 1.5.1 - resolution: "axios@npm:1.5.1" - dependencies: - follow-redirects: ^1.15.0 - form-data: ^4.0.0 - proxy-from-env: ^1.1.0 - checksum: 4444f06601f4ede154183767863d2b8e472b4a6bfc5253597ed6d21899887e1fd0ee2b3de792ac4f8459fe2e359d2aa07c216e45fd8b9e4e0688a6ebf48a5a8d - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 - languageName: node - linkType: hard - -"bigint-crypto-utils@npm:^3.2.2": - version: 3.3.0 - resolution: "bigint-crypto-utils@npm:3.3.0" - checksum: 9598ce57b23f776c8936d44114c9f051e62b5fa654915b664784cbcbacc5aa0485f4479571c51ff58008abb1210c0d6a234853742f07cf84bda890f2a1e01000 - languageName: node - linkType: hard - -"binary-extensions@npm:^2.0.0": - version: 2.2.0 - resolution: "binary-extensions@npm:2.2.0" - checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: ^1.0.0 - concat-map: 0.0.1 - checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: ^1.0.0 - checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 - languageName: node - linkType: hard - -"braces@npm:^3.0.2, braces@npm:~3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" - dependencies: - fill-range: ^7.0.1 - checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 - languageName: node - linkType: hard - -"braces@npm:^3.0.3": - version: 3.0.3 - resolution: "braces@npm:3.0.3" - dependencies: - fill-range: ^7.1.1 - checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69 - languageName: node - linkType: hard - -"cacache@npm:^17.0.0": - version: 17.1.4 - resolution: "cacache@npm:17.1.4" - dependencies: - "@npmcli/fs": ^3.1.0 - fs-minipass: ^3.0.0 - glob: ^10.2.2 - lru-cache: ^7.7.1 - minipass: ^7.0.3 - minipass-collect: ^1.0.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - p-map: ^4.0.0 - ssri: ^10.0.0 - tar: ^6.1.11 - unique-filename: ^3.0.0 - checksum: b7751df756656954a51201335addced8f63fc53266fa56392c9f5ae83c8d27debffb4458ac2d168a744a4517ec3f2163af05c20097f93d17bdc2dc8a385e14a6 - languageName: node - linkType: hard - -"call-bind@npm:^1.0.5": - version: 1.0.7 - resolution: "call-bind@npm:1.0.7" - dependencies: - es-define-property: ^1.0.0 - es-errors: ^1.3.0 - function-bind: ^1.1.2 - get-intrinsic: ^1.2.4 - set-function-length: ^1.2.1 - checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029 - languageName: node - linkType: hard - -"callsites@npm:^3.0.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 - languageName: node - linkType: hard - -"chalk@npm:^4.0.0, chalk@npm:^4.1.2": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: ^4.1.0 - supports-color: ^7.1.0 - checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc - languageName: node - linkType: hard - -"chokidar@npm:^3.5.2": - version: 3.5.3 - resolution: "chokidar@npm:3.5.3" - dependencies: - anymatch: ~3.1.2 - braces: ~3.0.2 - fsevents: ~2.3.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 - dependenciesMeta: - fsevents: - optional: true - checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f - languageName: node - linkType: hard - -"ci-info@npm:^3.7.0": - version: 3.9.0 - resolution: "ci-info@npm:3.9.0" - checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.3": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: 1.1.3 - checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: ~1.1.4 - checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d - languageName: node - linkType: hard - -"color-name@npm:^1.0.0, color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 - languageName: node - linkType: hard - -"color-string@npm:^1.6.0": - version: 1.9.1 - resolution: "color-string@npm:1.9.1" - dependencies: - color-name: ^1.0.0 - simple-swizzle: ^0.2.2 - checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 - languageName: node - linkType: hard - -"color-support@npm:^1.1.3": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b - languageName: node - linkType: hard - -"color@npm:^3.1.3": - version: 3.2.1 - resolution: "color@npm:3.2.1" - dependencies: - color-convert: ^1.9.3 - color-string: ^1.6.0 - checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 - languageName: node - linkType: hard - -"colorspace@npm:1.1.x": - version: 1.1.4 - resolution: "colorspace@npm:1.1.4" - dependencies: - color: ^3.1.3 - text-hex: 1.0.x - checksum: bb3934ef3c417e961e6d03d7ca60ea6e175947029bfadfcdb65109b01881a1c0ecf9c2b0b59abcd0ee4a0d7c1eae93beed01b0e65848936472270a0b341ebce8 - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: ~1.0.0 - checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af - languageName: node - linkType: hard - -"console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed - languageName: node - linkType: hard - -"crc@npm:^4.3.2": - version: 4.3.2 - resolution: "crc@npm:4.3.2" - peerDependencies: - buffer: ">=6.0.3" - peerDependenciesMeta: - buffer: - optional: true - checksum: 8231cc25331727083ffd22da3575110fc49b4dc8725de973bd43261d4426aba134ed3a75cc247f7c5e97a6e171f87dffc3325b82890e86d032de2e6bcef09c32 - languageName: node - linkType: hard - -"create-require@npm:^1.1.0": - version: 1.1.1 - resolution: "create-require@npm:1.1.1" - checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" - dependencies: - path-key: ^3.1.0 - shebang-command: ^2.0.0 - which: ^2.0.1 - checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": - version: 4.3.4 - resolution: "debug@npm:4.3.4" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 - languageName: node - linkType: hard - -"debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: ^2.1.1 - checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c - languageName: node - linkType: hard - -"deep-is@npm:^0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 - languageName: node - linkType: hard - -"define-data-property@npm:^1.1.4": - version: 1.1.4 - resolution: "define-data-property@npm:1.1.4" - dependencies: - es-define-property: ^1.0.0 - es-errors: ^1.3.0 - gopd: ^1.0.1 - checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 - languageName: node - linkType: hard - -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd - languageName: node - linkType: hard - -"diff@npm:^4.0.1": - version: 4.0.2 - resolution: "diff@npm:4.0.2" - checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: ^4.0.0 - checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 - languageName: node - linkType: hard - -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: ^2.0.2 - checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce - languageName: node - linkType: hard - -"dotenv@npm:^16.3.1": - version: 16.3.1 - resolution: "dotenv@npm:16.3.1" - checksum: 15d75e7279018f4bafd0ee9706593dd14455ddb71b3bcba9c52574460b7ccaf67d5cf8b2c08a5af1a9da6db36c956a04a1192b101ee102a3e0cf8817bbcf3dfd - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 - languageName: node - linkType: hard - -"enabled@npm:2.0.x": - version: 2.0.0 - resolution: "enabled@npm:2.0.0" - checksum: 9d256d89f4e8a46ff988c6a79b22fa814b4ffd82826c4fdacd9b42e9b9465709d3b748866d0ab4d442dfc6002d81de7f7b384146ccd1681f6a7f868d2acca063 - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: ^0.6.2 - checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.0": - version: 1.0.0 - resolution: "es-define-property@npm:1.0.0" - dependencies: - get-intrinsic: ^1.2.4 - checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 - languageName: node - linkType: hard - -"es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 - languageName: node - linkType: hard - -"eslint-config-prettier@npm:^9.0.0": - version: 9.0.0 - resolution: "eslint-config-prettier@npm:9.0.0" - peerDependencies: - eslint: ">=7.0.0" - bin: - eslint-config-prettier: bin/cli.js - checksum: 362e991b6cb343f79362bada2d97c202e5303e6865888918a7445c555fb75e4c078b01278e90be98aa98ae22f8597d8e93d48314bec6824f540f7efcab3ce451 - languageName: node - linkType: hard - -"eslint-scope@npm:^7.2.2": - version: 7.2.2 - resolution: "eslint-scope@npm:7.2.2" - dependencies: - esrecurse: ^4.3.0 - estraverse: ^5.2.0 - checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": - version: 3.4.3 - resolution: "eslint-visitor-keys@npm:3.4.3" - checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 - languageName: node - linkType: hard - -"eslint@npm:^8.51.0": - version: 8.52.0 - resolution: "eslint@npm:8.52.0" - dependencies: - "@eslint-community/eslint-utils": ^4.2.0 - "@eslint-community/regexpp": ^4.6.1 - "@eslint/eslintrc": ^2.1.2 - "@eslint/js": 8.52.0 - "@humanwhocodes/config-array": ^0.11.13 - "@humanwhocodes/module-importer": ^1.0.1 - "@nodelib/fs.walk": ^1.2.8 - "@ungap/structured-clone": ^1.2.0 - ajv: ^6.12.4 - chalk: ^4.0.0 - cross-spawn: ^7.0.2 - debug: ^4.3.2 - doctrine: ^3.0.0 - escape-string-regexp: ^4.0.0 - eslint-scope: ^7.2.2 - eslint-visitor-keys: ^3.4.3 - espree: ^9.6.1 - esquery: ^1.4.2 - esutils: ^2.0.2 - fast-deep-equal: ^3.1.3 - file-entry-cache: ^6.0.1 - find-up: ^5.0.0 - glob-parent: ^6.0.2 - globals: ^13.19.0 - graphemer: ^1.4.0 - ignore: ^5.2.0 - imurmurhash: ^0.1.4 - is-glob: ^4.0.0 - is-path-inside: ^3.0.3 - js-yaml: ^4.1.0 - json-stable-stringify-without-jsonify: ^1.0.1 - levn: ^0.4.1 - lodash.merge: ^4.6.2 - minimatch: ^3.1.2 - natural-compare: ^1.4.0 - optionator: ^0.9.3 - strip-ansi: ^6.0.1 - text-table: ^0.2.0 - bin: - eslint: bin/eslint.js - checksum: fd22d1e9bd7090e31b00cbc7a3b98f3b76020a4c4641f987ae7d0c8f52e1b88c3b268bdfdabac2e1a93513e5d11339b718ff45cbff48a44c35d7e52feba510ed - languageName: node - linkType: hard - -"espree@npm:^9.6.0, espree@npm:^9.6.1": - version: 9.6.1 - resolution: "espree@npm:9.6.1" - dependencies: - acorn: ^8.9.0 - acorn-jsx: ^5.3.2 - eslint-visitor-keys: ^3.4.1 - checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 - languageName: node - linkType: hard - -"esquery@npm:^1.4.2": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" - dependencies: - estraverse: ^5.1.0 - checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: ^5.2.0 - checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 - languageName: node - linkType: hard - -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 - languageName: node - linkType: hard - -"ethereum-cryptography@npm:^2.1.2": - version: 2.1.2 - resolution: "ethereum-cryptography@npm:2.1.2" - dependencies: - "@noble/curves": 1.1.0 - "@noble/hashes": 1.3.1 - "@scure/bip32": 1.3.1 - "@scure/bip39": 1.2.1 - checksum: 2e8f7b8cc90232ae838ab6a8167708e8362621404d26e79b5d9e762c7b53d699f7520aff358d9254de658fcd54d2d0af168ff909943259ed27dc4cef2736410c - languageName: node - linkType: hard - -"ethers@npm:^6.4.0": - version: 6.9.0 - resolution: "ethers@npm:6.9.0" - dependencies: - "@adraffy/ens-normalize": 1.10.0 - "@noble/curves": 1.2.0 - "@noble/hashes": 1.3.2 - "@types/node": 18.15.13 - aes-js: 4.0.0-beta.5 - tslib: 2.4.0 - ws: 8.5.0 - checksum: e7b3b912b92b818fe65a192b32f4dd87ce0b71f4ffc194b4b3764b4b17d3b6ed953b667293e4c9276f785fa8c8659934c513843350317c61178af8e6165afbdd - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.9": - version: 3.3.1 - resolution: "fast-glob@npm:3.3.1" - dependencies: - "@nodelib/fs.stat": ^2.0.2 - "@nodelib/fs.walk": ^1.2.3 - glob-parent: ^5.1.2 - merge2: ^1.3.0 - micromatch: ^4.0.4 - checksum: b6f3add6403e02cf3a798bfbb1183d0f6da2afd368f27456010c0bc1f9640aea308243d4cb2c0ab142f618276e65ecb8be1661d7c62a7b4e5ba774b9ce5432e5 - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb - languageName: node - linkType: hard - -"fast-levenshtein@npm:^2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.15.0 - resolution: "fastq@npm:1.15.0" - dependencies: - reusify: ^1.0.4 - checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a - languageName: node - linkType: hard - -"fecha@npm:^4.2.0": - version: 4.2.3 - resolution: "fecha@npm:4.2.3" - checksum: f94e2fb3acf5a7754165d04549460d3ae6c34830394d20c552197e3e000035d69732d74af04b9bed3283bf29fe2a9ebdcc0085e640b0be3cc3658b9726265e31 - languageName: node - linkType: hard - -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" - dependencies: - flat-cache: ^3.0.4 - checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 - languageName: node - linkType: hard - -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" - dependencies: - to-regex-range: ^5.0.1 - checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 - languageName: node - linkType: hard - -"fill-range@npm:^7.1.1": - version: 7.1.1 - resolution: "fill-range@npm:7.1.1" - dependencies: - to-regex-range: ^5.0.1 - checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798 - languageName: node - linkType: hard - -"find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" - dependencies: - locate-path: ^6.0.0 - path-exists: ^4.0.0 - checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 - languageName: node - linkType: hard - -"find-yarn-workspace-root@npm:^2.0.0": - version: 2.0.0 - resolution: "find-yarn-workspace-root@npm:2.0.0" - dependencies: - micromatch: ^4.0.2 - checksum: fa5ca8f9d08fe7a54ce7c0a5931ff9b7e36f9ee7b9475fb13752bcea80ec6b5f180fa5102d60b376d5526ce924ea3fc6b19301262efa0a5d248dd710f3644242 - languageName: node - linkType: hard - -"flat-cache@npm:^3.0.4": - version: 3.1.1 - resolution: "flat-cache@npm:3.1.1" - dependencies: - flatted: ^3.2.9 - keyv: ^4.5.3 - rimraf: ^3.0.2 - checksum: 4958cfe0f46acf84953d4e16676ef5f0d38eab3a92d532a1e8d5f88f11eea8b36d5d598070ff2aeae15f1fde18f8d7d089eefaf9db10b5a587cc1c9072325c7a - languageName: node - linkType: hard - -"flatted@npm:^3.2.9": - version: 3.2.9 - resolution: "flatted@npm:3.2.9" - checksum: f14167fbe26a9d20f6fca8d998e8f1f41df72c8e81f9f2c9d61ed2bea058248f5e1cbd05e7f88c0e5087a6a0b822a1e5e2b446e879f3cfbe0b07ba2d7f80b026 - languageName: node - linkType: hard - -"fn.name@npm:1.x.x": - version: 1.1.0 - resolution: "fn.name@npm:1.1.0" - checksum: e357144f48cfc9a7f52a82bbc6c23df7c8de639fce049cac41d41d62cabb740cdb9f14eddc6485e29c933104455bdd7a69bb14a9012cef9cd4fa252a4d0cf293 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.15.0": - version: 1.15.3 - resolution: "follow-redirects@npm:1.15.3" - peerDependenciesMeta: - debug: - optional: true - checksum: 584da22ec5420c837bd096559ebfb8fe69d82512d5585004e36a3b4a6ef6d5905780e0c74508c7b72f907d1fa2b7bd339e613859e9c304d0dc96af2027fd0231 - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.1.1 - resolution: "foreground-child@npm:3.1.1" - dependencies: - cross-spawn: ^7.0.0 - signal-exit: ^4.0.1 - checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 - languageName: node - linkType: hard - -"form-data@npm:^4.0.0": - version: 4.0.0 - resolution: "form-data@npm:4.0.0" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.8 - mime-types: ^2.1.12 - checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c - languageName: node - linkType: hard - -"fs-extra@npm:^9.0.0": - version: 9.1.0 - resolution: "fs-extra@npm:9.1.0" - dependencies: - at-least-node: ^1.0.0 - graceful-fs: ^4.2.0 - jsonfile: ^6.0.1 - universalify: ^2.0.0 - checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20 - languageName: node - linkType: hard - -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: ^3.0.0 - checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: ^7.0.3 - checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 - languageName: node - linkType: hard - -"fsevents@npm:~2.3.2": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: latest - checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@~2.3.2#~builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" - dependencies: - node-gyp: latest - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 - languageName: node - linkType: hard - -"gauge@npm:^4.0.3": - version: 4.0.4 - resolution: "gauge@npm:4.0.4" - dependencies: - aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.3 - console-control-strings: ^1.1.0 - has-unicode: ^2.0.1 - signal-exit: ^3.0.7 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - wide-align: ^1.1.5 - checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.4": - version: 1.2.4 - resolution: "get-intrinsic@npm:1.2.4" - dependencies: - es-errors: ^1.3.0 - function-bind: ^1.1.2 - has-proto: ^1.0.1 - has-symbols: ^1.0.3 - hasown: ^2.0.0 - checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951 - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: ^4.0.1 - checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e - languageName: node - linkType: hard - -"glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: ^4.0.3 - checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 - languageName: node - linkType: hard - -"glob@npm:^10.2.2": - version: 10.3.10 - resolution: "glob@npm:10.3.10" - dependencies: - foreground-child: ^3.1.0 - jackspeak: ^2.3.5 - minimatch: ^9.0.1 - minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 - path-scurry: ^1.10.1 - bin: - glob: dist/esm/bin.mjs - checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 - languageName: node - linkType: hard - -"glob@npm:^7.1.3, glob@npm:^7.1.4": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - 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 - checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 - languageName: node - linkType: hard - -"globals@npm:^13.19.0": - version: 13.23.0 - resolution: "globals@npm:13.23.0" - dependencies: - type-fest: ^0.20.2 - checksum: 194c97cf8d1ef6ba59417234c2386549c4103b6e5f24b1ff1952de61a4753e5d2069435ba629de711a6480b1b1d114a98e2ab27f85e966d5a10c319c3bbd3dc3 - languageName: node - linkType: hard - -"globby@npm:^11.1.0": - version: 11.1.0 - resolution: "globby@npm:11.1.0" - dependencies: - array-union: ^2.1.0 - dir-glob: ^3.0.1 - fast-glob: ^3.2.9 - ignore: ^5.2.0 - merge2: ^1.4.1 - slash: ^3.0.0 - checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 - languageName: node - linkType: hard - -"gopd@npm:^1.0.1": - version: 1.0.1 - resolution: "gopd@npm:1.0.1" - dependencies: - get-intrinsic: ^1.1.3 - checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 - languageName: node - linkType: hard - -"graphemer@npm:^1.4.0": - version: 1.4.0 - resolution: "graphemer@npm:1.4.0" - checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad - languageName: node - linkType: hard - -"has-property-descriptors@npm:^1.0.2": - version: 1.0.2 - resolution: "has-property-descriptors@npm:1.0.2" - dependencies: - es-define-property: ^1.0.0 - checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 - languageName: node - linkType: hard - -"has-proto@npm:^1.0.1": - version: 1.0.3 - resolution: "has-proto@npm:1.0.3" - checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4 - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3": - version: 1.0.3 - resolution: "has-symbols@npm:1.0.3" - checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 - languageName: node - linkType: hard - -"has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 - languageName: node - linkType: hard - -"hasown@npm:^2.0.0": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: ^1.1.2 - checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "http-proxy-agent@npm:5.0.0" - dependencies: - "@tootallnate/once": 2 - agent-base: 6 - debug: 4 - checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: 6 - debug: 4 - checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 - languageName: node - linkType: hard - -"humanize-ms@npm:^1.2.1": - version: 1.2.1 - resolution: "humanize-ms@npm:1.2.1" - dependencies: - ms: ^2.0.0 - checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: ">= 2.1.2 < 3.0.0" - checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf - languageName: node - linkType: hard - -"ignore-by-default@npm:^1.0.1": - version: 1.0.1 - resolution: "ignore-by-default@npm:1.0.1" - checksum: 441509147b3615e0365e407a3c18e189f78c07af08564176c680be1fabc94b6c789cad1342ad887175d4ecd5225de86f73d376cec8e06b42fd9b429505ffcf8a - languageName: node - linkType: hard - -"ignore@npm:^5.2.0, ignore@npm:^5.2.4": - version: 5.2.4 - resolution: "ignore@npm:5.2.4" - checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef - languageName: node - linkType: hard - -"import-fresh@npm:^3.2.1": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" - dependencies: - parent-module: ^1.0.0 - resolve-from: ^4.0.0 - checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: ^1.3.0 - wrappy: 1 - checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:^2.0.3": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 - languageName: node - linkType: hard - -"ip@npm:^2.0.0": - version: 2.0.0 - resolution: "ip@npm:2.0.0" - checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 - languageName: node - linkType: hard - -"is-arrayish@npm:^0.3.1": - version: 0.3.2 - resolution: "is-arrayish@npm:0.3.2" - checksum: 977e64f54d91c8f169b59afcd80ff19227e9f5c791fa28fa2e5bce355cbaf6c2c356711b734656e80c9dd4a854dd7efcf7894402f1031dfc5de5d620775b4d5f - languageName: node - linkType: hard - -"is-binary-path@npm:~2.1.0": - version: 2.1.0 - resolution: "is-binary-path@npm:2.1.0" - dependencies: - binary-extensions: ^2.0.0 - checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c - languageName: node - linkType: hard - -"is-docker@npm:^2.0.0": - version: 2.2.1 - resolution: "is-docker@npm:2.2.1" - bin: - is-docker: cli.js - checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 - languageName: node - linkType: hard - -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: ^2.1.1 - checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a - languageName: node - linkType: hard - -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 - languageName: node - linkType: hard - -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 - languageName: node - linkType: hard - -"is-wsl@npm:^2.1.1": - version: 2.2.0 - resolution: "is-wsl@npm:2.2.0" - dependencies: - is-docker: ^2.0.0 - checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 - languageName: node - linkType: hard - -"isarray@npm:^2.0.5": - version: 2.0.5 - resolution: "isarray@npm:2.0.5" - checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 - languageName: node - linkType: hard - -"isows@npm:1.0.3": - version: 1.0.3 - resolution: "isows@npm:1.0.3" - peerDependencies: - ws: "*" - checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 - languageName: node - linkType: hard - -"jackspeak@npm:^2.3.5": - version: 2.3.6 - resolution: "jackspeak@npm:2.3.6" - dependencies: - "@isaacs/cliui": ^8.0.2 - "@pkgjs/parseargs": ^0.11.0 - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 - languageName: node - linkType: hard - -"js-sdsl@npm:^4.1.4": - version: 4.4.2 - resolution: "js-sdsl@npm:4.4.2" - checksum: ba705adc1788bf3c6f6c8e5077824f2bb4f0acab5a984420ce5cc492c7fff3daddc26335ad2c9a67d4f5e3241ec790f9e5b72a625adcf20cf321d2fd85e62b8b - languageName: node - linkType: hard - -"js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" - dependencies: - argparse: ^2.0.1 - bin: - js-yaml: bin/js-yaml.js - checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a - languageName: node - linkType: hard - -"json-buffer@npm:3.0.1": - version: 3.0.1 - resolution: "json-buffer@npm:3.0.1" - checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b - languageName: node - linkType: hard - -"json-stable-stringify-without-jsonify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 - languageName: node - linkType: hard - -"json-stable-stringify@npm:^1.0.2": - version: 1.1.1 - resolution: "json-stable-stringify@npm:1.1.1" - dependencies: - call-bind: ^1.0.5 - isarray: ^2.0.5 - jsonify: ^0.0.1 - object-keys: ^1.1.1 - checksum: e1ba06600fd278767eeff53f28e408e29c867e79abf564e7aadc3ce8f31f667258f8db278ef28831e45884dd687388fa1910f46e599fc19fb94c9afbbe3a4de8 - languageName: node - linkType: hard - -"jsonfile@npm:^6.0.1": - version: 6.1.0 - resolution: "jsonfile@npm:6.1.0" - dependencies: - graceful-fs: ^4.1.6 - universalify: ^2.0.0 - dependenciesMeta: - graceful-fs: - optional: true - checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 - languageName: node - linkType: hard - -"jsonify@npm:^0.0.1": - version: 0.0.1 - resolution: "jsonify@npm:0.0.1" - checksum: 027287e1c0294fce15f18c0ff990cfc2318e7f01fb76515f784d5cd0784abfec6fc5c2355c3a2f2cb0ad7f4aa2f5b74ebbfe4e80476c35b2d13cabdb572e1134 - languageName: node - linkType: hard - -"keyv@npm:^4.5.3": - version: 4.5.4 - resolution: "keyv@npm:4.5.4" - dependencies: - json-buffer: 3.0.1 - checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 - languageName: node - linkType: hard - -"klaw-sync@npm:^6.0.0": - version: 6.0.0 - resolution: "klaw-sync@npm:6.0.0" - dependencies: - graceful-fs: ^4.1.11 - checksum: 0da397f8961313c3ef8f79fb63af9002cde5a8fb2aeb1a37351feff0dd6006129c790400c3f5c3b4e757bedcabb13d21ec0a5eaef5a593d59515d4f2c291e475 - languageName: node - linkType: hard - -"kuler@npm:^2.0.0": - version: 2.0.0 - resolution: "kuler@npm:2.0.0" - checksum: 9e10b5a1659f9ed8761d38df3c35effabffbd19fc6107324095238e4ef0ff044392cae9ac64a1c2dda26e532426485342226b93806bd97504b174b0dcf04ed81 - languageName: node - linkType: hard - -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" - dependencies: - prelude-ls: ^1.2.1 - type-check: ~0.4.0 - checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 - languageName: node - linkType: hard - -"locate-path@npm:^6.0.0": - version: 6.0.0 - resolution: "locate-path@npm:6.0.0" - dependencies: - p-locate: ^5.0.0 - checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a - languageName: node - linkType: hard - -"lodash.merge@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.merge@npm:4.6.2" - checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 - languageName: node - linkType: hard - -"logform@npm:^2.3.2, logform@npm:^2.4.0": - version: 2.6.0 - resolution: "logform@npm:2.6.0" - dependencies: - "@colors/colors": 1.6.0 - "@types/triple-beam": ^1.3.2 - fecha: ^4.2.0 - ms: ^2.1.1 - safe-stable-stringify: ^2.3.1 - triple-beam: ^1.3.0 - checksum: b9ea74bb75e55379ad0eb3e4d65ae6e8d02bc45b431c218162878bf663997ab9258a73104c2b30e09dd2db288bb83c8bf8748e46689d75f5e7e34cf69378d6df - languageName: node - linkType: hard - -"lru-cache@npm:^10.0.0": - version: 10.1.0 - resolution: "lru-cache@npm:10.1.0" - checksum: 58056d33e2500fbedce92f8c542e7c11b50d7d086578f14b7074d8c241422004af0718e08a6eaae8705cee09c77e39a61c1c79e9370ba689b7010c152e6a76ab - languageName: node - linkType: hard - -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: ^4.0.0 - checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 - languageName: node - linkType: hard - -"lru-cache@npm:^7.7.1": - version: 7.18.3 - resolution: "lru-cache@npm:7.18.3" - checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 - languageName: node - linkType: hard - -"lru-cache@npm:^9.1.1 || ^10.0.0": - version: 10.0.1 - resolution: "lru-cache@npm:10.0.1" - checksum: 06f8d0e1ceabd76bb6f644a26dbb0b4c471b79c7b514c13c6856113879b3bf369eb7b497dad4ff2b7e2636db202412394865b33c332100876d838ad1372f0181 - languageName: node - linkType: hard - -"make-error@npm:^1.1.1": - version: 1.3.6 - resolution: "make-error@npm:1.3.6" - checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^11.0.3": - version: 11.1.1 - resolution: "make-fetch-happen@npm:11.1.1" - dependencies: - agentkeepalive: ^4.2.1 - cacache: ^17.0.0 - http-cache-semantics: ^4.1.1 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^7.7.1 - minipass: ^5.0.0 - minipass-fetch: ^3.0.0 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - promise-retry: ^2.0.1 - socks-proxy-agent: ^7.0.0 - ssri: ^10.0.0 - checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 - languageName: node - linkType: hard - -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 - languageName: node - linkType: hard - -"micromatch@npm:^4.0.2": - version: 4.0.7 - resolution: "micromatch@npm:4.0.7" - dependencies: - braces: ^3.0.3 - picomatch: ^2.3.1 - checksum: 3cde047d70ad80cf60c787b77198d680db3b8c25b23feb01de5e2652205d9c19f43bd81882f69a0fd1f0cde6a7a122d774998aad3271ddb1b8accf8a0f480cf7 - languageName: node - linkType: hard - -"micromatch@npm:^4.0.4": - version: 4.0.5 - resolution: "micromatch@npm:4.0.5" - dependencies: - braces: ^3.0.2 - picomatch: ^2.3.1 - checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: 1.52.0 - checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 - languageName: node - linkType: hard - -"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: ^1.1.7 - checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a - languageName: node - linkType: hard - -"minimatch@npm:^9.0.1": - version: 9.0.3 - resolution: "minimatch@npm:9.0.3" - dependencies: - brace-expansion: ^2.0.1 - checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 - languageName: node - linkType: hard - -"minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 - languageName: node - linkType: hard - -"minipass-collect@npm:^1.0.2": - version: 1.0.2 - resolution: "minipass-collect@npm:1.0.2" - dependencies: - minipass: ^3.0.0 - checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 - languageName: node - linkType: hard - -"minipass-fetch@npm:^3.0.0": - version: 3.0.4 - resolution: "minipass-fetch@npm:3.0.4" - dependencies: - encoding: ^0.1.13 - minipass: ^7.0.3 - minipass-sized: ^1.0.3 - minizlib: ^2.1.2 - dependenciesMeta: - encoding: - optional: true - checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: ^3.0.0 - checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: ^3.0.0 - checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: ^3.0.0 - checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: ^4.0.0 - checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 - languageName: node - linkType: hard - -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.3": - version: 7.0.4 - resolution: "minipass@npm:7.0.4" - checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 - languageName: node - linkType: hard - -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: ^3.0.0 - yallist: ^4.0.0 - checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 - languageName: node - linkType: hard - -"mkdirp@npm:^1.0.3": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f - languageName: node - linkType: hard - -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f - languageName: node - linkType: hard - -"ms@npm:^2.0.0, ms@npm:^2.1.1": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d - languageName: node - linkType: hard - -"natural-compare@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare@npm:1.4.0" - checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d - languageName: node - linkType: hard - -"negotiator@npm:^0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 9.4.0 - resolution: "node-gyp@npm:9.4.0" - dependencies: - env-paths: ^2.2.0 - exponential-backoff: ^3.1.1 - glob: ^7.1.4 - graceful-fs: ^4.2.6 - make-fetch-happen: ^11.0.3 - nopt: ^6.0.0 - npmlog: ^6.0.0 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^2.0.2 - bin: - node-gyp: bin/node-gyp.js - checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 - languageName: node - linkType: hard - -"nodemon@npm:^3.0.1": - version: 3.0.1 - resolution: "nodemon@npm:3.0.1" - dependencies: - chokidar: ^3.5.2 - debug: ^3.2.7 - ignore-by-default: ^1.0.1 - minimatch: ^3.1.2 - pstree.remy: ^1.1.8 - semver: ^7.5.3 - simple-update-notifier: ^2.0.0 - supports-color: ^5.5.0 - touch: ^3.1.0 - undefsafe: ^2.0.5 - bin: - nodemon: bin/nodemon.js - checksum: 6a5d81855760d6617049eccce10ccf02bddb482dab13ceea5280ae595ec7004eee13e7b934368e3f46c37fe4d970342a8c38c99cae7e93e4d7a3ed1c1ecb6acf - languageName: node - linkType: hard - -"nopt@npm:^6.0.0": - version: 6.0.0 - resolution: "nopt@npm:6.0.0" - dependencies: - abbrev: ^1.0.0 - bin: - nopt: bin/nopt.js - checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac - languageName: node - linkType: hard - -"nopt@npm:~1.0.10": - version: 1.0.10 - resolution: "nopt@npm:1.0.10" - dependencies: - abbrev: 1 - bin: - nopt: ./bin/nopt.js - checksum: f62575aceaa3be43f365bf37a596b89bbac2e796b001b6d2e2a85c2140a4e378ff919e2753ccba959c4fd344776fc88c29b393bc167fa939fb1513f126f4cd45 - languageName: node - linkType: hard - -"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 - languageName: node - linkType: hard - -"npmlog@npm:^6.0.0": - version: 6.0.2 - resolution: "npmlog@npm:6.0.2" - dependencies: - are-we-there-yet: ^3.0.0 - console-control-strings: ^1.1.0 - gauge: ^4.0.3 - set-blocking: ^2.0.0 - checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a - languageName: node - linkType: hard - -"object-keys@npm:^1.1.1": - version: 1.1.1 - resolution: "object-keys@npm:1.1.1" - checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a - languageName: node - linkType: hard - -"once@npm:^1.3.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: 1 - checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 - languageName: node - linkType: hard - -"one-time@npm:^1.0.0": - version: 1.0.0 - resolution: "one-time@npm:1.0.0" - dependencies: - fn.name: 1.x.x - checksum: fd008d7e992bdec1c67f53a2f9b46381ee12a9b8c309f88b21f0223546003fb47e8ad7c1fd5843751920a8d276c63bd4b45670ef80c61fb3e07dbccc962b5c7d - languageName: node - linkType: hard - -"open@npm:^7.4.2": - version: 7.4.2 - resolution: "open@npm:7.4.2" - dependencies: - is-docker: ^2.0.0 - is-wsl: ^2.1.1 - checksum: 3333900ec0e420d64c23b831bc3467e57031461d843c801f569b2204a1acc3cd7b3ec3c7897afc9dde86491dfa289708eb92bba164093d8bd88fb2c231843c91 - languageName: node - linkType: hard - -"optionator@npm:^0.9.3": - version: 0.9.3 - resolution: "optionator@npm:0.9.3" - dependencies: - "@aashutoshrathi/word-wrap": ^1.2.3 - deep-is: ^0.1.3 - fast-levenshtein: ^2.0.6 - levn: ^0.4.1 - prelude-ls: ^1.2.1 - type-check: ^0.4.0 - checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a - languageName: node - linkType: hard - -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d - languageName: node - linkType: hard - -"p-limit@npm:^3.0.2": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: ^0.1.0 - checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 - languageName: node - linkType: hard - -"p-locate@npm:^5.0.0": - version: 5.0.0 - resolution: "p-locate@npm:5.0.0" - dependencies: - p-limit: ^3.0.2 - checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 - languageName: node - linkType: hard - -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: ^3.0.0 - checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c - languageName: node - linkType: hard - -"parent-module@npm:^1.0.0": - version: 1.0.1 - resolution: "parent-module@npm:1.0.1" - dependencies: - callsites: ^3.0.0 - checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff - languageName: node - linkType: hard - -"patch-package@npm:^8.0.0": - version: 8.0.0 - resolution: "patch-package@npm:8.0.0" - dependencies: - "@yarnpkg/lockfile": ^1.1.0 - chalk: ^4.1.2 - ci-info: ^3.7.0 - cross-spawn: ^7.0.3 - find-yarn-workspace-root: ^2.0.0 - fs-extra: ^9.0.0 - json-stable-stringify: ^1.0.2 - klaw-sync: ^6.0.0 - minimist: ^1.2.6 - open: ^7.4.2 - rimraf: ^2.6.3 - semver: ^7.5.3 - slash: ^2.0.0 - tmp: ^0.0.33 - yaml: ^2.2.2 - bin: - patch-package: index.js - checksum: d23cddc4d1622e2d8c7ca31b145c6eddb24bd271f69905e766de5e1f199f0b9a5479a6a6939ea857288399d4ed249285639d539a2c00fbddb7daa39934b007a2 - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 - languageName: node - linkType: hard - -"path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 - languageName: node - linkType: hard - -"path-scurry@npm:^1.10.1": - version: 1.10.1 - resolution: "path-scurry@npm:1.10.1" - dependencies: - lru-cache: ^9.1.1 || ^10.0.0 - minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 - checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 - languageName: node - linkType: hard - -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf - languageName: node - linkType: hard - -"prelude-ls@npm:^1.2.1": - version: 1.2.1 - resolution: "prelude-ls@npm:1.2.1" - checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a - languageName: node - linkType: hard - -"prettier@npm:^3.0.3": - version: 3.0.3 - resolution: "prettier@npm:3.0.3" - bin: - prettier: bin/prettier.cjs - checksum: e10b9af02b281f6c617362ebd2571b1d7fc9fb8a3bd17e371754428cda992e5e8d8b7a046e8f7d3e2da1dcd21aa001e2e3c797402ebb6111b5cd19609dd228e0 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: ^2.0.2 - retry: ^0.12.0 - checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 - languageName: node - linkType: hard - -"pstree.remy@npm:^1.1.8": - version: 1.1.8 - resolution: "pstree.remy@npm:1.1.8" - checksum: 5cb53698d6bb34dfb278c8a26957964aecfff3e161af5fbf7cee00bbe9d8547c7aced4bd9cb193bce15fb56e9e4220fc02a5bf9c14345ffb13a36b858701ec2d - languageName: node - linkType: hard - -"punycode@npm:^2.1.0": - version: 2.3.0 - resolution: "punycode@npm:2.3.0" - checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 - languageName: node - linkType: hard - -"readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" - dependencies: - inherits: ^2.0.3 - string_decoder: ^1.1.1 - util-deprecate: ^1.0.1 - checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d - languageName: node - linkType: hard - -"readdirp@npm:~3.6.0": - version: 3.6.0 - resolution: "readdirp@npm:3.6.0" - dependencies: - picomatch: ^2.2.1 - checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 - languageName: node - linkType: hard - -"reporter@workspace:.": - version: 0.0.0-use.local - resolution: "reporter@workspace:." - dependencies: - "@chainsafe/persistent-merkle-tree": ^0.6.1 - "@chainsafe/ssz": ^0.14.0 - "@ethereumjs/rlp": ^5.0.1 - "@ethereumjs/trie": ^6.0.1 - "@ethereumjs/util": ^9.0.1 - "@ethereumjs/vm": ^7.1.0 - "@lodestar/types": ^1.12.0 - "@types/node": ^20.8.9 - "@types/node-cron": ^3.0.9 - "@typescript-eslint/eslint-plugin": ^6.7.5 - "@typescript-eslint/parser": ^6.7.5 - async-mutex: ^0.4.0 - axios: ^1.5.1 - dotenv: ^16.3.1 - eslint: ^8.51.0 - eslint-config-prettier: ^9.0.0 - nodemon: ^3.0.1 - patch-package: ^8.0.0 - prettier: ^3.0.3 - ts-node: ^10.9.2 - typescript: ~5.2.2 - viem: ^1.16.5 - winston: ^3.11.0 - languageName: unknown - linkType: soft - -"resolve-from@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc - languageName: node - linkType: hard - -"rimraf@npm:^2.6.3": - version: 2.7.1 - resolution: "rimraf@npm:2.7.1" - dependencies: - glob: ^7.1.3 - bin: - rimraf: ./bin.js - checksum: cdc7f6eacb17927f2a075117a823e1c5951792c6498ebcce81ca8203454a811d4cf8900314154d3259bb8f0b42ab17f67396a8694a54cae3283326e57ad250cd - languageName: node - linkType: hard - -"rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: ^7.1.3 - bin: - rimraf: bin.js - checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: ^1.2.2 - checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d - languageName: node - linkType: hard - -"rustbn-wasm@npm:^0.2.0": - version: 0.2.0 - resolution: "rustbn-wasm@npm:0.2.0" - dependencies: - "@scure/base": ^1.1.1 - checksum: 9cf89ce88a9d161bce8ea2516b3037fe97e1debb2e9b86d6f3cd133e2c120c844644d37c61c27ae00475e49595a397e61559431875a61c5c52a04c40ba658872 - languageName: node - linkType: hard - -"safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c - languageName: node - linkType: hard - -"safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 - languageName: node - linkType: hard - -"safe-stable-stringify@npm:^2.3.1": - version: 2.4.3 - resolution: "safe-stable-stringify@npm:2.4.3" - checksum: 3aeb64449706ee1f5ad2459fc99648b131d48e7a1fbb608d7c628020177512dc9d94108a5cb61bbc953985d313d0afea6566d243237743e02870490afef04b43 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 - languageName: node - linkType: hard - -"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4": - version: 7.5.4 - resolution: "semver@npm:7.5.4" - dependencies: - lru-cache: ^6.0.0 - bin: - semver: bin/semver.js - checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 - languageName: node - linkType: hard - -"set-function-length@npm:^1.2.1": - version: 1.2.2 - resolution: "set-function-length@npm:1.2.2" - 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 - checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: ^3.0.0 - checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.7": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 - languageName: node - linkType: hard - -"signal-exit@npm:^4.0.1": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 - languageName: node - linkType: hard - -"simple-swizzle@npm:^0.2.2": - version: 0.2.2 - resolution: "simple-swizzle@npm:0.2.2" - dependencies: - is-arrayish: ^0.3.1 - checksum: a7f3f2ab5c76c4472d5c578df892e857323e452d9f392e1b5cf74b74db66e6294a1e1b8b390b519fa1b96b5b613f2a37db6cffef52c3f1f8f3c5ea64eb2d54c0 - languageName: node - linkType: hard - -"simple-update-notifier@npm:^2.0.0": - version: 2.0.0 - resolution: "simple-update-notifier@npm:2.0.0" - dependencies: - semver: ^7.5.3 - checksum: 9ba00d38ce6a29682f64a46213834e4eb01634c2f52c813a9a7b8873ca49cdbb703696f3290f3b27dc067de6d9418b0b84bef22c3eb074acf352529b2d6c27fd - languageName: node - linkType: hard - -"slash@npm:^2.0.0": - version: 2.0.0 - resolution: "slash@npm:2.0.0" - checksum: 512d4350735375bd11647233cb0e2f93beca6f53441015eea241fe784d8068281c3987fbaa93e7ef1c38df68d9c60013045c92837423c69115297d6169aa85e6 - languageName: node - linkType: hard - -"slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^7.0.0": - version: 7.0.0 - resolution: "socks-proxy-agent@npm:7.0.0" - dependencies: - agent-base: ^6.0.2 - debug: ^4.3.3 - socks: ^2.6.2 - checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 - languageName: node - linkType: hard - -"socks@npm:^2.6.2": - version: 2.7.1 - resolution: "socks@npm:2.7.1" - dependencies: - ip: ^2.0.0 - smart-buffer: ^4.2.0 - checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 - languageName: node - linkType: hard - -"ssri@npm:^10.0.0": - version: 10.0.5 - resolution: "ssri@npm:10.0.5" - dependencies: - minipass: ^7.0.3 - checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 - languageName: node - linkType: hard - -"stack-trace@npm:0.0.x": - version: 0.0.10 - resolution: "stack-trace@npm:0.0.10" - checksum: 473036ad32f8c00e889613153d6454f9be0536d430eb2358ca51cad6b95cea08a3cc33cc0e34de66b0dad221582b08ed2e61ef8e13f4087ab690f388362d6610 - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.3": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: ^8.0.0 - is-fullwidth-code-point: ^3.0.0 - strip-ansi: ^6.0.1 - checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb - languageName: node - linkType: hard - -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: ^0.2.0 - emoji-regex: ^9.2.2 - strip-ansi: ^7.0.1 - checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 - languageName: node - linkType: hard - -"string_decoder@npm:^1.1.1": - version: 1.3.0 - resolution: "string_decoder@npm:1.3.0" - dependencies: - safe-buffer: ~5.2.0 - checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 - languageName: node - linkType: hard - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: ^5.0.1 - checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1": - version: 7.1.0 - resolution: "strip-ansi@npm:7.1.0" - dependencies: - ansi-regex: ^6.0.1 - checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d - languageName: node - linkType: hard - -"strip-json-comments@npm:^3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 - languageName: node - linkType: hard - -"supports-color@npm:^5.5.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: ^3.0.0 - checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac - languageName: node - linkType: hard - -"supports-color@npm:^7.1.0": - version: 7.2.0 - resolution: "supports-color@npm:7.2.0" - dependencies: - has-flag: ^4.0.0 - checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a - languageName: node - linkType: hard - -"tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.2.0 - resolution: "tar@npm:6.2.0" - dependencies: - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - minipass: ^5.0.0 - minizlib: ^2.1.1 - mkdirp: ^1.0.3 - yallist: ^4.0.0 - checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c - languageName: node - linkType: hard - -"text-hex@npm:1.0.x": - version: 1.0.0 - resolution: "text-hex@npm:1.0.0" - checksum: 1138f68adc97bf4381a302a24e2352f04992b7b1316c5003767e9b0d3367ffd0dc73d65001ea02b07cd0ecc2a9d186de0cf02f3c2d880b8a522d4ccb9342244a - languageName: node - linkType: hard - -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a - languageName: node - linkType: hard - -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: ~1.0.2 - checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: ^7.0.0 - checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed - languageName: node - linkType: hard - -"touch@npm:^3.1.0": - version: 3.1.0 - resolution: "touch@npm:3.1.0" - dependencies: - nopt: ~1.0.10 - bin: - nodetouch: ./bin/nodetouch.js - checksum: e0be589cb5b0e6dbfce6e7e077d4a0d5f0aba558ef769c6d9c33f635e00d73d5be49da6f8631db302ee073919d82b5b7f56da2987feb28765c95a7673af68647 - languageName: node - linkType: hard - -"triple-beam@npm:^1.3.0": - version: 1.4.1 - resolution: "triple-beam@npm:1.4.1" - checksum: 2e881a3e8e076b6f2b85b9ec9dd4a900d3f5016e6d21183ed98e78f9abcc0149e7d54d79a3f432b23afde46b0885bdcdcbff789f39bc75de796316961ec07f61 - languageName: node - linkType: hard - -"ts-api-utils@npm:^1.0.1": - version: 1.0.3 - resolution: "ts-api-utils@npm:1.0.3" - peerDependencies: - typescript: ">=4.2.0" - checksum: 441cc4489d65fd515ae6b0f4eb8690057add6f3b6a63a36073753547fb6ce0c9ea0e0530220a0b282b0eec535f52c4dfc315d35f8a4c9a91c0def0707a714ca6 - languageName: node - linkType: hard - -"ts-node@npm:^10.9.2": - version: 10.9.2 - resolution: "ts-node@npm:10.9.2" - dependencies: - "@cspotcode/source-map-support": ^0.8.0 - "@tsconfig/node10": ^1.0.7 - "@tsconfig/node12": ^1.0.7 - "@tsconfig/node14": ^1.0.0 - "@tsconfig/node16": ^1.0.2 - acorn: ^8.4.1 - acorn-walk: ^8.1.1 - arg: ^4.1.0 - create-require: ^1.1.0 - diff: ^4.0.1 - make-error: ^1.1.1 - v8-compile-cache-lib: ^3.0.1 - yn: 3.1.1 - peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" - peerDependenciesMeta: - "@swc/core": - optional: true - "@swc/wasm": - optional: true - bin: - ts-node: dist/bin.js - ts-node-cwd: dist/bin-cwd.js - ts-node-esm: dist/bin-esm.js - ts-node-script: dist/bin-script.js - ts-node-transpile-only: dist/bin-transpile.js - ts-script: dist/bin-script-deprecated.js - checksum: fde256c9073969e234526e2cfead42591b9a2aec5222bac154b0de2fa9e4ceb30efcd717ee8bc785a56f3a119bdd5aa27b333d9dbec94ed254bd26f8944c67ac - languageName: node - linkType: hard - -"tslib@npm:2.4.0": - version: 2.4.0 - resolution: "tslib@npm:2.4.0" - checksum: 8c4aa6a3c5a754bf76aefc38026134180c053b7bd2f81338cb5e5ebf96fefa0f417bff221592bf801077f5bf990562f6264fecbc42cd3309b33872cb6fc3b113 - languageName: node - linkType: hard - -"tslib@npm:^2.4.0": - version: 2.6.2 - resolution: "tslib@npm:2.6.2" - checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad - languageName: node - linkType: hard - -"type-check@npm:^0.4.0, type-check@npm:~0.4.0": - version: 0.4.0 - resolution: "type-check@npm:0.4.0" - dependencies: - prelude-ls: ^1.2.1 - checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a - languageName: node - linkType: hard - -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 - languageName: node - linkType: hard - -"typescript@npm:~5.2.2": - version: 5.2.2 - resolution: "typescript@npm:5.2.2" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 7912821dac4d962d315c36800fe387cdc0a6298dba7ec171b350b4a6e988b51d7b8f051317786db1094bd7431d526b648aba7da8236607febb26cf5b871d2d3c - languageName: node - linkType: hard - -"typescript@patch:typescript@~5.2.2#~builtin": - version: 5.2.2 - resolution: "typescript@patch:typescript@npm%3A5.2.2#~builtin::version=5.2.2&hash=f456af" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 07106822b4305de3f22835cbba949a2b35451cad50888759b6818421290ff95d522b38ef7919e70fb381c5fe9c1c643d7dea22c8b31652a717ddbd57b7f4d554 - languageName: node - linkType: hard - -"undefsafe@npm:^2.0.5": - version: 2.0.5 - resolution: "undefsafe@npm:2.0.5" - checksum: f42ab3b5770fedd4ada175fc1b2eb775b78f609156f7c389106aafd231bfc210813ee49f54483d7191d7b76e483bc7f537b5d92d19ded27156baf57592eb02cc - languageName: node - linkType: hard - -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 - languageName: node - linkType: hard - -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" - dependencies: - unique-slug: ^4.0.0 - checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df - languageName: node - linkType: hard - -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" - dependencies: - imurmurhash: ^0.1.4 - checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 - languageName: node - linkType: hard - -"universalify@npm:^2.0.0": - version: 2.0.1 - resolution: "universalify@npm:2.0.1" - checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: ^2.1.0 - checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.1": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 - languageName: node - linkType: hard - -"v8-compile-cache-lib@npm:^3.0.1": - version: 3.0.1 - resolution: "v8-compile-cache-lib@npm:3.0.1" - checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 - languageName: node - linkType: hard - -"viem@npm:^1.16.5": - version: 1.17.1 - resolution: "viem@npm:1.17.1" - dependencies: - "@adraffy/ens-normalize": 1.9.4 - "@noble/curves": 1.2.0 - "@noble/hashes": 1.3.2 - "@scure/bip32": 1.3.2 - "@scure/bip39": 1.2.1 - abitype: 0.9.8 - isows: 1.0.3 - ws: 8.13.0 - peerDependencies: - typescript: ">=5.0.4" - peerDependenciesMeta: - typescript: - optional: true - checksum: 040225bbc4714c2ebaaa9593cc1abad3367ed6c6413b9c3b8cc4dd6478ff788abd7d81afd396facdc468f6c8e7a7411c55234f25ea7cc8f0004923535f5f5411 - languageName: node - linkType: hard - -"which@npm:^2.0.1, which@npm:^2.0.2": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: ^2.0.0 - bin: - node-which: ./bin/node-which - checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 - languageName: node - linkType: hard - -"wide-align@npm:^1.1.5": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: ^1.0.2 || 2 || 3 || 4 - checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 - languageName: node - linkType: hard - -"winston-transport@npm:^4.5.0": - version: 4.6.0 - resolution: "winston-transport@npm:4.6.0" - dependencies: - logform: ^2.3.2 - readable-stream: ^3.6.0 - triple-beam: ^1.3.0 - checksum: 19f06ebdbb57cb14cdd48a23145d418d3bbe538851053303f84f04a8a849bb530b78b1495a175059c1299f92945dc61d5421c4914fee32d9a41bc397d84f26d7 - languageName: node - linkType: hard - -"winston@npm:^3.11.0": - version: 3.11.0 - resolution: "winston@npm:3.11.0" - dependencies: - "@colors/colors": ^1.6.0 - "@dabh/diagnostics": ^2.0.2 - async: ^3.2.3 - is-stream: ^2.0.0 - logform: ^2.4.0 - one-time: ^1.0.0 - readable-stream: ^3.4.0 - safe-stable-stringify: ^2.3.1 - stack-trace: 0.0.x - triple-beam: ^1.3.0 - winston-transport: ^4.5.0 - checksum: ca4454070f7a71b19f53c8c1765c59a013dab220edb49161b2e81917751d3e9edc3382430e4fb050feda04fb8463290ecab7cbc9240ec8d3d3b32a121849bbb0 - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: ^6.1.0 - string-width: ^5.0.1 - strip-ansi: ^7.0.1 - checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 - languageName: node - linkType: hard - -"ws@npm:8.13.0": - version: 8.13.0 - resolution: "ws@npm:8.13.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c - languageName: node - linkType: hard - -"ws@npm:8.5.0": - version: 8.5.0 - resolution: "ws@npm:8.5.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 76f2f90e40344bf18fd544194e7067812fb1372b2a37865678d8f12afe4b478ff2ebc0c7c0aff82cd5e6b66fc43d889eec0f1865c2365d8f7a66d92da7744a77 - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 - languageName: node - linkType: hard - -"yaml@npm:^2.2.2": - version: 2.4.5 - resolution: "yaml@npm:2.4.5" - bin: - yaml: bin.mjs - checksum: f8efd407c07e095f00f3031108c9960b2b12971d10162b1ec19007200f6c987d2e28f73283f4731119aa610f177a3ea03d4a8fcf640600a25de1b74d00c69b3d - languageName: node - linkType: hard - -"yn@npm:3.1.1": - version: 3.1.1 - resolution: "yn@npm:3.1.1" - checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 - languageName: node - linkType: hard From 681a16f5c103149a85d3e3174afd8b39da6dde2d Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Fri, 20 Sep 2024 11:30:54 +0800 Subject: [PATCH 73/81] refactor(reporter,relayer,executor): dockerfile and docker-compose.yml for better monorepo support --- Dockerfile.executor | 30 ------------------------------ Dockerfile.relayer | 30 ------------------------------ docker-compose.yml | 31 ++++++++++++++++--------------- packages/executor/Dockerfile | 23 +++++++++++++++++++++++ packages/relayer/Dockerfile | 23 +++++++++++++++++++++++ packages/reporter/Dockerfile | 2 +- 6 files changed, 63 insertions(+), 76 deletions(-) delete mode 100644 Dockerfile.executor delete mode 100644 Dockerfile.relayer create mode 100644 packages/executor/Dockerfile create mode 100644 packages/relayer/Dockerfile diff --git a/Dockerfile.executor b/Dockerfile.executor deleted file mode 100644 index c3404b9f..00000000 --- a/Dockerfile.executor +++ /dev/null @@ -1,30 +0,0 @@ -FROM node:18-alpine - -WORKDIR /usr/src/app -COPY package.json yarn.lock ./ - -COPY packages/common/package.json ./packages/common/ -COPY packages/executor/package.json ./packages/executor/ - -RUN yarn install --ignore-scripts - -WORKDIR /usr/src/app/packages/common -RUN yarn install --ignore-scripts - -WORKDIR /usr/src/app/packages/executor -RUN yarn install --ignore-scripts - -WORKDIR /usr/src/app - -COPY packages/common/ ./packages/common/ -COPY packages/executor/ ./packages/executor/ - -WORKDIR /usr/src/app/packages/common -RUN yarn compile - - - -WORKDIR /usr/src/app/packages/executor -RUN yarn compile - -CMD ["yarn", "start"] \ No newline at end of file diff --git a/Dockerfile.relayer b/Dockerfile.relayer deleted file mode 100644 index f2d4479a..00000000 --- a/Dockerfile.relayer +++ /dev/null @@ -1,30 +0,0 @@ -FROM node:18-alpine - -WORKDIR /usr/src/app -COPY package.json yarn.lock ./ - -COPY packages/common/package.json ./packages/common/ -COPY packages/relayer/package.json ./packages/relayer/ - -RUN yarn install --ignore-scripts - -WORKDIR /usr/src/app/packages/common -RUN yarn install --ignore-scripts - -WORKDIR /usr/src/app/packages/relayer -RUN yarn install --ignore-scripts - -WORKDIR /usr/src/app - -COPY packages/common/ ./packages/common/ -COPY packages/relayer/ ./packages/relayer/ - -WORKDIR /usr/src/app/packages/common -RUN yarn compile - - - -WORKDIR /usr/src/app/packages/relayer -RUN yarn compile - -CMD ["yarn", "start"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 80025ddb..f19e6bdb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,38 +2,39 @@ version: "3.8" services: mongodb: - image: mongo:latest - container_name: mongodb - ports: - - "27017:27017" - networks: - - mongo-network - volumes: - - mongo-data:/data/db + image: mongo:latest + container_name: mongodb + ports: + - "27017:27017" + networks: + - mongo-network + volumes: + - mongo-data:/data/db - executor: + relayer: build: context: . - dockerfile: Dockerfile.executor - container_name: executor + dockerfile: packages/relayer/Dockerfile + container_name: relayer networks: - mongo-network depends_on: - mongodb - relayer: + executor: build: context: . - dockerfile: Dockerfile.relayer - container_name: hashi-relayer + dockerfile: packages/executor/Dockerfile + container_name: executor networks: - mongo-network depends_on: - mongodb + networks: mongo-network: driver: bridge volumes: mongo-data: - driver: local + driver: local \ No newline at end of file diff --git a/packages/executor/Dockerfile b/packages/executor/Dockerfile new file mode 100644 index 00000000..9c01c83b --- /dev/null +++ b/packages/executor/Dockerfile @@ -0,0 +1,23 @@ +FROM node:18-alpine + +WORKDIR /usr/src/app + +# Copy root package.json and yarn.lock for dependency resolution +COPY ../../package.json ../../yarn.lock ./ + +# Copy both executor and common package folders +COPY ./packages/common ./packages/common +COPY ./packages/executor ./packages/executor + + +# Install dependencies at root level +RUN yarn install + +# Compile both common and executor packages +WORKDIR /usr/src/app/packages/common +RUN yarn compile + +WORKDIR /usr/src/app/packages/executor +RUN yarn compile + +CMD ["yarn", "start"] \ No newline at end of file diff --git a/packages/relayer/Dockerfile b/packages/relayer/Dockerfile new file mode 100644 index 00000000..aec8ea25 --- /dev/null +++ b/packages/relayer/Dockerfile @@ -0,0 +1,23 @@ +FROM node:18-alpine + +WORKDIR /usr/src/app + +# Copy root package.json and yarn.lock for dependency resolution +COPY ../../package.json ../../yarn.lock ./ + +# Copy both executor and common package folders +COPY ./packages/common ./packages/common +COPY ./packages/relayer ./packages/relayer + + +# Install dependencies at root level +RUN yarn install + +# Compile both common and executor packages +WORKDIR /usr/src/app/packages/common +RUN yarn compile + +WORKDIR /usr/src/app/packages/relayer +RUN yarn compile + +CMD ["yarn", "start"] \ No newline at end of file diff --git a/packages/reporter/Dockerfile b/packages/reporter/Dockerfile index b251100d..035d9c21 100644 --- a/packages/reporter/Dockerfile +++ b/packages/reporter/Dockerfile @@ -2,7 +2,7 @@ FROM node:18-alpine WORKDIR /usr/src/app -COPY package.json yarn.lock .env ./ +COPY package.json .env ./ RUN corepack enable && \ corepack prepare --activate yarn@3.2.2 && \ From 77ff55ce812b1f0c4ff494425b84059a7ed29fd3 Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Fri, 20 Sep 2024 07:23:18 +0200 Subject: [PATCH 74/81] chore(reporter): <- makes it to be part of the workspaces --- packages/reporter/package.json | 2 +- yarn.lock | 396 ++++++++++++++++++++++++++++++++- 2 files changed, 391 insertions(+), 7 deletions(-) diff --git a/packages/reporter/package.json b/packages/reporter/package.json index 5d6868a2..b8cfb84f 100644 --- a/packages/reporter/package.json +++ b/packages/reporter/package.json @@ -1,5 +1,6 @@ { "name": "reporter", + "version": "0.1.0", "author": { "name": "gnosis", "url": "https://github.com/gnosis" @@ -12,7 +13,6 @@ "prettier:write": "prettier --write \"**/*.{js,json,md,sol,ts,yml}\"", "start:dev": "nodemon" }, - "packageManager": "yarn@3.2.2", "dependencies": { "@chainsafe/persistent-merkle-tree": "^0.6.1", "@chainsafe/ssz": "^0.14.0", diff --git a/yarn.lock b/yarn.lock index 6ca9774b..3da8cd17 100644 --- a/yarn.lock +++ b/yarn.lock @@ -154,11 +154,54 @@ "@openzeppelin/contracts-upgradeable-4.7.3" "npm:@openzeppelin/contracts-upgradeable@v4.7.3" "@openzeppelin/contracts-v0.7" "npm:@openzeppelin/contracts@v3.4.2" +"@chainsafe/as-sha256@0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.5.0.tgz#2523fbef2b80b5000f9aa71f4a76e5c2c5c076bb" + integrity sha512-dTIY6oUZNdC5yDTVP5Qc9hAlKAsn0QTQ2DnQvvsbTnKSTbYs3p5RPN0aIUqN0liXei/9h24c7V0dkV44cnWIQA== + "@chainsafe/as-sha256@^0.3.1": version "0.3.1" resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== +"@chainsafe/as-sha256@^0.4.1": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.4.2.tgz#21ad1371e2245e430c1a554a05f10d333c6f42cc" + integrity sha512-HJ8GZBRjLeWtRsAXf3EbNsNzmTGpzTFjfpSf4yHkLYC+E52DhT6hwz+7qpj6I/EmFzSUm5tYYvT9K8GZokLQCQ== + +"@chainsafe/hashtree-darwin-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-darwin-arm64/-/hashtree-darwin-arm64-1.0.1.tgz#e2c60090c56a1c8dc8bdff329856184ad32e4cd5" + integrity sha512-+KmEgQMpO7FDL3klAcpXbQ4DPZvfCe0qSaBBrtT4vLF8V1JGm3sp+j7oibtxtOsLKz7nJMiK1pZExi7vjXu8og== + +"@chainsafe/hashtree-linux-arm64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-arm64-gnu/-/hashtree-linux-arm64-gnu-1.0.1.tgz#49d2604a6c9106219448af3eaf76f4da6e44daca" + integrity sha512-p1hnhGq2aFY+Zhdn1Q6L/6yLYNKjqXfn/Pc8jiM0e3+Lf/hB+yCdqYVu1pto26BrZjugCFZfupHaL4DjUTDttw== + +"@chainsafe/hashtree-linux-x64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-x64-gnu/-/hashtree-linux-x64-gnu-1.0.1.tgz#31c5a2bb196b78f04f2bf4bfb5c1bf1f3331f071" + integrity sha512-uCIGuUWuWV0LiB4KLMy6JFa7Jp6NmPl3hKF5BYWu8TzUBe7vSXMZfqTzGxXPggFYN2/0KymfRdG9iDCOJfGRqg== + +"@chainsafe/hashtree@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@chainsafe/hashtree/-/hashtree-1.0.1.tgz#587666a261e1da6a37904095ce875fddc53c7c89" + integrity sha512-bleu9FjqBeR/l6W1u2Lz+HsS0b0LLJX2eUt3hOPBN7VqOhidx8wzkVh2S7YurS+iTQtfdK4K5QU9tcTGNrGwDg== + optionalDependencies: + "@chainsafe/hashtree-darwin-arm64" "1.0.1" + "@chainsafe/hashtree-linux-arm64-gnu" "1.0.1" + "@chainsafe/hashtree-linux-x64-gnu" "1.0.1" + +"@chainsafe/persistent-merkle-tree@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.8.0.tgz#18e2f0a5de3a0b59c6e5be8797a78e0d209dd7dc" + integrity sha512-hh6C1JO6SKlr0QGNTNtTLqgGVMA/Bc20wD6CeMHp+wqbFKCULRJuBUxhF4WDx/7mX8QlqF3nFriF/Eo8oYJ4/A== + dependencies: + "@chainsafe/as-sha256" "0.5.0" + "@chainsafe/hashtree" "1.0.1" + "@noble/hashes" "^1.3.0" + "@chainsafe/persistent-merkle-tree@^0.4.2": version "0.4.2" resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" @@ -173,6 +216,14 @@ dependencies: "@chainsafe/as-sha256" "^0.3.1" +"@chainsafe/persistent-merkle-tree@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.6.1.tgz#37bde25cf6cbe1660ad84311aa73157dc86ec7f2" + integrity sha512-gcENLemRR13+1MED2NeZBMA7FRS0xQPM7L2vhMqvKkjqtFT4YfjSVADq5U0iLuQLhFUJEMVuA8fbv5v+TN6O9A== + dependencies: + "@chainsafe/as-sha256" "^0.4.1" + "@noble/hashes" "^1.3.0" + "@chainsafe/ssz@^0.10.0": version "0.10.2" resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" @@ -181,6 +232,22 @@ "@chainsafe/as-sha256" "^0.3.1" "@chainsafe/persistent-merkle-tree" "^0.5.0" +"@chainsafe/ssz@^0.14.0": + version "0.14.3" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.14.3.tgz#caae48ae2670b2f8b6febed22b0e0619a636f316" + integrity sha512-ldOx4Rk9OC8YMvFdwvHKtRc7KpFRLcXlb9ATCdQ5fHtLT438LRQyxdWFufC9+M8jFHSZcgq31h2BJsSva6sZ0w== + dependencies: + "@chainsafe/as-sha256" "^0.4.1" + "@chainsafe/persistent-merkle-tree" "^0.6.1" + +"@chainsafe/ssz@^0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.17.1.tgz#7986afbcad5e6971006d596fdb7dfa34bc195131" + integrity sha512-1ay46QqYcVTBvUnDXTPTi5WTiENu7tIxpZGMDpUWps1/nYBmh/We/UoCF/jO+o/fkcDD3p8xQPlHbcCfy+jyjA== + dependencies: + "@chainsafe/as-sha256" "0.5.0" + "@chainsafe/persistent-merkle-tree" "0.8.0" + "@chainsafe/ssz@^0.9.2": version "0.9.4" resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" @@ -507,11 +574,113 @@ bufio "^1.0.7" chai "^4.3.4" +"@ethereumjs/block@^5.1.1", "@ethereumjs/block@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-5.3.0.tgz#a22d615f825a3aa123189434263a6c1d43d4ac8f" + integrity sha512-cyphdEB/ywIERqWLRHdAS6muTkAcd6BibMOp6XmGbeWgvtIhe4ArxcMDI78MVstJzT/faihvRI4rKQKy+MpdKQ== + dependencies: + "@ethereumjs/common" "^4.4.0" + "@ethereumjs/rlp" "^5.0.2" + "@ethereumjs/trie" "^6.2.1" + "@ethereumjs/tx" "^5.4.0" + "@ethereumjs/util" "^9.1.0" + ethereum-cryptography "^2.2.1" + +"@ethereumjs/blockchain@^7.1.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-7.3.0.tgz#87049c61b51a0870f3c23b5390b6ff9f3e3ae7f0" + integrity sha512-UZXFb6JFeXDHobKhXGAiKf+m5n2ynCtqpgHWCl2nQ3Tol9W7C3By4UFMpAl2E6EyaFhC26Maig9kqCWxfsQ6bQ== + dependencies: + "@ethereumjs/block" "^5.3.0" + "@ethereumjs/common" "^4.4.0" + "@ethereumjs/ethash" "^3.0.4" + "@ethereumjs/rlp" "^5.0.2" + "@ethereumjs/trie" "^6.2.1" + "@ethereumjs/tx" "^5.4.0" + "@ethereumjs/util" "^9.1.0" + debug "^4.3.3" + ethereum-cryptography "^2.2.1" + lru-cache "10.1.0" + +"@ethereumjs/common@^4.2.0", "@ethereumjs/common@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-4.4.0.tgz#fba41612f527a815bf304e98653d6b5fc5d6d4de" + integrity sha512-Fy5hMqF6GsE6DpYTyqdDIJPJgUtDn4dL120zKw+Pswuo+iLyBsEYuSyzMw6NVzD2vDzcBG9fE4+qX4X2bPc97w== + dependencies: + "@ethereumjs/util" "^9.1.0" + +"@ethereumjs/ethash@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-3.0.4.tgz#663524abbc2f5ef6fa9813067eb33808fd8a0309" + integrity sha512-dDc9h4RxEIWr38DxzeFyWlTmc++WeAFysFT6Ru0opoQ8WSM/hM3KH1VfHMPwx6JaqQT89Q/xtHV3CEvWrbwLKw== + dependencies: + "@ethereumjs/block" "^5.3.0" + "@ethereumjs/rlp" "^5.0.2" + "@ethereumjs/util" "^9.1.0" + bigint-crypto-utils "^3.2.2" + ethereum-cryptography "^2.2.1" + +"@ethereumjs/evm@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/evm/-/evm-2.2.1.tgz#07dd48152bb19277980b295a149b0936d2ff67b3" + integrity sha512-equF3QqssDgfZyVDEoMqJUsMCjO9SwgFdpUTc7yHFOU74X43l/MHM+Cqdey+wcBhdU2yOwD9S2AbW6wh7tDYfQ== + dependencies: + "@ethereumjs/common" "^4.2.0" + "@ethereumjs/statemanager" "^2.2.2" + "@ethereumjs/tx" "^5.2.1" + "@ethereumjs/util" "^9.0.2" + "@types/debug" "^4.1.9" + debug "^4.3.3" + ethereum-cryptography "^2.1.3" + rustbn-wasm "^0.2.0" + "@ethereumjs/rlp@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== +"@ethereumjs/rlp@^5.0.1", "@ethereumjs/rlp@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-5.0.2.tgz#c89bd82f2f3bec248ab2d517ae25f5bbc4aac842" + integrity sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA== + +"@ethereumjs/statemanager@^2.2.2": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/statemanager/-/statemanager-2.4.0.tgz#105feb0653942118758b3522ef05c8901d7924b3" + integrity sha512-IBe5kMGsDWlSvNg7QCERwO3BQE1c9hzVIZ9ktZF7xyifFEfA4VNhTMMEpwLuiAIy0l/ZzZiZ17/Iqar+SawMYA== + dependencies: + "@ethereumjs/common" "^4.4.0" + "@ethereumjs/rlp" "^5.0.2" + "@ethereumjs/trie" "^6.2.1" + "@ethereumjs/util" "^9.1.0" + debug "^4.3.3" + ethereum-cryptography "^2.2.1" + js-sdsl "^4.1.4" + lru-cache "10.1.0" + +"@ethereumjs/trie@^6.0.1", "@ethereumjs/trie@^6.1.1", "@ethereumjs/trie@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/trie/-/trie-6.2.1.tgz#11d3e91ffd7d565f468a62c0e3d7952063991fa9" + integrity sha512-MguABMVi/dPtgagK+SuY57rpXFP+Ghr2x+pBDy+e3VmMqUY+WGzFu1QWjBb5/iJ7lINk4CI2Uwsih07Nu9sTSg== + dependencies: + "@ethereumjs/rlp" "^5.0.2" + "@ethereumjs/util" "^9.1.0" + "@types/readable-stream" "^2.3.13" + debug "^4.3.4" + ethereum-cryptography "^2.2.1" + lru-cache "10.1.0" + readable-stream "^3.6.0" + +"@ethereumjs/tx@^5.2.1", "@ethereumjs/tx@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-5.4.0.tgz#6f47894cc3e2d4e63d87c62b41ed7e8180a1de58" + integrity sha512-SCHnK7m/AouZ7nyoR0MEXw1OO/tQojSbp88t8oxhwes5iZkZCtfFdUrJaiIb72qIpH2FVw6s1k1uP7LXuH7PsA== + dependencies: + "@ethereumjs/common" "^4.4.0" + "@ethereumjs/rlp" "^5.0.2" + "@ethereumjs/util" "^9.1.0" + ethereum-cryptography "^2.2.1" + "@ethereumjs/util@^8.1.0": version "8.1.0" resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" @@ -521,6 +690,31 @@ ethereum-cryptography "^2.0.0" micro-ftch "^0.3.1" +"@ethereumjs/util@^9.0.1", "@ethereumjs/util@^9.0.2", "@ethereumjs/util@^9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-9.1.0.tgz#75e3898a3116d21c135fa9e29886565609129bce" + integrity sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog== + dependencies: + "@ethereumjs/rlp" "^5.0.2" + ethereum-cryptography "^2.2.1" + +"@ethereumjs/vm@^7.1.0": + version "7.2.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-7.2.1.tgz#c53610a8c327aabfdd0a5dedfe32eb3aebb17665" + integrity sha512-exmyhDPlfiBtV/nIPY7gE5iu3QC62F7hf/fALLgQaUS8ezxmJQG2MRaFI1eqYwvsAhfNBfst7K6KcCE4jbGbhw== + dependencies: + "@ethereumjs/block" "^5.1.1" + "@ethereumjs/blockchain" "^7.1.0" + "@ethereumjs/common" "^4.2.0" + "@ethereumjs/evm" "^2.2.1" + "@ethereumjs/rlp" "^5.0.2" + "@ethereumjs/statemanager" "^2.2.2" + "@ethereumjs/trie" "^6.1.1" + "@ethereumjs/tx" "^5.2.1" + "@ethereumjs/util" "^9.0.2" + debug "^4.3.3" + ethereum-cryptography "^2.1.3" + "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" @@ -947,6 +1141,35 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@layerzerolabs/lz-evm-messagelib-v2@^2.3.29": + version "2.3.42" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-evm-messagelib-v2/-/lz-evm-messagelib-v2-2.3.42.tgz#224e8b07940b829fc8955ec97987526da17625fd" + integrity sha512-ugCgAueNzrvp2p8LrNFlv/c5nYhDdZq5gCwJ5UzntniHf9enB4NoE3AxGYgMakh26Uckc2pQRzWlbO8+a6GD5g== + +"@layerzerolabs/lz-evm-oapp-v2@^2.3.29": + version "2.3.42" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-evm-oapp-v2/-/lz-evm-oapp-v2-2.3.42.tgz#0cbb5095a7b7cdd1bca6f7c7cee87c7383723db4" + integrity sha512-TDhM8PGsH4nsKwXdoGDV9/USSJwOEGglsNfCUrpCs8EqkQ7rtlMDOvI60oFEebvOjxKSG9OwCcBFvXwaFf0ORQ== + +"@layerzerolabs/lz-evm-protocol-v2@^2.3.29": + version "2.3.42" + resolved "https://registry.yarnpkg.com/@layerzerolabs/lz-evm-protocol-v2/-/lz-evm-protocol-v2-2.3.42.tgz#171e2332aa83e5d30ebdb64c1b1158d204139153" + integrity sha512-my4tWF57jtwth/oLz3X1hYljPDDZM9wKzU498yk+6FgBtKg6J4uZIUoNh3p3GgUJ+Lde8pVpxqJ5pNchPICxmQ== + +"@lodestar/params@^1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@lodestar/params/-/params-1.22.0.tgz#e2d436da9ceb742e7ae088a6474468e8e8756a1b" + integrity sha512-wbbeQAG+4YOl1ATsSDJnx7wBk5FXsRl2OrmLkMnJXI67wqvRwWk8WQBx7wjx2hnWWrk0in4/8bTtHz3At1GydQ== + +"@lodestar/types@^1.12.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@lodestar/types/-/types-1.22.0.tgz#5178c5edfaefe8875533545d95707957fa59f80a" + integrity sha512-BB0zgiqmIYmpg1ifDJ4VW0Ka2vkdmM7ju7lAQLk1O666iGWLObhfrLzQ+LbZ8/0h+PnjpDMB55MJSffmnqCkGg== + dependencies: + "@chainsafe/ssz" "^0.17.1" + "@lodestar/params" "^1.22.0" + ethereum-cryptography "^2.0.0" + "@metamask/eth-sig-util@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" @@ -965,6 +1188,13 @@ dependencies: sparse-bitfield "^3.0.3" +"@noble/curves@1.2.0", "@noble/curves@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + "@noble/curves@1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.0.tgz#f05771ef64da724997f69ee1261b2417a49522d6" @@ -991,16 +1221,26 @@ resolved "https://registry.yarnpkg.com/@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.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + "@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== -"@noble/hashes@1.5.0", "@noble/hashes@^1.4.0", "@noble/hashes@~1.5.0": +"@noble/hashes@1.5.0", "@noble/hashes@^1.3.0", "@noble/hashes@^1.4.0", "@noble/hashes@~1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.5.0.tgz#abadc5ca20332db2b1b2aa3e496e9af1213570b0" integrity sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA== +"@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + "@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" @@ -1184,6 +1424,21 @@ resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.2.tgz#ec95f23b53cb4e71a1a7091380fa223aad18f156" integrity sha512-vnN1AzxbvpSx9pfdRHbUzTRIXpMLPXnUlkW855VaDk6N1pwRaQ2gNzEmFAABk4lWf11E00PKwFd/q27HuwYrYg== +"@nomicfoundation/hardhat-verify@^2.0.8": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.11.tgz#4ce12b592e01ee93a81933924609c233ed00d951" + integrity sha512-lGIo4dNjVQFdsiEgZp3KP6ntLiF7xJEJsbNHfSyIiFCyI0Yv0518ElsFtMC5uCuHEChiBBMrib9jWQvHHT+X3Q== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^8.1.0" + chalk "^2.4.2" + debug "^4.1.1" + lodash.clonedeep "^4.5.0" + semver "^6.3.0" + table "^6.8.0" + undici "^5.14.0" + "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2": version "0.1.2" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz#3a9c3b20d51360b20affb8f753e756d553d49557" @@ -1317,6 +1572,11 @@ "@openzeppelin/contracts" "^4.4.1" "@openzeppelin/contracts-upgradeable" "^4.7.3" +"@scure/base@^1.1.1", "@scure/base@~1.1.2": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" + integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== + "@scure/base@~1.1.0", "@scure/base@~1.1.6", "@scure/base@~1.1.8": version "1.1.8" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.8.tgz#8f23646c352f020c83bca750a82789e246d42b50" @@ -1331,6 +1591,15 @@ "@noble/secp256k1" "~1.7.0" "@scure/base" "~1.1.0" +"@scure/bip32@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.2.tgz#90e78c027d5e30f0b22c1f8d50ff12f3fb7559f8" + integrity sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA== + dependencies: + "@noble/curves" "~1.2.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.2" + "@scure/bip32@1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" @@ -1348,6 +1617,14 @@ "@noble/hashes" "~1.2.0" "@scure/base" "~1.1.0" +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + "@scure/bip39@1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" @@ -1580,6 +1857,13 @@ dependencies: "@types/node" "*" +"@types/debug@^4.1.9": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + "@types/form-data@0.0.33": version "0.0.33" resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" @@ -1634,6 +1918,16 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.8.tgz#a7eff5816e070c3b4d803f1d3cd780c4e42934a1" integrity sha512-HfMcUmy9hTMJh66VNcmeC9iVErIZJli2bszuXc6julh5YGuRb/W5OnkHjwLNYdFlMis0sY3If5SEAp+PktdJjw== +"@types/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + +"@types/node-cron@^3.0.9": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@types/node-cron/-/node-cron-3.0.11.tgz#70b7131f65038ae63cfe841354c8aba363632344" + integrity sha512-0ikrnug3/IyneSHqCBeslAhlK2aBfYek1fGo4bP4QnZPmiqSGRK+Oy7ZMisLWkesffJvQ1cqAcBnJC+8+nxIAg== + "@types/node@*": version "22.5.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.5.tgz#52f939dd0f65fc552a4ad0b392f3c466cc5d7a44" @@ -1958,6 +2252,11 @@ abbrev@1.0.x: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== +abitype@0.9.8: + version "0.9.8" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.9.8.tgz#1f120b6b717459deafd213dfbf3a3dd1bf10ae8c" + integrity sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ== + abitype@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.5.tgz#29d0daa3eea867ca90f7e4123144c1d1270774b6" @@ -2188,6 +2487,13 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +async-mutex@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.4.1.tgz#bccf55b96f2baf8df90ed798cb5544a1f6ee4c2c" + integrity sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA== + dependencies: + tslib "^2.4.0" + async@1.x: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -2253,7 +2559,7 @@ bigint-buffer@^1.1.5: dependencies: bindings "^1.3.0" -bigint-crypto-utils@^3.0.23: +bigint-crypto-utils@^3.0.23, bigint-crypto-utils@^3.2.2: version "3.3.0" resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== @@ -3106,6 +3412,10 @@ dotenv@^16.0.3, dotenv@^16.3.1: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== +"ds-test@github:dapphub/ds-test": + version "1.0.0" + resolved "https://codeload.github.com/dapphub/ds-test/tar.gz/e282159d5170298eb2455a6c05280ab5a73a4ef0" + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -3413,7 +3723,7 @@ ethereum-cryptography@^1.0.3: "@scure/bip32" "1.1.5" "@scure/bip39" "1.1.1" -ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2, ethereum-cryptography@^2.1.3, ethereum-cryptography@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== @@ -3746,6 +4056,11 @@ follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.15.6: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== +forge-std@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/forge-std/-/forge-std-1.1.2.tgz#f4a0eda103538d56f9c563f3cd1fa2fd01bd9378" + integrity sha512-Wfb0iAS9PcfjMKtGpWQw9mXzJxrWD62kJCUqqLcyuI0+VRtJ3j20XembjF3kS20qELYdXft1vD/SPFVWVKMFOw== + form-data@^2.2.0: version "2.5.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" @@ -4616,6 +4931,11 @@ isomorphic-ws@^4.0.1: resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== +isows@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" + integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== + isows@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.4.tgz#810cd0d90cc4995c26395d2aa4cfa4037ebdf061" @@ -4905,6 +5225,11 @@ lodash.camelcase@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + lodash.isfunction@^3.0.9: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" @@ -5008,6 +5333,11 @@ loupe@^2.3.6: dependencies: get-func-name "^2.0.1" +lru-cache@10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" + integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -5621,7 +5951,7 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== -patch-package@8.0.0: +patch-package@8.0.0, patch-package@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-8.0.0.tgz#d191e2f1b6e06a4624a0116bcb88edd6714ede61" integrity sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA== @@ -6069,6 +6399,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rustbn-wasm@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/rustbn-wasm/-/rustbn-wasm-0.2.0.tgz#0407521fb55ae69eeb4968d01885d63efd1c4ff9" + integrity sha512-FThvYFNTqrEKGqXuseeg0zR7yROh/6U1617mCHF68OVqrN1tNKRN7Tdwy4WayPVsCmmK+eMxtIZX1qL6JxTkMg== + dependencies: + "@scure/base" "^1.1.1" + rustbn.js@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" @@ -6334,6 +6671,14 @@ solhint@^3.3.7: optionalDependencies: prettier "^2.8.3" +solidity-bytes-utils@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/solidity-bytes-utils/-/solidity-bytes-utils-0.8.2.tgz#763d6a02fd093e93b3a97b742e97d540e66c29bd" + integrity sha512-cqXPYAV2auhpdKSTPuqji0CwpSceZDu95CzqSM/9tDJ2MoMaMsdHTpOIWtVw31BIqqGPNmIChCswzbw0tHaMTw== + dependencies: + ds-test "github:dapphub/ds-test" + forge-std "^1.1.2" + solidity-coverage@^0.8.2: version "0.8.13" resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.13.tgz#8eeada2e82ae19d25568368aa782a2baad0e0ce7" @@ -6771,7 +7116,7 @@ ts-generator@^0.1.1: resolve "^1.8.1" ts-essentials "^1.0.0" -ts-node@^10.8.1, ts-node@^10.9.1: +ts-node@^10.8.1, ts-node@^10.9.1, ts-node@^10.9.2: version "10.9.2" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== @@ -6907,6 +7252,11 @@ typescript@^4.9.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@~5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + typical@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" @@ -7001,6 +7351,35 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +viem@2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.20.0.tgz#abff4c2cf733bcc20978e662ea17db117a2881ef" + integrity sha512-cM4vs81HnSNbfceI1MLkx4pCVzbVjl9xiNSv5SCutYjUyFFOVSPDlEyhpg2iHinxx1NM4Qne3END5eLT8rvUdg== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.4.0" + "@noble/hashes" "1.4.0" + "@scure/bip32" "1.4.0" + "@scure/bip39" "1.3.0" + abitype "1.0.5" + isows "1.0.4" + webauthn-p256 "0.0.5" + ws "8.17.1" + +viem@^1.16.5: + version "1.21.4" + resolved "https://registry.yarnpkg.com/viem/-/viem-1.21.4.tgz#883760e9222540a5a7e0339809202b45fe6a842d" + integrity sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@scure/bip32" "1.3.2" + "@scure/bip39" "1.2.1" + abitype "0.9.8" + isows "1.0.3" + ws "8.13.0" + viem@^2.9.28: version "2.21.7" resolved "https://registry.yarnpkg.com/viem/-/viem-2.21.7.tgz#c933fd3adb6f771e5c5fe2b4d7a14d8701ddc32f" @@ -7162,6 +7541,11 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/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.yarnpkg.com/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.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" @@ -7261,4 +7645,4 @@ yocto-queue@^0.1.0: zksync-web3@^0.14.3: version "0.14.4" resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.14.4.tgz#0b70a7e1a9d45cc57c0971736079185746d46b1f" - integrity sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg== \ No newline at end of file + integrity sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg== From c57a4ee76fb2a51429dbedc3c24cfd4bdd3cf44f Mon Sep 17 00:00:00 2001 From: Alessandro Manfredi Date: Fri, 20 Sep 2024 08:07:34 +0200 Subject: [PATCH 75/81] fix(reporter): adds nonce within simulateContract to avoid to generate txs with the same nonce --- .../reporter/src/controllers/StandardReporterController.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/reporter/src/controllers/StandardReporterController.ts b/packages/reporter/src/controllers/StandardReporterController.ts index 4a7fb8b6..345774d3 100644 --- a/packages/reporter/src/controllers/StandardReporterController.ts +++ b/packages/reporter/src/controllers/StandardReporterController.ts @@ -24,6 +24,7 @@ class StandardReporterController extends BaseController { const client = this.multiClient.getClientByChain(this.sourceChain) const blockNumber = _blockNumbers[_blockNumbers.length - 1] + let nonce = await client.getTransactionCount({ address: client.account.address }) for (const chain of this.destinationChains as Chain[]) { if (!this.adapterAddresses[chain.name]) { this.logger.info(`Adapter address is missing for ${chain.name}. Skipping...`) @@ -37,10 +38,12 @@ class StandardReporterController extends BaseController { functionName: "dispatchBlocks", args: [chain.id, this.adapterAddresses[chain.name], [blockNumber]], value: this._reportHeadersValue, + nonce, }) const txHash = await client.writeContract(request) this.logger.info(`headers reporter from ${this.sourceChain.name} to ${chain.name}: ${txHash}`) + nonce += 1 } } catch (_error) { this.logger.error(_error) From e43d664c57ad02b74da179bda90b4be052983b7e Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Fri, 20 Sep 2024 15:20:31 +0800 Subject: [PATCH 76/81] refactor(reporter): update dockerfile and tsconfig.json --- packages/reporter/Dockerfile | 13 ++++++------- packages/reporter/tsconfig.json | 3 ++- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/reporter/Dockerfile b/packages/reporter/Dockerfile index 035d9c21..cdca8796 100644 --- a/packages/reporter/Dockerfile +++ b/packages/reporter/Dockerfile @@ -2,15 +2,14 @@ FROM node:18-alpine WORKDIR /usr/src/app -COPY package.json .env ./ +# Copy root package.json and yarn.lock for dependency resolution +COPY ../../package.json ../../yarn.lock ./ -RUN corepack enable && \ - corepack prepare --activate yarn@3.2.2 && \ - yarn install +COPY ./packages/reporter ./packages/reporter -ADD . /usr/src/app +RUN yarn install -RUN yarn install && \ - yarn compile +WORKDIR /usr/src/app/packages/reporter +RUN yarn compile CMD ["node", "dist/index.js"] \ No newline at end of file diff --git a/packages/reporter/tsconfig.json b/packages/reporter/tsconfig.json index 93d4d790..974c23aa 100644 --- a/packages/reporter/tsconfig.json +++ b/packages/reporter/tsconfig.json @@ -20,7 +20,8 @@ "resolveJsonModule": true, "sourceMap": true, "strict": true, - "target": "ESNext" + "target": "ESNext", + "skipLibCheck": true, }, "exclude": [ "node_modules" From 93f96f520ed1c3d5769145b6f9210814f03da020 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Fri, 20 Sep 2024 19:18:37 +0800 Subject: [PATCH 77/81] chore: rename image names in docker-compose.yml --- docker-compose.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index f19e6bdb..c6d65632 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,21 +11,21 @@ services: volumes: - mongo-data:/data/db - relayer: + hashi_relayer: build: context: . dockerfile: packages/relayer/Dockerfile - container_name: relayer + container_name: hashi_relayer networks: - mongo-network depends_on: - mongodb - executor: + hashi_executor: build: context: . dockerfile: packages/executor/Dockerfile - container_name: executor + container_name: hashi_executor networks: - mongo-network depends_on: From 3c0f4f3eb2b6ad972172a50cd8757d9923df57bb Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Mon, 23 Sep 2024 14:55:00 +0800 Subject: [PATCH 78/81] docs: update README --- docker-compose-reporter.yml | 9 +++++++++ packages/executor/README.md | 33 ++++++++++++++++++++++++++++++++- packages/relayer/README.md | 30 ++++++++++++++++++++++++++++++ packages/reporter/README.md | 14 +++----------- 4 files changed, 74 insertions(+), 12 deletions(-) create mode 100644 docker-compose-reporter.yml diff --git a/docker-compose-reporter.yml b/docker-compose-reporter.yml new file mode 100644 index 00000000..629edff2 --- /dev/null +++ b/docker-compose-reporter.yml @@ -0,0 +1,9 @@ +version: "3.8" + +services: + + hashi_reporter: + build: + context: . + dockerfile: packages/reporter/Dockerfile + container_name: hashi_reporter \ No newline at end of file diff --git a/packages/executor/README.md b/packages/executor/README.md index c9829440..8563752f 100644 --- a/packages/executor/README.md +++ b/packages/executor/README.md @@ -1,6 +1,7 @@ # executor -The Executor is a service utilized to execute messages once they have achieved consensus, meaning when adapters have reached consensus on the message. +The Executor is a service utilized to execute messages once they have achieved consensus, meaning when adapters have +reached consensus on the message.   @@ -9,6 +10,7 @@ The Executor is a service utilized to execute messages once they have achieved c   ## Installation + To install the Executor, follow these steps: ```bash @@ -46,3 +48,32 @@ cd packages/executor yarn start dotenv_config_path="your env file" ``` +### Building and Running the Docker Image + +Executor is usually run with Relayer and MongoDB, the `docker-compose.yml` demonstrates how to run these three images +together. + +Run the following command: + +```sh +cd ../.. # To the root level +docker compose -f docker-compose.yml up -d --build +``` + +### Viewing Logs + +To view the logs from the running container, use: + +```sh +docker logs -f [CONTAINER_ID or CONTAINER_NAME] +``` + +You can find the `CONTAINER_ID` or `CONTAINER_NAME` using `docker ps`. + +### Stopping the relayer + +To stop the running container: + +```sh +docker stop [CONTAINER_ID or CONTAINER_NAME] +``` diff --git a/packages/relayer/README.md b/packages/relayer/README.md index da4019d1..4bdd1fbc 100644 --- a/packages/relayer/README.md +++ b/packages/relayer/README.md @@ -46,3 +46,33 @@ cd packages/relayer ```bash yarn start dotenv_config_path="your env file" ``` + +### Building and Running the Docker Image + +Relayer is usually run with Executor and MongoDB, the `docker-compose.yml` demonstrates how to run these three images +together. + +Run the following command: + +```sh +cd ../.. # To the root level +docker compose -f docker-compose.yml up -d --build +``` + +### Viewing Logs + +To view the logs from the running container, use: + +```sh +docker logs -f [CONTAINER_ID or CONTAINER_NAME] +``` + +You can find the `CONTAINER_ID` or `CONTAINER_NAME` using `docker ps`. + +### Stopping the relayer + +To stop the running container: + +```sh +docker stop [CONTAINER_ID or CONTAINER_NAME] +``` diff --git a/packages/reporter/README.md b/packages/reporter/README.md index 9cb4ab9a..da4b9a2c 100644 --- a/packages/reporter/README.md +++ b/packages/reporter/README.md @@ -16,20 +16,12 @@ These instructions will cover the usage information and how to run the code usin Configure the mode you want to run by editing the variable in `.env` by checking `.env.example` -### Building the Docker Image +### Building and Running the Docker Image -To build the Docker image, run the following command from the root of the project: +On the root, run the following command: ```sh -docker build -t reporter . -``` - -### Running the reporter - -After building the image, you can run it using the following command: - -```sh -docker run -d -p reporter +docker compose -f docker-compose-reporter.yml up -d --build ``` ### Viewing Logs From d21c428053d24146e2c8ac189c68d60e9007fe1c Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Mon, 23 Sep 2024 16:17:18 +0800 Subject: [PATCH 79/81] chore: delete docker-compose-reporter.yml and merge the code into docker-compose.yml --- docker-compose-reporter.yml | 9 --------- docker-compose.yml | 6 ++++++ packages/reporter/README.md | 4 ++-- 3 files changed, 8 insertions(+), 11 deletions(-) delete mode 100644 docker-compose-reporter.yml diff --git a/docker-compose-reporter.yml b/docker-compose-reporter.yml deleted file mode 100644 index 629edff2..00000000 --- a/docker-compose-reporter.yml +++ /dev/null @@ -1,9 +0,0 @@ -version: "3.8" - -services: - - hashi_reporter: - build: - context: . - dockerfile: packages/reporter/Dockerfile - container_name: hashi_reporter \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index c6d65632..6442e186 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -31,6 +31,12 @@ services: depends_on: - mongodb + hashi_reporter: + build: + context: . + dockerfile: packages/reporter/Dockerfile + container_name: hashi_reporter + networks: mongo-network: driver: bridge diff --git a/packages/reporter/README.md b/packages/reporter/README.md index da4b9a2c..3909d9ad 100644 --- a/packages/reporter/README.md +++ b/packages/reporter/README.md @@ -18,10 +18,10 @@ Configure the mode you want to run by editing the variable in `.env` by checking ### Building and Running the Docker Image -On the root, run the following command: +On the root's `docker-compose.yml`, remove all the logic unrelated to reporter, and run the following command: ```sh -docker compose -f docker-compose-reporter.yml up -d --build +docker compose -f docker-compose.yml up -d --build ``` ### Viewing Logs From d464ceb8214435548a135cb7b1bfdfeea864bc37 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Mon, 23 Sep 2024 16:36:02 +0800 Subject: [PATCH 80/81] docs: update README --- packages/executor/README.md | 2 +- packages/relayer/README.md | 2 +- packages/reporter/README.md | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/executor/README.md b/packages/executor/README.md index 8563752f..e0dbc73b 100644 --- a/packages/executor/README.md +++ b/packages/executor/README.md @@ -57,7 +57,7 @@ Run the following command: ```sh cd ../.. # To the root level -docker compose -f docker-compose.yml up -d --build +docker compose up --build mongodb hashi_relayer hashi_executor ``` ### Viewing Logs diff --git a/packages/relayer/README.md b/packages/relayer/README.md index 4bdd1fbc..47befd7a 100644 --- a/packages/relayer/README.md +++ b/packages/relayer/README.md @@ -56,7 +56,7 @@ Run the following command: ```sh cd ../.. # To the root level -docker compose -f docker-compose.yml up -d --build +docker compose up --build mongodb hashi_relayer hashi_executor ``` ### Viewing Logs diff --git a/packages/reporter/README.md b/packages/reporter/README.md index 3909d9ad..68e80f2c 100644 --- a/packages/reporter/README.md +++ b/packages/reporter/README.md @@ -18,10 +18,11 @@ Configure the mode you want to run by editing the variable in `.env` by checking ### Building and Running the Docker Image -On the root's `docker-compose.yml`, remove all the logic unrelated to reporter, and run the following command: +On the root's `docker-compose.yml`, run the following command: ```sh -docker compose -f docker-compose.yml up -d --build +cd ../.. # To the root level +docker-compose up -d --build --no-deps hashi_reporter ``` ### Viewing Logs From 550f4bac034df0cec7e4861c6c2bfab98bf83309 Mon Sep 17 00:00:00 2001 From: zengzengzenghuy Date: Mon, 23 Sep 2024 16:50:39 +0800 Subject: [PATCH 81/81] docs: remove unrelated code in README --- packages/executor/README.md | 2 +- packages/relayer/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/executor/README.md b/packages/executor/README.md index e0dbc73b..0a0d0449 100644 --- a/packages/executor/README.md +++ b/packages/executor/README.md @@ -57,7 +57,7 @@ Run the following command: ```sh cd ../.. # To the root level -docker compose up --build mongodb hashi_relayer hashi_executor +docker compose up --build mongodb hashi_executor ``` ### Viewing Logs diff --git a/packages/relayer/README.md b/packages/relayer/README.md index 47befd7a..812afc57 100644 --- a/packages/relayer/README.md +++ b/packages/relayer/README.md @@ -56,7 +56,7 @@ Run the following command: ```sh cd ../.. # To the root level -docker compose up --build mongodb hashi_relayer hashi_executor +docker compose up --build mongodb hashi_relayer ``` ### Viewing Logs