From 40606103d5f4bd9af15f392b3af487863d4265b5 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Wed, 8 Nov 2023 22:23:22 -0500 Subject: [PATCH 01/15] add data stress test --- package.json | 1 + scripts/gen_accounts.js | 2 +- scripts/geth_binary.sh | 8 ++--- scripts/stressTests/data/index.js | 53 +++++++++++++++++++++++++++++++ scripts/stressTests/data/start.sh | 13 ++++++++ 5 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 scripts/stressTests/data/index.js create mode 100755 scripts/stressTests/data/start.sh diff --git a/package.json b/package.json index c136d147f66..e26fca8e303 100644 --- a/package.json +++ b/package.json @@ -84,6 +84,7 @@ "test:blackbox:geth:ws": "yarn pre-blackbox && yarn geth:start:background && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:geth:ws --stream && yarn post-blackbox:geth", "test:blackbox:infura:http": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:http --stream && yarn post-blackbox", "test:blackbox:infura:ws": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:ws --stream && yarn post-blackbox", + "test:stress:data": "scripts/stressTests/data/start.sh", "husky:install": "husky install", "husky:uninstall": "husky uninstall", "postinstall": "yarn build", diff --git a/scripts/gen_accounts.js b/scripts/gen_accounts.js index b67519a702e..676c3c2d2db 100644 --- a/scripts/gen_accounts.js +++ b/scripts/gen_accounts.js @@ -33,7 +33,7 @@ const addAccount = async (address, privateKey) => { from: mainAcc, to: address, gas: 1500000, - value: '1000000000000000000', + value: '100000000000000000000', }); }; diff --git a/scripts/geth_binary.sh b/scripts/geth_binary.sh index 59f9bfecaea..d2f9eedf79e 100755 --- a/scripts/geth_binary.sh +++ b/scripts/geth_binary.sh @@ -59,12 +59,12 @@ start() { download if [ -z "${ORIGARGS[1]}" ]; then echo "Starting geth..." - echo "geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 " - ${TMP_FOLDER}/geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --rpc.enabledeprecatedpersonal + echo "geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --dev.gaslimit 9000000000000000 --rpc.txfeecap=1000000" + ${TMP_FOLDER}/geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --dev.gaslimit 9000000000000000 --rpc.txfeecap=1000000 --rpc.enabledeprecatedpersonal else echo "Starting geth..." - echo "geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 &>/dev/null &" - ${TMP_FOLDER}/geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --rpc.enabledeprecatedpersonal &>/dev/null & + echo "geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --dev.gaslimit 9000000000000000 --rpc.txfeecap=1000000 &>/dev/null &" + ${TMP_FOLDER}/geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --dev.gaslimit 9000000000000000 --rpc.txfeecap=1000000 --rpc.enabledeprecatedpersonal &>/dev/null & echo "Waiting for geth..." npx wait-port -t 10000 "$WEB3_SYSTEM_TEST_PORT" fi diff --git a/scripts/stressTests/data/index.js b/scripts/stressTests/data/index.js new file mode 100644 index 00000000000..840e08d8367 --- /dev/null +++ b/scripts/stressTests/data/index.js @@ -0,0 +1,53 @@ +const { Web3 } = require('../../../packages/web3'); +const { IpcProvider } = require('../../../packages/web3-providers-ipc'); +const accounts = require('../../accounts.json'); +const contractData = require('../../../fixtures/build/Basic.json'); + +const DATA_AMOUNT = 50 * 1024; // 50 kB + +const sendAndGetData = async (web3, i) => { + const sendOptions = { from: accounts[i].address }; + const deployOptions = { + data: contractData.evm.bytecode.object, + arguments: [123, ''], + gasPrice: await web3.eth.getGasPrice(), + gas: BigInt(9000000000000), + gasLimit: BigInt(9000000000000), + type: BigInt(0), + }; + const c = new web3.eth.Contract(contractData.abi); + const contract = await c.deploy(deployOptions).send(sendOptions); + + console.time(`Send huge data [${i}]`); + const receipt = await contract.methods + .setValues(1, 'A'.repeat(DATA_AMOUNT), true) + .send({ from: accounts[i].address }); + console.timeLog(`Send huge data [${i}]`, receipt.transactionHash); + + console.time(`Get huge data [${i}]`); + await contract.methods.getStringValue().call(); + console.timeLog(`Get huge data [${i}]`); +}; + +const test = async () => { + const providerString = process.env.WEB3_SYSTEM_TEST_PROVIDER; + console.log(`Start test with provider: ${providerString}`); + const provider = providerString.includes('ipc') + ? new IpcProvider(providerString) + : new Web3.providers.WebsocketProvider(providerString); + const web3 = new Web3(provider); + + for (const a of accounts) { + const acc = web3.eth.accounts.privateKeyToAccount(a.privateKey); + web3.eth.accounts.wallet.add(acc); + } + + const prs = []; + for (let i = 0; i < 15; i++) { + prs.push(sendAndGetData(web3, i)); + } + await Promise.all(prs); + web3.provider.disconnect(); +}; + +test().catch(console.error); diff --git a/scripts/stressTests/data/start.sh b/scripts/stressTests/data/start.sh new file mode 100755 index 00000000000..da0e904192e --- /dev/null +++ b/scripts/stressTests/data/start.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +. scripts/env.sh + +yarn geth-binary:start:background +export WEB3_SYSTEM_TEST_PROVIDER=$IPC_PATH +export WEB3_SYSTEM_TEST_BACKEND="geth" +yarn generate:accounts +node ./scripts/stressTests/data/index.js + +export WEB3_SYSTEM_TEST_PROVIDER=ws://127.0.0.1:8545 +node ./scripts/stressTests/data/index.js + +yarn geth-binary:stop From b9188d63cbf187b88007f27e6b16c6b2b1f29ca3 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Thu, 9 Nov 2023 09:18:44 -0500 Subject: [PATCH 02/15] fix unit tests --- packages/web3-validator/test/unit/load.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/web3-validator/test/unit/load.test.ts b/packages/web3-validator/test/unit/load.test.ts index 9053be7e8f0..02f66d04cf6 100644 --- a/packages/web3-validator/test/unit/load.test.ts +++ b/packages/web3-validator/test/unit/load.test.ts @@ -115,7 +115,7 @@ describe('instance of validator', () => { validator.validateJSONSchema(hugeSchema, hugeData as object); t = Number(new Date()) - t1; }).not.toThrow(); - expect(t).toBeLessThan(6000); + expect(t).toBeLessThan(7000); expect(t).toBeGreaterThan(0); }); @@ -126,7 +126,7 @@ describe('instance of validator', () => { validator.validateJSONSchema(hugeSchema1000, hugeData1000 as object); t = Number(new Date()) - t1; }).not.toThrow(); - expect(t).toBeLessThan(6000); + expect(t).toBeLessThan(7000); expect(t).toBeGreaterThan(0); }); @@ -139,7 +139,7 @@ describe('instance of validator', () => { } t = Number(new Date()) - t1; }).not.toThrow(); - expect(t).toBeLessThan(3000); + expect(t).toBeLessThan(4000); expect(t).toBeGreaterThan(0); }); @@ -152,7 +152,7 @@ describe('instance of validator', () => { } t = Number(new Date()) - t1; }).not.toThrow(); - expect(t).toBeLessThan(4000); + expect(t).toBeLessThan(5000); expect(t).toBeGreaterThan(0); }); @@ -165,7 +165,7 @@ describe('instance of validator', () => { } t = Number(new Date()) - t1; }).not.toThrow(); - expect(t).toBeLessThan(4000); + expect(t).toBeLessThan(5000); expect(t).toBeGreaterThan(0); }); @@ -178,7 +178,7 @@ describe('instance of validator', () => { } t = Number(new Date()) - t1; }).not.toThrow(); - expect(t).toBeLessThan(4000); + expect(t).toBeLessThan(5000); expect(t).toBeGreaterThan(0); }); }); From a9a11382fe4ccd68ed1636219f584cad7a8f7400 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Thu, 9 Nov 2023 10:14:42 -0500 Subject: [PATCH 03/15] fix --- scripts/gen_accounts.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gen_accounts.js b/scripts/gen_accounts.js index 676c3c2d2db..b67519a702e 100644 --- a/scripts/gen_accounts.js +++ b/scripts/gen_accounts.js @@ -33,7 +33,7 @@ const addAccount = async (address, privateKey) => { from: mainAcc, to: address, gas: 1500000, - value: '100000000000000000000', + value: '1000000000000000000', }); }; From 7217b8cd6083365ea0a9193c761c7be9dccf29e3 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Thu, 9 Nov 2023 10:34:50 -0500 Subject: [PATCH 04/15] try to fix validator test --- packages/web3-validator/test/unit/load.test.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/web3-validator/test/unit/load.test.ts b/packages/web3-validator/test/unit/load.test.ts index 02f66d04cf6..5dc2fc847f5 100644 --- a/packages/web3-validator/test/unit/load.test.ts +++ b/packages/web3-validator/test/unit/load.test.ts @@ -115,7 +115,7 @@ describe('instance of validator', () => { validator.validateJSONSchema(hugeSchema, hugeData as object); t = Number(new Date()) - t1; }).not.toThrow(); - expect(t).toBeLessThan(7000); + expect(t).toBeLessThan(8000); expect(t).toBeGreaterThan(0); }); @@ -126,7 +126,7 @@ describe('instance of validator', () => { validator.validateJSONSchema(hugeSchema1000, hugeData1000 as object); t = Number(new Date()) - t1; }).not.toThrow(); - expect(t).toBeLessThan(7000); + expect(t).toBeLessThan(8000); expect(t).toBeGreaterThan(0); }); @@ -139,7 +139,7 @@ describe('instance of validator', () => { } t = Number(new Date()) - t1; }).not.toThrow(); - expect(t).toBeLessThan(4000); + expect(t).toBeLessThan(5000); expect(t).toBeGreaterThan(0); }); @@ -165,7 +165,7 @@ describe('instance of validator', () => { } t = Number(new Date()) - t1; }).not.toThrow(); - expect(t).toBeLessThan(5000); + expect(t).toBeLessThan(6000); expect(t).toBeGreaterThan(0); }); @@ -178,7 +178,7 @@ describe('instance of validator', () => { } t = Number(new Date()) - t1; }).not.toThrow(); - expect(t).toBeLessThan(5000); + expect(t).toBeLessThan(6000); expect(t).toBeGreaterThan(0); }); }); From 071effb9010ffd9c9375b1799d987f3439b2a969 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Thu, 9 Nov 2023 11:22:42 -0500 Subject: [PATCH 05/15] fix ipc tests --- scripts/geth_binary.sh | 21 +++++++++++++++++---- scripts/stressTests/data/start.sh | 9 ++++++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/scripts/geth_binary.sh b/scripts/geth_binary.sh index d2f9eedf79e..82f48622ec6 100755 --- a/scripts/geth_binary.sh +++ b/scripts/geth_binary.sh @@ -59,17 +59,29 @@ start() { download if [ -z "${ORIGARGS[1]}" ]; then echo "Starting geth..." - echo "geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --dev.gaslimit 9000000000000000 --rpc.txfeecap=1000000" - ${TMP_FOLDER}/geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --dev.gaslimit 9000000000000000 --rpc.txfeecap=1000000 --rpc.enabledeprecatedpersonal + echo "geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0" + ${TMP_FOLDER}/geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --rpc.enabledeprecatedpersonal else echo "Starting geth..." - echo "geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --dev.gaslimit 9000000000000000 --rpc.txfeecap=1000000 &>/dev/null &" - ${TMP_FOLDER}/geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --dev.gaslimit 9000000000000000 --rpc.txfeecap=1000000 --rpc.enabledeprecatedpersonal &>/dev/null & + echo "geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 &>/dev/null &" + ${TMP_FOLDER}/geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --rpc.enabledeprecatedpersonal &>/dev/null & echo "Waiting for geth..." npx wait-port -t 10000 "$WEB3_SYSTEM_TEST_PORT" fi } +startStress() { + download + + echo "Starting geth..." + echo "geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --dev.gaslimit 9000000000000000 --rpc.txfeecap=1000000 &>/dev/null &" + ${TMP_FOLDER}/geth --ipcpath $IPC_PATH --nodiscover --nousb --ws --ws.addr 0.0.0.0 --ws.port $WEB3_SYSTEM_TEST_PORT --http --http.addr 0.0.0.0 --http.port $WEB3_SYSTEM_TEST_PORT --allow-insecure-unlock --http.api personal,web3,eth,admin,debug,txpool,net --ws.api personal,web3,eth,admin,debug,miner,txpool,net --dev --mine --dev.period=0 --rpc.enabledeprecatedpersonal --dev.gaslimit 9000000000000000 --rpc.txfeecap=1000000 &>/dev/null & + echo "Waiting for geth..." + npx wait-port -t 10000 "$WEB3_SYSTEM_TEST_PORT" + +} + + startSync() { download @@ -95,6 +107,7 @@ stop() { } case $1 in +stressStart) startStress ;; syncStart) startSync ;; syncStop) syncStop ;; start) start ;; diff --git a/scripts/stressTests/data/start.sh b/scripts/stressTests/data/start.sh index da0e904192e..3da32b9ed56 100755 --- a/scripts/stressTests/data/start.sh +++ b/scripts/stressTests/data/start.sh @@ -1,13 +1,16 @@ #!/usr/bin/env bash . scripts/env.sh -yarn geth-binary:start:background -export WEB3_SYSTEM_TEST_PROVIDER=$IPC_PATH export WEB3_SYSTEM_TEST_BACKEND="geth" + +./scripts/geth_binary.sh stressStart + yarn generate:accounts + +export WEB3_SYSTEM_TEST_PROVIDER=$IPC_PATH node ./scripts/stressTests/data/index.js export WEB3_SYSTEM_TEST_PROVIDER=ws://127.0.0.1:8545 node ./scripts/stressTests/data/index.js -yarn geth-binary:stop +./scripts/geth_binary.sh stop From a59ee258dd0088011fcdf51ef2cc331df6018399 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Thu, 9 Nov 2023 12:13:46 -0500 Subject: [PATCH 06/15] fix load test --- package.json | 2 + .../web3-validator/test/unit/load.test.ts | 184 ------------------ scripts/stressTests/validation/load.test.js | 133 +++++++++++++ 3 files changed, 135 insertions(+), 184 deletions(-) delete mode 100644 packages/web3-validator/test/unit/load.test.ts create mode 100644 scripts/stressTests/validation/load.test.js diff --git a/package.json b/package.json index e26fca8e303..51548c9d684 100644 --- a/package.json +++ b/package.json @@ -85,6 +85,8 @@ "test:blackbox:infura:http": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:http --stream && yarn post-blackbox", "test:blackbox:infura:ws": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:ws --stream && yarn post-blackbox", "test:stress:data": "scripts/stressTests/data/start.sh", + "test:stress:validation": "node ./scripts/stressTests/validation/load.test.js", + "test:stress": "yarn test:stress:data && yarn test:stress:validation", "husky:install": "husky install", "husky:uninstall": "husky uninstall", "postinstall": "yarn build", diff --git a/packages/web3-validator/test/unit/load.test.ts b/packages/web3-validator/test/unit/load.test.ts deleted file mode 100644 index 5dc2fc847f5..00000000000 --- a/packages/web3-validator/test/unit/load.test.ts +++ /dev/null @@ -1,184 +0,0 @@ -/* -This file is part of web3.js. - -web3.js is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -web3.js is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with web3.js. If not, see . -*/ - -import { Web3Validator } from '../../src/web3_validator'; -import { Json, JsonSchema, ValidationSchemaInput } from '../../src/types'; - -const abi = [ - { indexed: true, internalType: 'address', name: 'from', type: 'address' }, - { indexed: true, internalType: 'address', name: 'to', type: 'address' }, - { indexed: false, internalType: 'uint256', name: 'value', type: 'uint256' }, -]; - -const abiJsonSchema = { - type: 'array', - items: [ - { name: 'from', format: 'address' }, - { name: 'to', format: 'address' }, - { name: 'value', format: 'uint256' }, - ], -}; - -const abiData = [ - '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', - '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', - '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', -]; - -const simpleSchema = { - type: 'object', - required: ['blockHash', 'blockNumber', 'from', 'to', 'data'], - properties: { - blockHash: { - format: 'bytes32', - }, - blockNumber: { - format: 'uint', - }, - from: { - format: 'address', - }, - to: { - oneOf: [{ format: 'address' }, { type: 'null' }], - }, - data: { - format: 'bytes', - }, - }, -}; - -const simpleData = { - blockHash: '0x0dec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', - blockNumber: BigInt(2), - from: '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', - to: '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', - data: '0xafea', -} as unknown as ValidationSchemaInput; - -const createHugeSchema = ( - schema: JsonSchema, - data: Json, - n = 3, -): { schema: JsonSchema; data: Json } => { - if (n > 0) { - const { data: resultData, schema: resultSchema } = createHugeSchema( - { ...simpleSchema } as JsonSchema, - { ...simpleData } as Json, - n - 1, - ); - return { - data: { ...(data as unknown as object), simple: resultData }, - schema: { ...schema, properties: { ...schema.properties, simple: resultSchema } }, - }; - } - return { - schema, - data, - }; -}; - -const { schema: hugeSchema, data: hugeData } = createHugeSchema( - { ...simpleSchema } as JsonSchema, - { ...simpleData } as Json, - 500, -); - -const { schema: hugeSchema1000, data: hugeData1000 } = createHugeSchema( - { ...simpleSchema } as JsonSchema, - { ...simpleData } as Json, - 1000, -); -describe('instance of validator', () => { - let validator: Web3Validator; - beforeAll(() => { - validator = new Web3Validator(); - }); - - it('huge schema', () => { - let t = 0; - expect(() => { - const t1 = Number(new Date()); - validator.validateJSONSchema(hugeSchema, hugeData as object); - t = Number(new Date()) - t1; - }).not.toThrow(); - expect(t).toBeLessThan(8000); - expect(t).toBeGreaterThan(0); - }); - - it('huge schema 1000', () => { - let t = 0; - expect(() => { - const t1 = Number(new Date()); - validator.validateJSONSchema(hugeSchema1000, hugeData1000 as object); - t = Number(new Date()) - t1; - }).not.toThrow(); - expect(t).toBeLessThan(8000); - expect(t).toBeGreaterThan(0); - }); - - it('simple schema multiple times', () => { - let t = 0; - expect(() => { - const t1 = Number(new Date()); - for (let i = 0; i < 500; i += 1) { - validator.validateJSONSchema(simpleSchema, simpleData as object); - } - t = Number(new Date()) - t1; - }).not.toThrow(); - expect(t).toBeLessThan(5000); - expect(t).toBeGreaterThan(0); - }); - - it('simple schema 1000 times', () => { - let t = 0; - expect(() => { - const t1 = Number(new Date()); - for (let i = 0; i < 1000; i += 1) { - validator.validateJSONSchema(simpleSchema, simpleData as object); - } - t = Number(new Date()) - t1; - }).not.toThrow(); - expect(t).toBeLessThan(5000); - expect(t).toBeGreaterThan(0); - }); - - it('simple JSON schema 1000 times', () => { - let t = 0; - expect(() => { - const t1 = Number(new Date()); - for (let i = 0; i < 1000; i += 1) { - validator.validateJSONSchema(abiJsonSchema, abiData as object); - } - t = Number(new Date()) - t1; - }).not.toThrow(); - expect(t).toBeLessThan(6000); - expect(t).toBeGreaterThan(0); - }); - - it('simple ABI 1000 times', () => { - let t = 0; - expect(() => { - const t1 = Number(new Date()); - for (let i = 0; i < 1000; i += 1) { - validator.validate(abi, abiData); - } - t = Number(new Date()) - t1; - }).not.toThrow(); - expect(t).toBeLessThan(6000); - expect(t).toBeGreaterThan(0); - }); -}); diff --git a/scripts/stressTests/validation/load.test.js b/scripts/stressTests/validation/load.test.js new file mode 100644 index 00000000000..671799cf586 --- /dev/null +++ b/scripts/stressTests/validation/load.test.js @@ -0,0 +1,133 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +const { Web3Validator } = require('../../../packages/web3-validator'); + +const abi = [ + { indexed: true, internalType: 'address', name: 'from', type: 'address' }, + { indexed: true, internalType: 'address', name: 'to', type: 'address' }, + { indexed: false, internalType: 'uint256', name: 'value', type: 'uint256' }, +]; + +const abiJsonSchema = { + type: 'array', + items: [ + { name: 'from', format: 'address' }, + { name: 'to', format: 'address' }, + { name: 'value', format: 'uint256' }, + ], +}; + +const abiData = [ + '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', +]; + +const simpleSchema = { + type: 'object', + required: ['blockHash', 'blockNumber', 'from', 'to', 'data'], + properties: { + blockHash: { + format: 'bytes32', + }, + blockNumber: { + format: 'uint', + }, + from: { + format: 'address', + }, + to: { + oneOf: [{ format: 'address' }, { type: 'null' }], + }, + data: { + format: 'bytes', + }, + }, +}; + +const simpleData = { + blockHash: '0x0dec0518fa672a70027b04c286582e543ab17319fbdd384fa7bc8f3d5a542c0b', + blockNumber: BigInt(2), + from: '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + to: '0xCB00CDE33a7a0Fba30C63745534F1f7Ae607076b', + data: '0xafea', +}; + +const createHugeSchema = (schema, data, n = 3) => { + if (n > 0) { + const { data: resultData, schema: resultSchema } = createHugeSchema( + { ...simpleSchema }, + { ...simpleData }, + n - 1, + ); + return { + data: { ...data, simple: resultData }, + schema: { ...schema, properties: { ...schema.properties, simple: resultSchema } }, + }; + } + return { + schema, + data, + }; +}; + +const { schema: hugeSchema, data: hugeData } = createHugeSchema( + { ...simpleSchema }, + { ...simpleData }, + 500, +); + +const { schema: hugeSchema1000, data: hugeData1000 } = createHugeSchema( + { ...simpleSchema }, + { ...simpleData }, + 1000, +); + +const validator = new Web3Validator(); + +console.time('huge schema'); +validator.validateJSONSchema(hugeSchema, hugeData); +console.timeLog('huge schema'); + +console.time('huge schema 1000'); +validator.validateJSONSchema(hugeSchema1000, hugeData1000); +console.timeLog('huge schema 1000'); + +console.time('simple schema multiple times'); +for (let i = 0; i < 500; i += 1) { + validator.validateJSONSchema(simpleSchema, simpleData); +} +console.timeLog('simple schema multiple times'); + +console.time('simple schema 1000 times'); +for (let i = 0; i < 1000; i += 1) { + validator.validateJSONSchema(simpleSchema, simpleData); +} +console.timeLog('simple schema 1000 times'); + +console.time('simple JSON schema 1000 times'); +for (let i = 0; i < 1000; i += 1) { + validator.validateJSONSchema(abiJsonSchema, abiData); +} +console.timeLog('simple JSON schema 1000 times'); + +console.time('simple ABI 1000 times'); +for (let i = 0; i < 1000; i += 1) { + validator.validate(abi, abiData); +} +console.timeLog('simple ABI 1000 times'); From 7ac76be513c1132731d7fb3a66401c525b127998 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Thu, 9 Nov 2023 12:24:21 -0500 Subject: [PATCH 07/15] fix --- package.json | 2 +- scripts/stressTests/validation/{load.test.js => index.js} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename scripts/stressTests/validation/{load.test.js => index.js} (100%) diff --git a/package.json b/package.json index 51548c9d684..5e968385b54 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "test:blackbox:infura:http": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:http --stream && yarn post-blackbox", "test:blackbox:infura:ws": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:ws --stream && yarn post-blackbox", "test:stress:data": "scripts/stressTests/data/start.sh", - "test:stress:validation": "node ./scripts/stressTests/validation/load.test.js", + "test:stress:validation": "node ./scripts/stressTests/validation/index.js", "test:stress": "yarn test:stress:data && yarn test:stress:validation", "husky:install": "husky install", "husky:uninstall": "husky uninstall", diff --git a/scripts/stressTests/validation/load.test.js b/scripts/stressTests/validation/index.js similarity index 100% rename from scripts/stressTests/validation/load.test.js rename to scripts/stressTests/validation/index.js From df948c0c28db34b9d7658bd298b4bb89739bb587 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Sun, 12 Nov 2023 20:53:55 -0500 Subject: [PATCH 08/15] move to tests folder --- package.json | 4 ++-- {scripts => tests}/stressTests/data/index.js | 2 +- {scripts => tests}/stressTests/data/start.sh | 4 ++-- {scripts => tests}/stressTests/validation/index.js | 0 4 files changed, 5 insertions(+), 5 deletions(-) rename {scripts => tests}/stressTests/data/index.js (96%) rename {scripts => tests}/stressTests/data/start.sh (76%) rename {scripts => tests}/stressTests/validation/index.js (100%) diff --git a/package.json b/package.json index 5e968385b54..11316571fb6 100644 --- a/package.json +++ b/package.json @@ -84,8 +84,8 @@ "test:blackbox:geth:ws": "yarn pre-blackbox && yarn geth:start:background && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:geth:ws --stream && yarn post-blackbox:geth", "test:blackbox:infura:http": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:http --stream && yarn post-blackbox", "test:blackbox:infura:ws": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:ws --stream && yarn post-blackbox", - "test:stress:data": "scripts/stressTests/data/start.sh", - "test:stress:validation": "node ./scripts/stressTests/validation/index.js", + "test:stress:data": "tests/stressTests/data/start.sh", + "test:stress:validation": "node tests/stressTests/validation/index.js", "test:stress": "yarn test:stress:data && yarn test:stress:validation", "husky:install": "husky install", "husky:uninstall": "husky uninstall", diff --git a/scripts/stressTests/data/index.js b/tests/stressTests/data/index.js similarity index 96% rename from scripts/stressTests/data/index.js rename to tests/stressTests/data/index.js index 840e08d8367..ce13b0620fe 100644 --- a/scripts/stressTests/data/index.js +++ b/tests/stressTests/data/index.js @@ -1,6 +1,6 @@ const { Web3 } = require('../../../packages/web3'); const { IpcProvider } = require('../../../packages/web3-providers-ipc'); -const accounts = require('../../accounts.json'); +const accounts = require('../../../scripts/accounts.json'); const contractData = require('../../../fixtures/build/Basic.json'); const DATA_AMOUNT = 50 * 1024; // 50 kB diff --git a/scripts/stressTests/data/start.sh b/tests/stressTests/data/start.sh similarity index 76% rename from scripts/stressTests/data/start.sh rename to tests/stressTests/data/start.sh index 3da32b9ed56..cdb649fcf14 100755 --- a/scripts/stressTests/data/start.sh +++ b/tests/stressTests/data/start.sh @@ -8,9 +8,9 @@ export WEB3_SYSTEM_TEST_BACKEND="geth" yarn generate:accounts export WEB3_SYSTEM_TEST_PROVIDER=$IPC_PATH -node ./scripts/stressTests/data/index.js +node ./tests/stressTests/data/index.js export WEB3_SYSTEM_TEST_PROVIDER=ws://127.0.0.1:8545 -node ./scripts/stressTests/data/index.js +node ./tests/stressTests/data/index.js ./scripts/geth_binary.sh stop diff --git a/scripts/stressTests/validation/index.js b/tests/stressTests/validation/index.js similarity index 100% rename from scripts/stressTests/validation/index.js rename to tests/stressTests/validation/index.js From 21114ebbdcd976d71f2094a7d2a9ac6835239710 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Sun, 12 Nov 2023 20:57:43 -0500 Subject: [PATCH 09/15] moved --- package.json | 4 ++-- .../web3-validator/test/stress}/index.js | 2 +- .../data => packages/web3/test/stress}/index.js | 8 ++++---- .../data => packages/web3/test/stress}/start.sh | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) rename {tests/stressTests/validation => packages/web3-validator/test/stress}/index.js (97%) rename {tests/stressTests/data => packages/web3/test/stress}/index.js (85%) rename {tests/stressTests/data => packages/web3/test/stress}/start.sh (76%) diff --git a/package.json b/package.json index 11316571fb6..e19da313f95 100644 --- a/package.json +++ b/package.json @@ -84,8 +84,8 @@ "test:blackbox:geth:ws": "yarn pre-blackbox && yarn geth:start:background && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:geth:ws --stream && yarn post-blackbox:geth", "test:blackbox:infura:http": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:http --stream && yarn post-blackbox", "test:blackbox:infura:ws": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:ws --stream && yarn post-blackbox", - "test:stress:data": "tests/stressTests/data/start.sh", - "test:stress:validation": "node tests/stressTests/validation/index.js", + "test:stress:data": "packages/web3/test/stress/start.sh", + "test:stress:validation": "node packages/web3-validator/test/stress/index.js", "test:stress": "yarn test:stress:data && yarn test:stress:validation", "husky:install": "husky install", "husky:uninstall": "husky uninstall", diff --git a/tests/stressTests/validation/index.js b/packages/web3-validator/test/stress/index.js similarity index 97% rename from tests/stressTests/validation/index.js rename to packages/web3-validator/test/stress/index.js index 671799cf586..1087715867c 100644 --- a/tests/stressTests/validation/index.js +++ b/packages/web3-validator/test/stress/index.js @@ -15,7 +15,7 @@ You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ -const { Web3Validator } = require('../../../packages/web3-validator'); +const { Web3Validator } = require('../../lib/commonjs'); const abi = [ { indexed: true, internalType: 'address', name: 'from', type: 'address' }, diff --git a/tests/stressTests/data/index.js b/packages/web3/test/stress/index.js similarity index 85% rename from tests/stressTests/data/index.js rename to packages/web3/test/stress/index.js index ce13b0620fe..d946f31e1f0 100644 --- a/tests/stressTests/data/index.js +++ b/packages/web3/test/stress/index.js @@ -1,7 +1,7 @@ -const { Web3 } = require('../../../packages/web3'); -const { IpcProvider } = require('../../../packages/web3-providers-ipc'); -const accounts = require('../../../scripts/accounts.json'); -const contractData = require('../../../fixtures/build/Basic.json'); +const { Web3 } = require('../../lib/commonjs'); +const { IpcProvider } = require('../../../web3-providers-ipc/lib/commonjs'); +const accounts = require('../../../../scripts/accounts.json'); +const contractData = require('../../../../fixtures/build/Basic.json'); const DATA_AMOUNT = 50 * 1024; // 50 kB diff --git a/tests/stressTests/data/start.sh b/packages/web3/test/stress/start.sh similarity index 76% rename from tests/stressTests/data/start.sh rename to packages/web3/test/stress/start.sh index cdb649fcf14..1752882a79c 100755 --- a/tests/stressTests/data/start.sh +++ b/packages/web3/test/stress/start.sh @@ -8,9 +8,9 @@ export WEB3_SYSTEM_TEST_BACKEND="geth" yarn generate:accounts export WEB3_SYSTEM_TEST_PROVIDER=$IPC_PATH -node ./tests/stressTests/data/index.js +node ./packages/web3/test/stress/index.js export WEB3_SYSTEM_TEST_PROVIDER=ws://127.0.0.1:8545 -node ./tests/stressTests/data/index.js +node ./packages/web3/test/stress/index.js ./scripts/geth_binary.sh stop From ba56d6a7aee452adcc315bfcf4683c5eaa396082 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Sun, 12 Nov 2023 21:00:56 -0500 Subject: [PATCH 10/15] fix --- packages/web3-validator/test/stress/index.js | 2 ++ packages/web3/test/stress/index.js | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/packages/web3-validator/test/stress/index.js b/packages/web3-validator/test/stress/index.js index 1087715867c..d1bab1ea562 100644 --- a/packages/web3-validator/test/stress/index.js +++ b/packages/web3-validator/test/stress/index.js @@ -15,6 +15,7 @@ You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ +/* eslint-disable */ const { Web3Validator } = require('../../lib/commonjs'); const abi = [ @@ -130,4 +131,5 @@ console.time('simple ABI 1000 times'); for (let i = 0; i < 1000; i += 1) { validator.validate(abi, abiData); } + console.timeLog('simple ABI 1000 times'); diff --git a/packages/web3/test/stress/index.js b/packages/web3/test/stress/index.js index d946f31e1f0..2124b1da6ed 100644 --- a/packages/web3/test/stress/index.js +++ b/packages/web3/test/stress/index.js @@ -1,3 +1,21 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +/* eslint-disable */ const { Web3 } = require('../../lib/commonjs'); const { IpcProvider } = require('../../../web3-providers-ipc/lib/commonjs'); const accounts = require('../../../../scripts/accounts.json'); From 3ddf0dddd117324d05d65c939a0539d30e6b1a41 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Tue, 14 Nov 2023 10:24:12 -0500 Subject: [PATCH 11/15] move validator test to web3 package --- package.json | 2 +- .../test/stress/index.js => web3/test/stress/validator.js} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename packages/{web3-validator/test/stress/index.js => web3/test/stress/validator.js} (97%) diff --git a/package.json b/package.json index e19da313f95..32ed20a6eb7 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "test:blackbox:infura:http": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:http --stream && yarn post-blackbox", "test:blackbox:infura:ws": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:ws --stream && yarn post-blackbox", "test:stress:data": "packages/web3/test/stress/start.sh", - "test:stress:validation": "node packages/web3-validator/test/stress/index.js", + "test:stress:validation": "node packages/web3/test/stress/validator.js", "test:stress": "yarn test:stress:data && yarn test:stress:validation", "husky:install": "husky install", "husky:uninstall": "husky uninstall", diff --git a/packages/web3-validator/test/stress/index.js b/packages/web3/test/stress/validator.js similarity index 97% rename from packages/web3-validator/test/stress/index.js rename to packages/web3/test/stress/validator.js index d1bab1ea562..36951e6c133 100644 --- a/packages/web3-validator/test/stress/index.js +++ b/packages/web3/test/stress/validator.js @@ -16,7 +16,7 @@ along with web3.js. If not, see . */ /* eslint-disable */ -const { Web3Validator } = require('../../lib/commonjs'); +const { Web3Validator } = require('../../../web3-validator/lib/commonjs'); const abi = [ { indexed: true, internalType: 'address', name: 'from', type: 'address' }, From 3f35de29942f5f34c20975c3b067161a354ea0a3 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Mon, 20 Nov 2023 10:43:35 -0500 Subject: [PATCH 12/15] move to TS. remove time logs --- .../web3/test/stress/{index.js => index.ts} | 33 +++++++++---------- packages/web3/test/stress/start.sh | 4 +-- .../stress/{validator.js => validator.ts} | 33 +++++++------------ 3 files changed, 30 insertions(+), 40 deletions(-) rename packages/web3/test/stress/{index.js => index.ts} (66%) rename packages/web3/test/stress/{validator.js => validator.ts} (76%) diff --git a/packages/web3/test/stress/index.js b/packages/web3/test/stress/index.ts similarity index 66% rename from packages/web3/test/stress/index.js rename to packages/web3/test/stress/index.ts index 2124b1da6ed..eb0fe1a4457 100644 --- a/packages/web3/test/stress/index.js +++ b/packages/web3/test/stress/index.ts @@ -16,43 +16,42 @@ along with web3.js. If not, see . */ /* eslint-disable */ -const { Web3 } = require('../../lib/commonjs'); -const { IpcProvider } = require('../../../web3-providers-ipc/lib/commonjs'); -const accounts = require('../../../../scripts/accounts.json'); -const contractData = require('../../../../fixtures/build/Basic.json'); - +import { Web3 } from 'web3'; +import { IpcProvider } from 'web3-providers-ipc'; +import accounts from '../shared_fixtures/accounts.json'; +// @ts-ignore +import { BasicAbi, BasicBytecode } from '../shared_fixtures/build/Basic.ts'; +import WebSocketProvider from 'web3-providers-ws'; const DATA_AMOUNT = 50 * 1024; // 50 kB -const sendAndGetData = async (web3, i) => { +const sendAndGetData = async (web3: Web3, i: number) => { const sendOptions = { from: accounts[i].address }; const deployOptions = { - data: contractData.evm.bytecode.object, - arguments: [123, ''], + data: BasicBytecode, + arguments: [0, ''] as [number, string], gasPrice: await web3.eth.getGasPrice(), gas: BigInt(9000000000000), gasLimit: BigInt(9000000000000), type: BigInt(0), }; - const c = new web3.eth.Contract(contractData.abi); + const c = new web3.eth.Contract(BasicAbi); + // @ts-ignore const contract = await c.deploy(deployOptions).send(sendOptions); - console.time(`Send huge data [${i}]`); - const receipt = await contract.methods + await contract.methods + // @ts-ignore .setValues(1, 'A'.repeat(DATA_AMOUNT), true) .send({ from: accounts[i].address }); - console.timeLog(`Send huge data [${i}]`, receipt.transactionHash); - console.time(`Get huge data [${i}]`); await contract.methods.getStringValue().call(); - console.timeLog(`Get huge data [${i}]`); }; const test = async () => { - const providerString = process.env.WEB3_SYSTEM_TEST_PROVIDER; + const providerString = String(process.env.WEB3_SYSTEM_TEST_PROVIDER); console.log(`Start test with provider: ${providerString}`); const provider = providerString.includes('ipc') ? new IpcProvider(providerString) - : new Web3.providers.WebsocketProvider(providerString); + : providerString; const web3 = new Web3(provider); for (const a of accounts) { @@ -65,7 +64,7 @@ const test = async () => { prs.push(sendAndGetData(web3, i)); } await Promise.all(prs); - web3.provider.disconnect(); + (web3.provider as unknown as WebSocketProvider).disconnect(); }; test().catch(console.error); diff --git a/packages/web3/test/stress/start.sh b/packages/web3/test/stress/start.sh index 1752882a79c..21675f5f6a8 100755 --- a/packages/web3/test/stress/start.sh +++ b/packages/web3/test/stress/start.sh @@ -8,9 +8,9 @@ export WEB3_SYSTEM_TEST_BACKEND="geth" yarn generate:accounts export WEB3_SYSTEM_TEST_PROVIDER=$IPC_PATH -node ./packages/web3/test/stress/index.js +npx ts-node ./packages/web3/test/stress/index.js export WEB3_SYSTEM_TEST_PROVIDER=ws://127.0.0.1:8545 -node ./packages/web3/test/stress/index.js +npx ts-node node ./packages/web3/test/stress/index.js ./scripts/geth_binary.sh stop diff --git a/packages/web3/test/stress/validator.js b/packages/web3/test/stress/validator.ts similarity index 76% rename from packages/web3/test/stress/validator.js rename to packages/web3/test/stress/validator.ts index 36951e6c133..076351820c0 100644 --- a/packages/web3/test/stress/validator.js +++ b/packages/web3/test/stress/validator.ts @@ -16,7 +16,7 @@ along with web3.js. If not, see . */ /* eslint-disable */ -const { Web3Validator } = require('../../../web3-validator/lib/commonjs'); +import { Web3Validator, JsonSchema, Json } from 'web3-validator'; const abi = [ { indexed: true, internalType: 'address', name: 'from', type: 'address' }, @@ -69,15 +69,19 @@ const simpleData = { data: '0xafea', }; -const createHugeSchema = (schema, data, n = 3) => { +const createHugeSchema = ( + schema: JsonSchema, + data: Json, + n = 3, +): { schema: JsonSchema; data: Json } => { if (n > 0) { const { data: resultData, schema: resultSchema } = createHugeSchema( { ...simpleSchema }, - { ...simpleData }, + { ...simpleData } as unknown as Json, n - 1, ); return { - data: { ...data, simple: resultData }, + data: { ...(typeof data === 'object' ? data : { data }), simple: resultData }, schema: { ...schema, properties: { ...schema.properties, simple: resultSchema } }, }; } @@ -89,47 +93,34 @@ const createHugeSchema = (schema, data, n = 3) => { const { schema: hugeSchema, data: hugeData } = createHugeSchema( { ...simpleSchema }, - { ...simpleData }, + { ...simpleData } as unknown as Json, 500, ); const { schema: hugeSchema1000, data: hugeData1000 } = createHugeSchema( { ...simpleSchema }, - { ...simpleData }, + { ...simpleData } as unknown as Json, 1000, ); const validator = new Web3Validator(); -console.time('huge schema'); -validator.validateJSONSchema(hugeSchema, hugeData); -console.timeLog('huge schema'); +validator.validateJSONSchema(hugeSchema, hugeData as object); -console.time('huge schema 1000'); -validator.validateJSONSchema(hugeSchema1000, hugeData1000); -console.timeLog('huge schema 1000'); +validator.validateJSONSchema(hugeSchema1000, hugeData1000 as object); -console.time('simple schema multiple times'); for (let i = 0; i < 500; i += 1) { validator.validateJSONSchema(simpleSchema, simpleData); } -console.timeLog('simple schema multiple times'); -console.time('simple schema 1000 times'); for (let i = 0; i < 1000; i += 1) { validator.validateJSONSchema(simpleSchema, simpleData); } -console.timeLog('simple schema 1000 times'); -console.time('simple JSON schema 1000 times'); for (let i = 0; i < 1000; i += 1) { validator.validateJSONSchema(abiJsonSchema, abiData); } -console.timeLog('simple JSON schema 1000 times'); -console.time('simple ABI 1000 times'); for (let i = 0; i < 1000; i += 1) { validator.validate(abi, abiData); } - -console.timeLog('simple ABI 1000 times'); From 11dd80433d43ca20e36a4467a85658cc73497691 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Mon, 20 Nov 2023 11:14:31 -0500 Subject: [PATCH 13/15] fix start.sh --- packages/web3/test/stress/index.ts | 4 +--- packages/web3/test/stress/start.sh | 5 +++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/web3/test/stress/index.ts b/packages/web3/test/stress/index.ts index eb0fe1a4457..67471e136fb 100644 --- a/packages/web3/test/stress/index.ts +++ b/packages/web3/test/stress/index.ts @@ -19,8 +19,7 @@ along with web3.js. If not, see . import { Web3 } from 'web3'; import { IpcProvider } from 'web3-providers-ipc'; import accounts from '../shared_fixtures/accounts.json'; -// @ts-ignore -import { BasicAbi, BasicBytecode } from '../shared_fixtures/build/Basic.ts'; +import { BasicAbi, BasicBytecode } from '../shared_fixtures/build/Basic'; import WebSocketProvider from 'web3-providers-ws'; const DATA_AMOUNT = 50 * 1024; // 50 kB @@ -35,7 +34,6 @@ const sendAndGetData = async (web3: Web3, i: number) => { type: BigInt(0), }; const c = new web3.eth.Contract(BasicAbi); - // @ts-ignore const contract = await c.deploy(deployOptions).send(sendOptions); await contract.methods diff --git a/packages/web3/test/stress/start.sh b/packages/web3/test/stress/start.sh index 21675f5f6a8..9de30d524d9 100755 --- a/packages/web3/test/stress/start.sh +++ b/packages/web3/test/stress/start.sh @@ -2,15 +2,16 @@ . scripts/env.sh export WEB3_SYSTEM_TEST_BACKEND="geth" +export TS_NODE_PREFER_TS_EXTS=true ./scripts/geth_binary.sh stressStart yarn generate:accounts export WEB3_SYSTEM_TEST_PROVIDER=$IPC_PATH -npx ts-node ./packages/web3/test/stress/index.js +npx ts-node ./packages/web3/test/stress/index.ts export WEB3_SYSTEM_TEST_PROVIDER=ws://127.0.0.1:8545 -npx ts-node node ./packages/web3/test/stress/index.js +npx ts-node ./packages/web3/test/stress/index.ts ./scripts/geth_binary.sh stop From af661271b82924afad584204b72cc14a4b776587 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Mon, 20 Nov 2023 11:18:01 -0500 Subject: [PATCH 14/15] fix validation test run script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f06aa463f9a..44aebd4e2cd 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "test:blackbox:infura:http": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:http --stream && yarn post-blackbox", "test:blackbox:infura:ws": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:ws --stream && yarn post-blackbox", "test:stress:data": "packages/web3/test/stress/start.sh", - "test:stress:validation": "node packages/web3/test/stress/validator.js", + "test:stress:validation": "npx ts-node packages/web3/test/stress/validator.ts", "test:stress": "yarn test:stress:data && yarn test:stress:validation", "husky:install": "husky install", "husky:uninstall": "husky uninstall", From cca93113447b51c87b85463a7116211a5ecfe8e7 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Mon, 20 Nov 2023 12:22:33 -0500 Subject: [PATCH 15/15] fix name --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 44aebd4e2cd..6adc68ec73b 100644 --- a/package.json +++ b/package.json @@ -85,9 +85,9 @@ "test:blackbox:geth:ws": "yarn pre-blackbox && yarn geth:start:background && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:geth:ws --stream && yarn post-blackbox:geth", "test:blackbox:infura:http": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:http --stream && yarn post-blackbox", "test:blackbox:infura:ws": "yarn pre-blackbox && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:infura:ws --stream && yarn post-blackbox", - "test:stress:data": "packages/web3/test/stress/start.sh", - "test:stress:validation": "npx ts-node packages/web3/test/stress/validator.ts", - "test:stress": "yarn test:stress:data && yarn test:stress:validation", + "test:manual:stress:data": "packages/web3/test/stress/start.sh", + "test:manual:stress:validation": "npx ts-node packages/web3/test/stress/validator.ts", + "test:manual:stress": "yarn test:manual:stress:data && yarn test:manual:stress:validation", "husky:install": "husky install", "husky:uninstall": "husky uninstall", "postinstall": "yarn build",