diff --git a/.gitignore b/.gitignore index 520ce6a..eee2c34 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,11 @@ -.yarn -node_modules \ No newline at end of file +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + +node_modules + +methods/requests.json diff --git a/Makefile b/Makefile index 69824a8..a1fc639 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,16 @@ all-forest-cloud: - k6 cloud run -e K6_TEST_URL=http://localhost:2345/rpc/v1 --local-execution tests/all.js + k6 cloud run -e K6_RPC_URL=http://localhost:2345/rpc/v1 --local-execution tests/all.js all-lotus-cloud: - k6 cloud run -e K6_TEST_URL=http://localhost:1234/rpc/v1 --local-execution tests/all.js + k6 cloud run -e K6_RPC_URL=http://localhost:1234/rpc/v1 --local-execution tests/all.js all-forest-local: - k6 run -e K6_TEST_URL=http://localhost:2345/rpc/v1 tests/all.js + k6 run -e K6_RPC_URL=http://localhost:2345/rpc/v1 tests/all.js all-lotus-local: - k6 run -e K6_TEST_URL=http://localhost:1234/rpc/v1 tests/all.js + k6 run -e K6_RPC_URL=http://localhost:1234/rpc/v1 tests/all.js -.PHONY: all-forest-cloud all-lotus-cloud all-forest-local all-lotus-local +build-requests: + yarn build-requests + +.PHONY: all-forest-cloud all-lotus-cloud all-forest-local all-lotus-local build-requests diff --git a/README.md b/README.md index 24622bd..4269344 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,31 @@ Implementation-agnostic benchmark for RPC This benchmarking suite requires [k6](https://grafana.com/docs/k6/latest/) installed on the host. Follow the instructions for your operating system. Alternatively, you can run them via Docker. +## Methods Definitions + +Before running benchmarks, generate method definitions using the command: + +```bash +K6_RPC_URL=http://localhost:2345/rpc/v1 yarn build-requests +``` + +It will generate real Filecoin and Ethereum JSON-RPC method definitions with up-to-date parameters from live chain state and will store them in the `methods/requests.json` file. +Feel free to adjust parameters manually. + ## Local benchmarks You can run the benchmarks fully locally. To do so, you will need a running Filecoin node; ensure it's synced. -Sample benchmark run: +Benchmark all supported methods: + +```bash +k6 run -e K6_RPC_URL=http://localhost:2345/rpc/v1 tests/all.js --duration 30s --vus 20 +``` + +Single method benchmark: ```bash -k6 run -e K6_TEST_URL=http://localhost:2345/rpc/v1 tests/all.js --duration 30s --vus 20 +k6 run -e K6_RPC_URL=http://localhost:2345/rpc/v1 K6_METHOD=eth_gasPrice tests/single_method.js --duration 30s --vus 20 ``` ## Upload benchmarks to Grafana Cloud @@ -21,7 +38,7 @@ k6 run -e K6_TEST_URL=http://localhost:2345/rpc/v1 tests/all.js --duration 30s - You can create a free account on Grafana Cloud (the free tier should suffice if you run the tests locally). Login with `k6 cloud login --token `. Now, you can run the benchmarks locally but have them uploaded to your Grafana Cloud for visual inspection and comparisons. ```bash -k6 cloud run -e K6_TEST_URL=http://localhost:2345/rpc/v1 --local-execution tests/top5.js +k6 cloud run -e K6_RPC_URL=http://localhost:2345/rpc/v1 --local-execution tests/all.js ``` ## Configuring benchmarks @@ -30,10 +47,11 @@ Read about [k6 options](https://grafana.com/docs/k6/latest/using-k6/k6-options/) ## Environment variables -| Name | Description | Type | Default | -| --------------- | --------------------------- | ---- | ------------------------------ | -| `K6_TEST_URL` | Node RPC endpoint | URL | `http://localhost:2345/rpc/v1` | -| `K6_TEST_DEBUG` | Print additional debug info | bool | false | +| Name | Description | Type | Default | +| --------------- | --------------------------- | ------ | ------------------------------ | +| `K6_RPC_URL` | Node RPC endpoint | URL | `http://localhost:2345/rpc/v1` | +| `K6_METHOD` | Method to benchmark | string | 'eth_gasPrice' | +| `K6_TEST_DEBUG` | Print additional debug info | bool | false | ## Pitfalls diff --git a/methods/.keep b/methods/.keep new file mode 100644 index 0000000..e69de29 diff --git a/methods/index.js b/methods/index.js deleted file mode 100644 index 5345781..0000000 --- a/methods/index.js +++ /dev/null @@ -1,80 +0,0 @@ -// -// The methods here are defined with sample parameters. They are meant to be used on the mainnet and might not work on other networks. -// Also, some of the parameters might stop working at some point. More refinement is needed to make them more robust. -// - -export const filecoinChainHead = { - name: "Filecoin.ChainHead", - params: [], -}; - -export const filecoinStateMinerPower = { - name: "Filecoin.StateMinerPower", - params: ["t01000", []], -}; - -export const filecoinStateMinerInfo = { - name: "Filecoin.StateMinerInfo", - params: ["t01000", []], -}; - -export const filecoinStateMarketStorageDeal = { - name: "Filecoin.StateMarketStorageDeal", - params: [109704581, []], -}; - -export const ethChainId = { - name: "eth_chainId", - params: [], -}; - -export const ethCall = { - name: "eth_call", - params: [ - { - data: "0xf8b2cb4f000000000000000000000000cbff24ded1ce6b53712078759233ac8f91ea71b6", - from: null, - gas: "0x0", - gasPrice: "0x0", - to: "0x0c1d86d34e469770339b53613f3a2343accd62cb", - value: "0x0", - }, - "latest", - ], -}; - -export const ethGasPrice = { - name: "eth_gasPrice", - params: [], -}; - -export const ethGetBalance = { - name: "eth_getBalance", - params: ["0x6743938A48fC8799A5608EF079C53f3cF3B84398", "latest"], -}; - -// -// Groupings of methods. Either arbitrary or based on data shared by RPC providers. -// - -// All methods we have implemented in test scripts so far. -export const allMethods = [ - filecoinChainHead, - filecoinStateMinerPower, - filecoinStateMinerInfo, - filecoinStateMarketStorageDeal, - ethChainId, - ethCall, - ethGasPrice, - ethGetBalance, -]; - -// The top 5 methods according to Hubert's metal die roll. -export const top5Methods = [ - filecoinChainHead, - ethCall, - ethChainId, - ethGetBalance, - // should be `ChainNotify`, but it's a subscription method, so it's tricky to test - filecoinStateMinerPower, -]; diff --git a/package.json b/package.json index a44ae69..3279770 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,16 @@ "scripts": { "js-lint": "eslint '**/*.js'", "js-fmt": "prettier --write '**/*.js'", - "js-fmt-check": "prettier --check '**/*.js'" + "js-fmt-check": "prettier --check '**/*.js'", + "build-requests": "node ./scripts/build_requests.js" }, "keywords": [], + "type": "module", "author": "", "license": "MIT", "description": "", "devDependencies": { + "@chainsafe/filecoin-requests-builder": "^0.1.0", "@eslint/js": "^9.22.0", "@types/k6": "^0.57.1", "eslint": "^9.22.0", diff --git a/scripts/build_requests.js b/scripts/build_requests.js new file mode 100644 index 0000000..9de438c --- /dev/null +++ b/scripts/build_requests.js @@ -0,0 +1,15 @@ +import { buildRequests, fetchRpcContext } from '@chainsafe/filecoin-requests-builder'; +import fs from 'fs'; + +const url = process.env.K6_RPC_URL || "http://localhost:2345/rpc/v1"; + +try { + const context = await fetchRpcContext(url); + const requests = buildRequests(context); + + fs.writeFileSync('methods/requests.json', JSON.stringify(requests, null, 2)); + console.log('Successfully generated methods/requests.json'); +} catch (error) { + console.error('Failed to generate requests:', error.message); + process.exit(1); +} diff --git a/tests/all.js b/tests/all.js index 96be773..7cce5a7 100644 --- a/tests/all.js +++ b/tests/all.js @@ -1,17 +1,21 @@ -import http from "k6/http"; - -import { allMethods } from "../methods/index.js"; import { sendRpcRequest, assertSuccess } from "../utils/rpc.js"; import { regularBenchmarkParams } from "../utils/benchmark_params.js"; +import { loadRequests } from '../utils/loadRequests.js'; -const url = __ENV.K6_TEST_URL || "http://localhost:2345/rpc/v1"; +const url = __ENV.K6_RPC_URL || "http://localhost:2345/rpc/v1"; export let options = regularBenchmarkParams; +const requests = loadRequests(); // the function that will be executed for each VU (virtual user) export default function () { - for (const method of allMethods) { - const response = sendRpcRequest(url, method); - assertSuccess(response); + try { + for (const [method, { params }] of Object.entries(requests)) { + const response = sendRpcRequest(url, method, params); + assertSuccess(response); + } + } catch (error) { + console.error('Error processing requests:', error.message); + throw error; } } diff --git a/tests/gas_price.js b/tests/gas_price.js deleted file mode 100644 index 9c16301..0000000 --- a/tests/gas_price.js +++ /dev/null @@ -1,16 +0,0 @@ -import { check } from "k6"; -import http from "k6/http"; - -import { ethChainId, ethGasPrice } from "../methods/index.js"; -import { assertSuccess, sendRpcRequest } from "../utils/rpc.js"; -import { regularBenchmarkParams } from "../utils/benchmark_params.js"; - -const url = __ENV.K6_TEST_URL || "http://localhost:2345/rpc/v1"; - -export let options = regularBenchmarkParams; - -// the function that will be executed for each VU (virtual user) -export default function () { - const response = sendRpcRequest(url, ethGasPrice); - assertSuccess(response); -} diff --git a/tests/single_method.js b/tests/single_method.js new file mode 100644 index 0000000..0bc5ca8 --- /dev/null +++ b/tests/single_method.js @@ -0,0 +1,24 @@ +import { assertSuccess, sendRpcRequest } from "../utils/rpc.js"; +import { regularBenchmarkParams } from "../utils/benchmark_params.js"; +import { loadRequests } from '../utils/loadRequests.js'; + +const url = __ENV.K6_RPC_URL || "http://localhost:2345/rpc/v1"; +const method = __ENV.K6_METHOD || "eth_gasPrice"; + +export let options = regularBenchmarkParams; +const requests = loadRequests(); + +// the function that will be executed for each VU (virtual user) +export default function () { + try { + if (!requests[method]) { + throw new Error(`Method ${method} is not supported`); + } + + const response = sendRpcRequest(url, method, requests[method].params); + assertSuccess(response); + } catch (error) { + console.error('Error processing requests:', error.message); + throw error; + } +} diff --git a/tests/top5.js b/tests/top5.js deleted file mode 100644 index 503b02e..0000000 --- a/tests/top5.js +++ /dev/null @@ -1,18 +0,0 @@ -import { check } from "k6"; -import http from "k6/http"; - -import { top5Methods } from "../methods/index.js"; -import { assertSuccess, sendRpcRequest } from "../utils/rpc.js"; -import { regularBenchmarkParams } from "../utils/benchmark_params.js"; - -const url = __ENV.K6_TEST_URL || "http://localhost:2345/rpc/v1"; - -export let options = regularBenchmarkParams; - -// the function that will be executed for each VU (virtual user) -export default function () { - for (const method of top5Methods) { - const response = sendRpcRequest(url, method); - assertSuccess(response); - } -} diff --git a/utils/loadRequests.js b/utils/loadRequests.js new file mode 100644 index 0000000..8bf1344 --- /dev/null +++ b/utils/loadRequests.js @@ -0,0 +1,28 @@ +export function loadRequests(path = '../methods/requests.json') { + const resolvedPath = import.meta.resolve(path); + try { + return JSON.parse(open(resolvedPath)); + } catch (err) { + if (err instanceof Error && err.message.includes('no such file or directory')) { + console.error(` +❌ Missing file: ${resolvedPath} + +To generate this file, run: + K6_RPC_URL=http://localhost:2345/rpc/v1 yarn build-requests + +Replace 'http://localhost:2345/rpc/v1' with your actual RPC URL if different. +`); + } else { + console.error(` +❌ Error reading ${resolvedPath}: ${err.message} + +To re-generate this file, run: + K6_RPC_URL=http://localhost:2345/rpc/v1 yarn build-requests + +Replace 'http://localhost:2345/rpc/v1' with your actual RPC URL if different. +`); + } + + throw err; + } +} diff --git a/utils/rpc.js b/utils/rpc.js index a812717..f0b9a0c 100644 --- a/utils/rpc.js +++ b/utils/rpc.js @@ -1,11 +1,11 @@ import http from "k6/http"; import { check } from "k6"; -export function sendRpcRequest(url, method) { +export function sendRpcRequest(url, method, params) { const payload = JSON.stringify({ jsonrpc: "2.0", - method: method.name, - params: method.params, + method: method, + params: params, id: 2, }); const headers = { @@ -15,11 +15,11 @@ export function sendRpcRequest(url, method) { // Note: the tag is used to identify the request in the results, given all requests are hitting the same endpoint. const response = http.post(url, payload, { headers, - tags: { name: method.name }, + tags: { name: method }, }); if (__ENV.K6_TEST_DEBUG === "true" || __ENV.K6_TEST_DEBUG === "1") { - console.log(`Response for ${method.name}: ${response.body}`); + console.log(`Response for ${method}: ${response.body}`); } return response; diff --git a/yarn.lock b/yarn.lock index 84b97c8..acb2a20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,14 +5,21 @@ __metadata: version: 8 cacheKey: 10c0 +"@chainsafe/filecoin-requests-builder@npm:^0.1.0": + version: 0.1.1 + resolution: "@chainsafe/filecoin-requests-builder@npm:0.1.1" + checksum: 10c0/3ad2a71db80687cb9e4c7054f3825f62ceda7e85208c8b91373f5b4d2cf853b460c8af88e23547ecd71b23ee69302ba7c9ef54e6ac9201d11aa18b2107ebb300 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0": - version: 4.5.1 - resolution: "@eslint-community/eslint-utils@npm:4.5.1" + version: 4.7.0 + resolution: "@eslint-community/eslint-utils@npm:4.7.0" dependencies: eslint-visitor-keys: "npm:^3.4.3" peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10c0/b520ae1b7bd04531a5c5da2021071815df4717a9f7d13720e3a5ddccf5c9c619532039830811fcbae1c2f1c9d133e63af2435ee69e0fc0fabbd6d928c6800fb2 + checksum: 10c0/c0f4f2bd73b7b7a9de74b716a664873d08ab71ab439e51befe77d61915af41a81ecec93b408778b3a7856185244c34c2c8ee28912072ec14def84ba2dec70adf languageName: node linkType: hard @@ -23,36 +30,36 @@ __metadata: languageName: node linkType: hard -"@eslint/config-array@npm:^0.19.2": - version: 0.19.2 - resolution: "@eslint/config-array@npm:0.19.2" +"@eslint/config-array@npm:^0.21.0": + version: 0.21.0 + resolution: "@eslint/config-array@npm:0.21.0" dependencies: "@eslint/object-schema": "npm:^2.1.6" debug: "npm:^4.3.1" minimatch: "npm:^3.1.2" - checksum: 10c0/dd68da9abb32d336233ac4fe0db1e15a0a8d794b6e69abb9e57545d746a97f6f542496ff9db0d7e27fab1438546250d810d90b1904ac67677215b8d8e7573f3d + checksum: 10c0/0ea801139166c4aa56465b309af512ef9b2d3c68f9198751bbc3e21894fe70f25fbf26e1b0e9fffff41857bc21bfddeee58649ae6d79aadcd747db0c5dca771f languageName: node linkType: hard -"@eslint/config-helpers@npm:^0.1.0": - version: 0.1.0 - resolution: "@eslint/config-helpers@npm:0.1.0" - checksum: 10c0/3562b5325f42740fc83b0b92b7d13a61b383f8db064915143eec36184f09a09fad73eca6c2955ab6c248b0d04fa03c140f9af2f2c4c06770781a6b79f300a01e +"@eslint/config-helpers@npm:^0.3.0": + version: 0.3.0 + resolution: "@eslint/config-helpers@npm:0.3.0" + checksum: 10c0/013ae7b189eeae8b30cc2ee87bc5c9c091a9cd615579003290eb28bebad5d78806a478e74ba10b3fe08ed66975b52af7d2cd4b4b43990376412b14e5664878c8 languageName: node linkType: hard -"@eslint/core@npm:^0.12.0": - version: 0.12.0 - resolution: "@eslint/core@npm:0.12.0" +"@eslint/core@npm:^0.15.0, @eslint/core@npm:^0.15.1": + version: 0.15.1 + resolution: "@eslint/core@npm:0.15.1" dependencies: "@types/json-schema": "npm:^7.0.15" - checksum: 10c0/d032af81195bb28dd800c2b9617548c6c2a09b9490da3c5537fd2a1201501666d06492278bb92cfccac1f7ac249e58601dd87f813ec0d6a423ef0880434fa0c3 + checksum: 10c0/abaf641940776638b8c15a38d99ce0dac551a8939310ec81b9acd15836a574cf362588eaab03ab11919bc2a0f9648b19ea8dee33bf12675eb5b6fd38bda6f25e languageName: node linkType: hard -"@eslint/eslintrc@npm:^3.3.0": - version: 3.3.0 - resolution: "@eslint/eslintrc@npm:3.3.0" +"@eslint/eslintrc@npm:^3.3.1": + version: 3.3.1 + resolution: "@eslint/eslintrc@npm:3.3.1" dependencies: ajv: "npm:^6.12.4" debug: "npm:^4.3.2" @@ -63,14 +70,14 @@ __metadata: js-yaml: "npm:^4.1.0" minimatch: "npm:^3.1.2" strip-json-comments: "npm:^3.1.1" - checksum: 10c0/215de990231b31e2fe6458f225d8cea0f5c781d3ecb0b7920703501f8cd21b3101fc5ef2f0d4f9a38865d36647b983e0e8ce8bf12fd2bcdd227fc48a5b1a43be + checksum: 10c0/b0e63f3bc5cce4555f791a4e487bf999173fcf27c65e1ab6e7d63634d8a43b33c3693e79f192cbff486d7df1be8ebb2bd2edc6e70ddd486cbfa84a359a3e3b41 languageName: node linkType: hard -"@eslint/js@npm:9.22.0, @eslint/js@npm:^9.22.0": - version: 9.22.0 - resolution: "@eslint/js@npm:9.22.0" - checksum: 10c0/5bcd009bb579dc6c6ed760703bdd741e08a48cd9decd677aa2cf67fe66236658cb09a00185a0369f3904e5cffba9e6e0f2ff4d9ba4fdf598fcd81d34c49213a5 +"@eslint/js@npm:9.32.0, @eslint/js@npm:^9.22.0": + version: 9.32.0 + resolution: "@eslint/js@npm:9.32.0" + checksum: 10c0/f71e8f9146638d11fb15238279feff98801120a4d4130f1c587c4f09b024ff5ec01af1ba88e97ba6b7013488868898a668f77091300cc3d4394c7a8ed32d2667 languageName: node linkType: hard @@ -81,13 +88,13 @@ __metadata: languageName: node linkType: hard -"@eslint/plugin-kit@npm:^0.2.7": - version: 0.2.7 - resolution: "@eslint/plugin-kit@npm:0.2.7" +"@eslint/plugin-kit@npm:^0.3.4": + version: 0.3.4 + resolution: "@eslint/plugin-kit@npm:0.3.4" dependencies: - "@eslint/core": "npm:^0.12.0" + "@eslint/core": "npm:^0.15.1" levn: "npm:^0.4.1" - checksum: 10c0/0a1aff1ad63e72aca923217e556c6dfd67d7cd121870eb7686355d7d1475d569773528a8b2111b9176f3d91d2ea81f7413c34600e8e5b73d59e005d70780b633 + checksum: 10c0/64331ca100f62a0115d10419a28059d0f377e390192163b867b9019517433d5073d10b4ec21f754fa01faf832aceb34178745924baab2957486f8bf95fd628d2 languageName: node linkType: hard @@ -123,16 +130,16 @@ __metadata: linkType: hard "@humanwhocodes/retry@npm:^0.4.2": - version: 0.4.2 - resolution: "@humanwhocodes/retry@npm:0.4.2" - checksum: 10c0/0235525d38f243bee3bf8b25ed395fbf957fb51c08adae52787e1325673071abe856c7e18e530922ed2dd3ce12ed82ba01b8cee0279ac52a3315fcdc3a69ef0c + version: 0.4.3 + resolution: "@humanwhocodes/retry@npm:0.4.3" + checksum: 10c0/3775bb30087d4440b3f7406d5a057777d90e4b9f435af488a4923ef249e93615fb78565a85f173a186a076c7706a81d0d57d563a2624e4de2c5c9c66c486ce42 languageName: node linkType: hard "@types/estree@npm:^1.0.6": - version: 1.0.6 - resolution: "@types/estree@npm:1.0.6" - checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 languageName: node linkType: hard @@ -159,12 +166,12 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.14.0": - version: 8.14.1 - resolution: "acorn@npm:8.14.1" +"acorn@npm:^8.15.0": + version: 8.15.0 + resolution: "acorn@npm:8.15.0" bin: acorn: bin/acorn - checksum: 10c0/dbd36c1ed1d2fa3550140000371fcf721578095b18777b85a79df231ca093b08edc6858d75d6e48c73e431c174dcf9214edbd7e6fa5911b93bd8abfa54e47123 + checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec languageName: node linkType: hard @@ -204,12 +211,12 @@ __metadata: linkType: hard "brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" + version: 1.1.12 + resolution: "brace-expansion@npm:1.1.12" dependencies: balanced-match: "npm:^1.0.0" concat-map: "npm:0.0.1" - checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + checksum: 10c0/975fecac2bb7758c062c20d0b3b6288c7cc895219ee25f0a64a9de662dbac981ff0b6e89909c3897c1f84fa353113a721923afdec5f8b2350255b097f12b1f73 languageName: node linkType: hard @@ -265,14 +272,14 @@ __metadata: linkType: hard "debug@npm:^4.3.1, debug@npm:^4.3.2": - version: 4.4.0 - resolution: "debug@npm:4.4.0" + version: 4.4.1 + resolution: "debug@npm:4.4.1" dependencies: ms: "npm:^2.1.3" peerDependenciesMeta: supports-color: optional: true - checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de + checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 languageName: node linkType: hard @@ -290,13 +297,13 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^8.3.0": - version: 8.3.0 - resolution: "eslint-scope@npm:8.3.0" +"eslint-scope@npm:^8.4.0": + version: 8.4.0 + resolution: "eslint-scope@npm:8.4.0" dependencies: esrecurse: "npm:^4.3.0" estraverse: "npm:^5.2.0" - checksum: 10c0/23bf54345573201fdf06d29efa345ab508b355492f6c6cc9e2b9f6d02b896f369b6dd5315205be94b8853809776c4d13353b85c6b531997b164ff6c3328ecf5b + checksum: 10c0/407f6c600204d0f3705bd557f81bd0189e69cd7996f408f8971ab5779c0af733d1af2f1412066b40ee1588b085874fc37a2333986c6521669cdbdd36ca5058e0 languageName: node linkType: hard @@ -307,25 +314,25 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^4.2.0": - version: 4.2.0 - resolution: "eslint-visitor-keys@npm:4.2.0" - checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269 +"eslint-visitor-keys@npm:^4.2.1": + version: 4.2.1 + resolution: "eslint-visitor-keys@npm:4.2.1" + checksum: 10c0/fcd43999199d6740db26c58dbe0c2594623e31ca307e616ac05153c9272f12f1364f5a0b1917a8e962268fdecc6f3622c1c2908b4fcc2e047a106fe6de69dc43 languageName: node linkType: hard "eslint@npm:^9.22.0": - version: 9.22.0 - resolution: "eslint@npm:9.22.0" + version: 9.32.0 + resolution: "eslint@npm:9.32.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.12.1" - "@eslint/config-array": "npm:^0.19.2" - "@eslint/config-helpers": "npm:^0.1.0" - "@eslint/core": "npm:^0.12.0" - "@eslint/eslintrc": "npm:^3.3.0" - "@eslint/js": "npm:9.22.0" - "@eslint/plugin-kit": "npm:^0.2.7" + "@eslint/config-array": "npm:^0.21.0" + "@eslint/config-helpers": "npm:^0.3.0" + "@eslint/core": "npm:^0.15.0" + "@eslint/eslintrc": "npm:^3.3.1" + "@eslint/js": "npm:9.32.0" + "@eslint/plugin-kit": "npm:^0.3.4" "@humanfs/node": "npm:^0.16.6" "@humanwhocodes/module-importer": "npm:^1.0.1" "@humanwhocodes/retry": "npm:^0.4.2" @@ -336,9 +343,9 @@ __metadata: cross-spawn: "npm:^7.0.6" debug: "npm:^4.3.2" escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^8.3.0" - eslint-visitor-keys: "npm:^4.2.0" - espree: "npm:^10.3.0" + eslint-scope: "npm:^8.4.0" + eslint-visitor-keys: "npm:^4.2.1" + espree: "npm:^10.4.0" esquery: "npm:^1.5.0" esutils: "npm:^2.0.2" fast-deep-equal: "npm:^3.1.3" @@ -360,18 +367,18 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 10c0/7b5ab6f2365971c16efe97349565f75d8343347562fb23f12734c6ab2cd5e35301373a0d51e194789ddcfdfca21db7b62ff481b03d524b8169896c305b65ff48 + checksum: 10c0/e8a23924ec5f8b62e95483002ca25db74e25c23bd9c6d98a9f656ee32f820169bee3bfdf548ec728b16694f198b3db857d85a49210ee4a035242711d08fdc602 languageName: node linkType: hard -"espree@npm:^10.0.1, espree@npm:^10.3.0": - version: 10.3.0 - resolution: "espree@npm:10.3.0" +"espree@npm:^10.0.1, espree@npm:^10.4.0": + version: 10.4.0 + resolution: "espree@npm:10.4.0" dependencies: - acorn: "npm:^8.14.0" + acorn: "npm:^8.15.0" acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462 + eslint-visitor-keys: "npm:^4.2.1" + checksum: 10c0/c63fe06131c26c8157b4083313cb02a9a54720a08e21543300e55288c40e06c3fc284bdecf108d3a1372c5934a0a88644c98714f38b6ae8ed272b40d9ea08d6b languageName: node linkType: hard @@ -481,9 +488,9 @@ __metadata: linkType: hard "globals@npm:^16.0.0": - version: 16.0.0 - resolution: "globals@npm:16.0.0" - checksum: 10c0/8906d5f01838df64a81d6c2a7b7214312e2216cf65c5ed1546dc9a7d0febddf55ffa906cf04efd5b01eec2534d6f14859a89535d1a68241832810e41ef3fd5bb + version: 16.3.0 + resolution: "globals@npm:16.3.0" + checksum: 10c0/c62dc20357d1c0bf2be4545d6c4141265d1a229bf1c3294955efb5b5ef611145391895e3f2729f8603809e81b30b516c33e6c2597573844449978606aad6eb38 languageName: node linkType: hard @@ -577,6 +584,7 @@ __metadata: version: 0.0.0-use.local resolution: "k6-forest@workspace:." dependencies: + "@chainsafe/filecoin-requests-builder": "npm:^0.1.0" "@eslint/js": "npm:^9.22.0" "@types/k6": "npm:^0.57.1" eslint: "npm:^9.22.0" @@ -706,11 +714,11 @@ __metadata: linkType: hard "prettier@npm:^3.5.3": - version: 3.5.3 - resolution: "prettier@npm:3.5.3" + version: 3.6.2 + resolution: "prettier@npm:3.6.2" bin: prettier: bin/prettier.cjs - checksum: 10c0/3880cb90b9dc0635819ab52ff571518c35bd7f15a6e80a2054c05dbc8a3aa6e74f135519e91197de63705bcb38388ded7e7230e2178432a1468005406238b877 + checksum: 10c0/488cb2f2b99ec13da1e50074912870217c11edaddedeadc649b1244c749d15ba94e846423d062e2c4c9ae683e2d65f754de28889ba06e697ac4f988d44f45812 languageName: node linkType: hard