From 95b37d8575822e84ca72fcab53047edb2ba8c816 Mon Sep 17 00:00:00 2001 From: Santiago Trujillo Zuluaga Date: Thu, 1 Feb 2024 07:27:32 +0000 Subject: [PATCH 1/6] Interactive code editor 6693 (#6769) * edited info section * edited info section * edited info section * updated wrong description for wallets instead of web3.eth * update stackblitz links with web3js org --- docs/docs/guides/getting_started/getting_started.md | 6 +++++- docs/docs/guides/wallet/index.md | 7 ++++++- docs/docs/guides/web3_providers_guide/index.md | 8 +++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/docs/docs/guides/getting_started/getting_started.md b/docs/docs/guides/getting_started/getting_started.md index 8d08c907904..cad3029470d 100644 --- a/docs/docs/guides/getting_started/getting_started.md +++ b/docs/docs/guides/getting_started/getting_started.md @@ -246,4 +246,8 @@ const subscription = uniswapToken.events.Transfer(); //listen to the events subscription.on('data',console.log); // ↳ [{...},{...}, ...] live events will be printed in the console -``` \ No newline at end of file +``` + +## Live code editor + + \ No newline at end of file diff --git a/docs/docs/guides/wallet/index.md b/docs/docs/guides/wallet/index.md index 2b15208c475..5da33cdabaf 100644 --- a/docs/docs/guides/wallet/index.md +++ b/docs/docs/guides/wallet/index.md @@ -218,4 +218,9 @@ The following is a list of `Accounts` [methods](/libdocs/Wallet) in the `web3.et - [recover](/libdocs/Accounts#recover) - [recoverTransaction](/libdocs/Accounts#recovertransaction) - [sign](/libdocs/Accounts#sign) -- [signTransaction](/libdocs/Accounts#signtransaction) \ No newline at end of file +- [signTransaction](/libdocs/Accounts#signtransaction) + + +## Live code editor + + \ No newline at end of file diff --git a/docs/docs/guides/web3_providers_guide/index.md b/docs/docs/guides/web3_providers_guide/index.md index 9595fe9d07c..d405a80f065 100644 --- a/docs/docs/guides/web3_providers_guide/index.md +++ b/docs/docs/guides/web3_providers_guide/index.md @@ -372,4 +372,10 @@ provider.on('error', (error) => { // the `maxAttempts` is equal to the provided value by the user, or the default value `5`. } }); -``` \ No newline at end of file +``` + + + +## Live code editor + + \ No newline at end of file From 42ec39882dbf0889f0cc62194e7056f3c4517539 Mon Sep 17 00:00:00 2001 From: Oleksii Kosynskyi Date: Thu, 1 Feb 2024 10:29:32 -0500 Subject: [PATCH 2/6] doc deploy fix (#6779) * test * test * test * test * test * test * test * fix * test * test * fix * test * test * fix * test * done * fix * revert test text --- .github/workflows/build.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5061885b2e9..54c8a7fadf1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -206,14 +206,18 @@ jobs: contents: read deployments: write steps: + - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: 18 + cache: yarn + node-version: '18' - uses: actions/cache/restore@v3 with: path: ./ key: web3-18-${{github.event.pull_request.base.sha}} - - run: npm run build:docs + - run: yarn install --ignore-scripts + - run: yarn build:cjs + - run: yarn run build:docs - name: Publish to Cloudflare Pages uses: cloudflare/pages-action@v1 with: From e5673ca4e42cebc16591cbe889566e91b39997af Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 5 Feb 2024 10:27:07 -0500 Subject: [PATCH 3/6] Add hardhat (#6719) * add hardhat * removing ganache pt 1 * fix build * fix build * add hardhat plugin * remove hardhat plugin from each package * update flow * update hardhat command * add stop script * update build * update flow * update buiild * update build * update tests * update tests * add eslint-disable * add es-lint * update web3-eth tests with hardhat * fix lint * update net * fix build * update * update * update * update tests * update pr * update build * update workflow * update package * update * add comments * update yml * fix yml * add script * updae blackbox tests * add const for backend * fix breakin tests * update * remove ganache specific tests * fix script * update const * remove unneccesary comments --- .github/workflows/build.yml | 68 +++++++-------- hardhat.config.js | 13 +++ package.json | 21 +++-- .../web3-core/src/web3_request_manager.ts | 4 +- .../integration/contract_accesslist.test.ts | 3 +- .../test/integration/contract_deploy.test.ts | 31 +++++-- .../test/integration/contract_methods.test.ts | 50 ++++++----- .../contract_methods_errors.test.ts | 3 +- .../test/integration/personal.test.ts | 46 +++-------- packages/web3-eth/test/e2e/e2e_utils.ts | 12 +-- .../integration/block/rpc.getBlock.test.ts | 3 +- .../rpc.getBlockTransactionCount.test.ts | 9 +- .../block/rpc.getBlockUncleCount.test.ts | 6 +- .../integration/block/rpc.getUncle.test.ts | 6 +- .../defaults.transactionBlockTimeout.test.ts | 6 +- .../integration/get_revert_reason.test.ts | 31 +++---- .../web3-eth/test/integration/nonce.test.ts | 13 ++- .../web3-eth/test/integration/rpc.test.ts | 50 ++++++----- .../web3_eth/createAccessList.test.ts | 3 +- .../integration/web3_eth/estimate_gas.test.ts | 10 ++- .../web3_eth/getFeeHistory.test.ts | 3 +- .../web3_eth/send_signed_transaction.test.ts | 19 +++-- .../web3_eth/send_transaction.test.ts | 55 ++++++++----- .../test/integration/web3_eth/sign.test.ts | 17 +++- .../web3_eth/sign_transaction.test.ts | 10 ++- .../web3_eth/sign_typed_data.test.ts | 82 ------------------- .../integration/web3_eth/submit_work.test.ts | 5 +- .../test/integration/web3_net.test.ts | 3 +- packages/web3/hardhat.config.js | 3 - packages/web3/package.json | 4 +- packages/web3/scripts/black_box_test.sh | 4 +- packages/web3/test/cjs_black_box/package.json | 2 - .../test/web3-eth-contract/erc20.test.ts | 7 +- packages/web3/test/e2e/e2e_utils.ts | 12 +-- packages/web3/test/e2e/estimate_gas.test.ts | 8 +- packages/web3/test/e2e/get_balance.test.ts | 6 +- packages/web3/test/e2e/get_block.test.ts | 6 +- .../e2e/get_block_transaction_count.test.ts | 6 +- .../test/e2e/get_block_uncle_count.test.ts | 8 +- packages/web3/test/e2e/get_chain_id.test.ts | 4 +- packages/web3/test/e2e/get_id.test.ts | 4 +- packages/web3/test/e2e/get_proof.test.ts | 6 +- .../test/e2e/get_transaction_count.test.ts | 6 +- .../e2e/get_transaction_from_block.test.ts | 6 +- packages/web3/test/e2e/get_uncle.test.ts | 4 +- packages/web3/test/esm_black_box/package.json | 3 +- .../test/web3-eth-contract/erc20.test.ts | 7 +- scripts/ganache.sh | 35 -------- scripts/hardhat.sh | 31 +++++++ scripts/system_tests_utils.ts | 42 ++++++++-- scripts/test-runner.sh | 12 +-- yarn.lock | 13 +++ 52 files changed, 432 insertions(+), 389 deletions(-) create mode 100644 hardhat.config.js delete mode 100644 packages/web3/hardhat.config.js delete mode 100755 scripts/ganache.sh create mode 100755 scripts/hardhat.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 54c8a7fadf1..06d9d16558f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -131,25 +131,25 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} if: ${{ matrix.node == 18 }} - integration: - name: Integration (ganache) # (ganache with HTTP) + integration-hardhat: + name: Integration hardhat needs: build runs-on: ubuntu-latest - env: - INFURA_GOERLI_HTTP: ${{ secrets.INFURA_GOERLI_HTTP }} - INFURA_GOERLI_WS: ${{ secrets.INFURA_GOERLI_WS }} + strategy: + fail-fast: false steps: - - uses: actions/setup-node@v4 - with: - node-version: 18 - - uses: actions/cache/restore@v3 - with: + - uses: actions/setup-node@v3 + with: + node-version: 18 + - uses: actions/cache/restore@v3 + with: path: ./ key: web3-18-${{github.event.pull_request.base.sha}} - - run: yarn test:e2e:ganache:http - shell: bash + - run: npx hardhat node & + - run: yarn test:e2e:hardhat:http + shell: bash - e2e: + e2e-geth: name: Integration # (geth with HTTP, IPC & WS) needs: build runs-on: ubuntu-latest @@ -172,31 +172,31 @@ jobs: shell: bash e2e-browsers: - name: End-to-End ganache:ws + name: End-to-End hardhat:ws needs: build runs-on: ubuntu-latest strategy: - fail-fast: false - matrix: - browser: ['electron', 'chrome', 'firefox'] + fail-fast: false + matrix: + browser: ['electron', 'chrome', 'firefox'] steps: - - uses: actions/setup-node@v4 - with: - node-version: 18 - - uses: browser-actions/setup-firefox@latest - if: matrix.browser == 'firefox' - - uses: actions/cache/restore@v3 - with: - path: ./ - key: web3-18-${{github.event.pull_request.base.sha}} - - run: npm install --no-package-lock --no-save --force cypress - - run: npx ts-node scripts/init.ts - - name: Cypress run - uses: cypress-io/github-action@v4 - with: - install: false - command: yarn test:e2e:ganache:ws:${{ matrix.browser }} - cache-key: node-v${{ matrix.node }}-on-${{ matrix.browser }}-hash-${{ hashFiles('yarn.lock') }} + - uses: actions/setup-node@v3 + with: + node-version: 18 + - uses: browser-actions/setup-firefox@latest + if: matrix.browser == 'firefox' + - uses: actions/cache/restore@v3 + with: + path: ./ + key: web3-18-${{github.event.pull_request.base.sha}} + - run: npx hardhat node & + - run: npm install --no-package-lock --no-save --force cypress + - name: Cypress run + uses: cypress-io/github-action@v4 + with: + install: false + command: yarn test:e2e:hardhat:ws:${{ matrix.browser }} + cache-key: node-v18-on-${{ matrix.browser }}-hash-${{ hashFiles('yarn.lock') }} deploy-docs: name: Docs CloudFlare Deploy diff --git a/hardhat.config.js b/hardhat.config.js new file mode 100644 index 00000000000..4120e7903da --- /dev/null +++ b/hardhat.config.js @@ -0,0 +1,13 @@ +/** @type import('hardhat/config').HardhatUserConfig */ + +module.exports = { + solidity: "0.8.17", + networks: { + hardhat: { + chainId: 1337, + accounts: { + + } + } + } +}; diff --git a/package.json b/package.json index e7e5fcb6292..1a3d5b6a5d5 100644 --- a/package.json +++ b/package.json @@ -44,15 +44,14 @@ "build:docs": "yarn generate:docs && cd docs && yarn install && yarn build", "changelog": "ts-node -P scripts/changelog/tsconfig.json scripts/changelog/src/index.ts", "clean": "lerna run clean --stream --parallel", - "ganache:start": "WEB3_SYSTEM_TEST_BACKEND=ganache && ./scripts/ganache.sh start", - "ganache:start:background": "WEB3_SYSTEM_TEST_BACKEND=ganache && ./scripts/ganache.sh start 1", - "ganache:stop": "./scripts/ganache.sh stop", "geth:start": "WEB3_SYSTEM_TEST_BACKEND=geth && ./scripts/geth.sh start", "geth:start:background": "WEB3_SYSTEM_TEST_BACKEND=geth && ./scripts/geth.sh start 1", "geth:stop": "./scripts/geth.sh stop", "geth-binary:start": "WEB3_SYSTEM_TEST_BACKEND=geth && ./scripts/geth_binary.sh start", "geth-binary:start:background": "WEB3_SYSTEM_TEST_BACKEND=geth && ./scripts/geth_binary.sh start 1", "geth-binary:stop": "WEB3_SYSTEM_TEST_BACKEND=geth && ./scripts/geth_binary.sh stop", + "hardhat:start": "WEB3_SYSTEM_TEST_BACKEND=hardhat && ./scripts/hardhat.sh start", + "hardhat:stop": "./scripts/hardhat.sh stop", "geth-manual:start:background": "WEB3_SYSTEM_TEST_BACKEND=geth && ./scripts/geth_binary.sh manualStart 1", "geth-manual:stop": "WEB3_SYSTEM_TEST_BACKEND=geth && ./scripts/geth_binary.sh stop", "lint": "lerna run lint --stream --parallel", @@ -65,14 +64,10 @@ "test:integration": "lerna run test:integration --stream", "test:benchmark": "lerna run test:benchmark", "test:integration:stress": "lerna run test:integration:stress --stream", - "test:e2e:ganache:http": "./scripts/test-runner.sh ganache http", - "test:e2e:ganache:ws": "./scripts/test-runner.sh ganache ws", "test:e2e:geth:http": "./scripts/test-runner.sh geth http", "test:e2e:geth:ws": "./scripts/test-runner.sh geth ws", "test:e2e:geth:ipc": "./scripts/test-runner.sh geth ipc", - "test:e2e:ganache:ws:electron": "./scripts/test-runner.sh ganache ws electron", - "test:e2e:ganache:ws:chrome": "./scripts/test-runner.sh ganache ws chrome", - "test:e2e:ganache:ws:firefox": "./scripts/test-runner.sh ganache ws firefox", + "test:e2e:hardhat:http": "./scripts/test-runner.sh hardhat http", "test:e2e:coverage": "./scripts/test-runner.sh coverage", "test:e2e:mainnet:http": "./scripts/test-runner.sh mainnet http", "test:e2e:mainnet:ws": "./scripts/test-runner.sh mainnet ws", @@ -85,12 +80,15 @@ "generate:accounts": "node ./scripts/gen_accounts.js", "pre-blackbox": "yarn config set registry http://localhost:4873 && git init && git config --global user.email \"ci@github.com\" && git config --global user.name \"CI\"", "post-blackbox": "./scripts/verdaccio.sh stop", - "post-blackbox:ganache": "yarn ganache:stop && yarn post-blackbox", "post-blackbox:geth": "yarn geth:stop && yarn post-blackbox", - "test:blackbox:ganache:http": "yarn pre-blackbox && yarn ganache:start:background && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:ganache:http --stream && yarn post-blackbox:ganache", - "test:blackbox:ganache:ws": "yarn pre-blackbox && yarn ganache:start:background && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:ganache:ws --stream && yarn post-blackbox:ganache", "test:blackbox:geth:http": "yarn pre-blackbox && yarn geth:start:background && ./scripts/verdaccio.sh startBackgroundAndPublish && lerna run test:blackbox:geth:http --stream && yarn post-blackbox:geth", "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:e2e:geth:ws:electron": "./scripts/test-runner.sh hardhat ws electron", + "test:e2e:geth:ws:chrome": "./scripts/test-runner.sh hardhat ws chrome", + "test:e2e:geth:ws:firefox": "./scripts/test-runner.sh hardhat ws firefox", + "test:e2e:hardhat:ws:electron": "./scripts/test-runner.sh hardhat http electron", + "test:e2e:hardhat:ws:chrome": "./scripts/test-runner.sh hardhat http chrome", + "test:e2e:hardhat:ws:firefox": "./scripts/test-runner.sh hardhat http firefox", "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:manual:long-connection-ws": "node packages/web3/test/stress/long_ws_tests/nodejs_test/long_connection_ws.js", @@ -138,6 +136,7 @@ "typedoc-plugin-merge-modules": "^5.1.0", "typescript": "^4.7.4", "utf-8-validate": "^5.0.9", + "web3-hardhat-plugin": "^1.0.0", "webpack": "^5.73.0", "webpack-cli": "^4.10.0" }, diff --git a/packages/web3-core/src/web3_request_manager.ts b/packages/web3-core/src/web3_request_manager.ts index c995edfbd20..3c6cabd0182 100644 --- a/packages/web3-core/src/web3_request_manager.ts +++ b/packages/web3-core/src/web3_request_manager.ts @@ -425,10 +425,10 @@ export class Web3RequestManager< } else if ((response as unknown) instanceof Error) { error = response as unknown as JsonRpcError; } - + // This message means that there was an error while executing the code of the smart contract // However, more processing will happen at a higher level to decode the error data, - // according to the Error ABI, if it was available as of EIP-838. + // according to the Error ABI, if it was available as of EIP-838. if (error?.message.includes('revert')) throw new ContractExecutionError(error); return false; diff --git a/packages/web3-eth-contract/test/integration/contract_accesslist.test.ts b/packages/web3-eth-contract/test/integration/contract_accesslist.test.ts index 4f9235abcfe..23934b05016 100644 --- a/packages/web3-eth-contract/test/integration/contract_accesslist.test.ts +++ b/packages/web3-eth-contract/test/integration/contract_accesslist.test.ts @@ -22,10 +22,11 @@ import { createTempAccount, describeIf, getSystemTestBackend, + BACKEND } from '../fixtures/system_test_utils'; describe('contract', () => { - describeIf(getSystemTestBackend() === 'geth')('createAccessList', () => { + describeIf(getSystemTestBackend() === BACKEND.GETH)('createAccessList', () => { let contract: Contract; let deployOptions: Record; let sendOptions: Record; diff --git a/packages/web3-eth-contract/test/integration/contract_deploy.test.ts b/packages/web3-eth-contract/test/integration/contract_deploy.test.ts index 0fbafac4d0f..1d7277fe881 100644 --- a/packages/web3-eth-contract/test/integration/contract_deploy.test.ts +++ b/packages/web3-eth-contract/test/integration/contract_deploy.test.ts @@ -29,6 +29,8 @@ import { signTxAndSendEIP1559, sendFewSampleTxs, closeOpenConnection, + getSystemTestBackend, + BACKEND } from '../fixtures/system_test_utils'; describe('contract', () => { @@ -254,9 +256,17 @@ describe('contract', () => { }); it('should fail with errors on "intrinsic gas too low" OOG', async () => { - await expect( - contract.deploy(deployOptions).send({ ...sendOptions, gas: '100' }), - ).rejects.toThrow('Returned error: intrinsic gas too low'); + if (getSystemTestBackend() !== BACKEND.HARDHAT){ + // eslint-disable-next-line jest/no-conditional-expect + await expect( + contract.deploy(deployOptions).send({ ...sendOptions, gas: '100' }), + ).rejects.toThrow('Returned error: intrinsic gas too low'); + } else { + // eslint-disable-next-line jest/no-conditional-expect + await expect( + contract.deploy(deployOptions).send({ ...sendOptions, gas: '100' }), + ).rejects.toThrow('Returned error: Transaction requires at least 109656 gas but got 100'); + } }); it('should fail with errors deploying a zero length bytecode', () => { @@ -273,14 +283,25 @@ describe('contract', () => { it('should fail with errors on revert', async () => { const revert = new Contract(DeployRevertAbi); revert.provider = getSystemTestProvider(); - // eslint-disable-next-line jest/no-standalone-expect + if (getSystemTestBackend() !== BACKEND.HARDHAT){ + // eslint-disable-next-line jest/no-conditional-expect + await expect( + revert + .deploy({ + data: DeployRevertBytecode, + }) + .send(sendOptions), + ).rejects.toThrow("code couldn't be stored"); + } else { + // eslint-disable-next-line jest/no-conditional-expect await expect( revert .deploy({ data: DeployRevertBytecode, }) .send(sendOptions), - ).rejects.toThrow("code couldn't be stored"); + ).rejects.toThrow("Error happened while trying to execute a function inside a smart contract"); + } }); }); }); diff --git a/packages/web3-eth-contract/test/integration/contract_methods.test.ts b/packages/web3-eth-contract/test/integration/contract_methods.test.ts index a661854932a..0c138d364dd 100644 --- a/packages/web3-eth-contract/test/integration/contract_methods.test.ts +++ b/packages/web3-eth-contract/test/integration/contract_methods.test.ts @@ -17,7 +17,7 @@ along with web3.js. If not, see . import { ContractExecutionError } from 'web3-errors'; import { Contract } from '../../src'; import { BasicAbi, BasicBytecode } from '../shared_fixtures/build/Basic'; -import { getSystemTestProvider, createTempAccount } from '../fixtures/system_test_utils'; +import { getSystemTestProvider, createTempAccount, getSystemTestBackend, BACKEND} from '../fixtures/system_test_utils'; describe('contract', () => { let contract: Contract; @@ -135,9 +135,9 @@ describe('contract', () => { it('should run send method of the contract if data is provided at initiation', async () => { const tempContract = new Contract(BasicAbi, { provider: getSystemTestProvider(), - input: BasicBytecode, from: acc.address, gas: '1000000', + data: BasicBytecode, }); const deployedTempContract = await tempContract .deploy({ arguments: [10, 'string init value'] }) @@ -148,23 +148,35 @@ describe('contract', () => { }); it('should returns errors on reverts', async () => { - await expect( - contractDeployed.methods.reverts().send(sendOptions), - ).rejects.toMatchObject({ - name: 'TransactionRevertedWithoutReasonError', - receipt: { - cumulativeGasUsed: BigInt(21543), - from: acc.address, - gasUsed: BigInt(21543), - logs: [], - logsBloom: - '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', - status: BigInt(0), - to: contractDeployed.options.address?.toLowerCase(), - transactionIndex: BigInt(0), - type: BigInt(2), - }, - }); + // TODO hardhat reverts but sends an undefined receipt, needs investigation + if (getSystemTestBackend() === BACKEND.HARDHAT) { + // eslint-disable-next-line jest/no-conditional-expect + await expect( + contractDeployed.methods.reverts().send(sendOptions), + ).rejects.toMatchObject({ + "name": "ContractExecutionError", + "receipt": undefined, + }); + } else { + // eslint-disable-next-line jest/no-conditional-expect + await expect( + contractDeployed.methods.reverts().send(sendOptions), + ).rejects.toMatchObject({ + name: 'TransactionRevertedWithoutReasonError', + receipt: { + cumulativeGasUsed: BigInt(21543), + from: acc.address, + gasUsed: BigInt(21543), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + status: BigInt(0), + to: contractDeployed.options.address?.toLowerCase(), + transactionIndex: BigInt(0), + type: BigInt(2), + }, + }); + } }); }); }); diff --git a/packages/web3-eth-contract/test/integration/contract_methods_errors.test.ts b/packages/web3-eth-contract/test/integration/contract_methods_errors.test.ts index ccd27987b27..7c07ee5af8d 100644 --- a/packages/web3-eth-contract/test/integration/contract_methods_errors.test.ts +++ b/packages/web3-eth-contract/test/integration/contract_methods_errors.test.ts @@ -23,6 +23,7 @@ import { createTempAccount, getSystemTestBackend, describeIf, + BACKEND, } from '../fixtures/system_test_utils'; describe('contract errors', () => { @@ -50,7 +51,7 @@ describe('contract errors', () => { contract.setProvider(getSystemTestProvider()); }); - describeIf(getSystemTestBackend() === 'geth')('Test EIP-838 Error Codes', () => { + describeIf(getSystemTestBackend() === BACKEND.GETH)('Test EIP-838 Error Codes', () => { it('Unauthorized', async () => { let error: ContractExecutionError | undefined; try { diff --git a/packages/web3-eth-personal/test/integration/personal.test.ts b/packages/web3-eth-personal/test/integration/personal.test.ts index ed2fe1311a2..d650bdc6e8b 100644 --- a/packages/web3-eth-personal/test/integration/personal.test.ts +++ b/packages/web3-eth-personal/test/integration/personal.test.ts @@ -26,9 +26,12 @@ import { getSystemTestBackend, getSystemTestProvider, itIf, + describeIf, + BACKEND } from '../fixtures/system_test_utils'; -describe('personal integration tests', () => { +// hardhat does not support personal +describeIf(getSystemTestBackend() !== BACKEND.HARDHAT)('personal integration tests', () => { let ethPersonal: Personal; let clientUrl: string | SupportedProviders; @@ -41,12 +44,12 @@ describe('personal integration tests', () => { await closeOpenConnection(ethPersonal); }); - it('new account', async () => { + test('new account', async () => { const newAccount = await ethPersonal.newAccount('!@superpassword'); expect(isHexStrict(newAccount)).toBe(true); }); - itIf(getSystemTestBackend() === 'geth')('ecRecover', async () => { + itIf(getSystemTestBackend() === BACKEND.GETH)('ecRecover', async () => { const password = '123456'; const acc = (await createTempAccount({ password })).address; // ganache does not support ecRecover @@ -56,7 +59,7 @@ describe('personal integration tests', () => { expect(toChecksumAddress(publicKey)).toBe(toChecksumAddress(acc)); }); - it('lock account', async () => { + test('lock account', async () => { const { address } = await createTempAccount(); const lockAccount = await ethPersonal.lockAccount(address); expect(lockAccount).toBe(true); @@ -74,7 +77,7 @@ describe('personal integration tests', () => { await expect(ethPersonal.sendTransaction(tx, '')).rejects.toThrow(); }); - it('unlock account', async () => { + test('unlock account', async () => { const { address } = await createTempAccount(); const unlockedAccount = await ethPersonal.unlockAccount(address, '123456', 1000); expect(unlockedAccount).toBe(true); @@ -93,7 +96,7 @@ describe('personal integration tests', () => { }); // ganache does not support sign - itIf(getSystemTestBackend() === 'geth')('sign', async () => { + itIf(getSystemTestBackend() === BACKEND.GETH)('sign', async () => { const password = '123456'; const key = (await createTempAccount({ password })).address; await ethPersonal.unlockAccount(key, password, 100000); @@ -103,7 +106,7 @@ describe('personal integration tests', () => { expect(key).toBe(address); }); - it('getAccounts', async () => { + test('getAccounts', async () => { const accountList = await ethPersonal.getAccounts(); // create a new account await ethPersonal.newAccount('cde'); @@ -111,37 +114,14 @@ describe('personal integration tests', () => { expect(updatedAccountList.length).toBeGreaterThan(accountList.length); }); - it('importRawKey', async () => { + test('importRawKey', async () => { const { address, privateKey } = createAccount(); - const rawKey = getSystemTestBackend() === 'geth' ? privateKey.slice(2) : privateKey; + const rawKey = getSystemTestBackend() === BACKEND.GETH ? privateKey.slice(2) : privateKey; const key = await ethPersonal.importRawKey(rawKey, '123456'); expect(toChecksumAddress(key).toLowerCase()).toBe(address.toLowerCase()); }); - // geth doesn't have signTransaction method - itIf(getSystemTestBackend() === 'ganache')('signTransaction', async () => { - const acc = await createNewAccount({ - privateKey: '0x43c74e0b52c754285db6fc52cc98353804e5025e38ab80d7d9e2fd53d456de84', - unlock: true, - refill: true, - }); - const tx = { - from: acc.address, - to: '0x1337C75FdF978ABABaACC038A1dCd580FeC28ab2', - value: '10000', - gas: '21000', - maxFeePerGas: '0x59682F00', - maxPriorityFeePerGas: '0x1DCD6500', - nonce: 0, - }; - const signedTx = await ethPersonal.signTransaction(tx, '123456'); - const expectedResult = - '0x02f86e82053980841dcd65008459682f00825208941337c75fdf978ababaacc038a1dcd580fec28ab282271080c001a0fef20ce4d8dd7e129bd52d08599988e74b0baad0692b9e316368896b22544162a07d69fac7625a925286dcf1be61d35c787f467b2b7e911181098d49c1ae041deb'; - // eslint-disable-next-line jest/no-standalone-expect - expect(signedTx).toEqual(expectedResult); - }); - - it('sendTransaction', async () => { + test('sendTransaction', async () => { const from = (await createNewAccount({ unlock: true, refill: true })).address; const unlockedAccount = await ethPersonal.unlockAccount(from, '123456', 1000); diff --git a/packages/web3-eth/test/e2e/e2e_utils.ts b/packages/web3-eth/test/e2e/e2e_utils.ts index 56989fc927d..80fd40196c2 100644 --- a/packages/web3-eth/test/e2e/e2e_utils.ts +++ b/packages/web3-eth/test/e2e/e2e_utils.ts @@ -23,17 +23,17 @@ along with web3.js. If not, see . * running these E2E tests that use Sepolia and Mainnet, this util exists here for now. */ -import { getSystemTestBackend } from '../fixtures/system_test_utils'; +import { getSystemTestBackend, BACKEND } from '../fixtures/system_test_utils'; // eslint-disable-next-line import/no-relative-packages import secrets from '../../../../.secrets.json'; export const getSystemE2ETestProvider = (): string => { if (process.env.WEB3_SYSTEM_TEST_MODE === 'http') { - return getSystemTestBackend() === 'sepolia' + return getSystemTestBackend() === BACKEND.SEPOLIA ? process.env.INFURA_SEPOLIA_HTTP ?? secrets.SEPOLIA.HTTP : process.env.INFURA_MAINNET_HTTP ?? secrets.MAINNET.HTTP; } - return getSystemTestBackend() === 'sepolia' + return getSystemTestBackend() === BACKEND.SEPOLIA ? process.env.INFURA_SEPOLIA_WS ?? secrets.SEPOLIA.WS : process.env.INFURA_MAINNET_WS ?? secrets.MAINNET.WS; }; @@ -42,7 +42,7 @@ export const getE2ETestAccountAddress = (): string => { if (process.env.TEST_ACCOUNT_ADDRESS !== undefined) { return process.env.TEST_ACCOUNT_ADDRESS; // eslint-disable-next-line no-else-return - } else if (getSystemTestBackend() === 'sepolia' || getSystemTestBackend() === 'mainnet') { + } else if (getSystemTestBackend() === BACKEND.SEPOLIA || getSystemTestBackend() === BACKEND.MAINNET) { return secrets[getSystemTestBackend().toUpperCase() as 'SEPOLIA' | 'MAINNET'].ACCOUNT .address; } @@ -64,7 +64,7 @@ export const getAllowedSendTransaction = (): boolean => { return Boolean(process.env.ALLOWED_SEND_TRANSACTION); // eslint-disable-next-line no-else-return - } else if (getSystemTestBackend() === 'sepolia' || getSystemTestBackend() === 'mainnet') { + } else if (getSystemTestBackend() === BACKEND.SEPOLIA || getSystemTestBackend() === BACKEND.MAINNET) { return secrets[getSystemTestBackend().toUpperCase() as 'SEPOLIA' | 'MAINNET'] .ALLOWED_SEND_TRANSACTION; } @@ -76,7 +76,7 @@ export const getE2ETestAccountPrivateKey = (): string => { if (process.env.TEST_ACCOUNT_PRIVATE_KEY !== undefined) { return process.env.TEST_ACCOUNT_PRIVATE_KEY; // eslint-disable-next-line no-else-return - } else if (getSystemTestBackend() === 'sepolia' || getSystemTestBackend() === 'mainnet') { + } else if (getSystemTestBackend() === BACKEND.SEPOLIA || getSystemTestBackend() === BACKEND.MAINNET) { return secrets[getSystemTestBackend().toUpperCase() as 'SEPOLIA' | 'MAINNET'].ACCOUNT .privateKey; } diff --git a/packages/web3-eth/test/integration/block/rpc.getBlock.test.ts b/packages/web3-eth/test/integration/block/rpc.getBlock.test.ts index ff1bf928f17..50731193bcc 100644 --- a/packages/web3-eth/test/integration/block/rpc.getBlock.test.ts +++ b/packages/web3-eth/test/integration/block/rpc.getBlock.test.ts @@ -33,6 +33,7 @@ import { describeIf, createNewAccount, refillAccount, + BACKEND } from '../../fixtures/system_test_utils'; import { BasicAbi, BasicBytecode } from '../../shared_fixtures/build/Basic'; import { toAllVariants } from '../../shared_fixtures/utils'; @@ -139,7 +140,7 @@ describe('rpc with block', () => { }); }); - describeIf(getSystemTestBackend() === 'geth')( + describeIf(getSystemTestBackend() === BACKEND.GETH)( 'getBlock calls with POS tags in POA node', () => { it.each(['safe', 'finalized'])( diff --git a/packages/web3-eth/test/integration/block/rpc.getBlockTransactionCount.test.ts b/packages/web3-eth/test/integration/block/rpc.getBlockTransactionCount.test.ts index 0782d5b02ed..ce4ad2e26a1 100644 --- a/packages/web3-eth/test/integration/block/rpc.getBlockTransactionCount.test.ts +++ b/packages/web3-eth/test/integration/block/rpc.getBlockTransactionCount.test.ts @@ -19,7 +19,6 @@ import { SupportedProviders, TransactionReceipt } from 'web3-types'; import { Contract } from 'web3-eth-contract'; import { Web3Eth } from '../../../src'; import { - getSystemTestBackend, getSystemTestProvider, createTempAccount, closeOpenConnection, @@ -99,12 +98,8 @@ describe('rpc with block', () => { }), )('getBlockTransactionCount', async ({ block }) => { const res = await web3Eth.getBlockTransactionCount(blockData[block]); - let shouldBe: number; - if (getSystemTestBackend() === 'ganache') { - shouldBe = blockData[block] === 'earliest' ? 0 : 1; - } else { - shouldBe = ['earliest', 'pending'].includes(String(blockData[block])) ? 0 : 1; - } + const shouldBe = ['earliest', 'pending'].includes(String(blockData[block])) ? 0 : 1; + expect(Number(res)).toBe(shouldBe); }); }); diff --git a/packages/web3-eth/test/integration/block/rpc.getBlockUncleCount.test.ts b/packages/web3-eth/test/integration/block/rpc.getBlockUncleCount.test.ts index 3c8902665fc..ae822a99a5a 100644 --- a/packages/web3-eth/test/integration/block/rpc.getBlockUncleCount.test.ts +++ b/packages/web3-eth/test/integration/block/rpc.getBlockUncleCount.test.ts @@ -22,12 +22,16 @@ import { getSystemTestProvider, createTempAccount, closeOpenConnection, + describeIf, + getSystemTestBackend, + BACKEND } from '../../fixtures/system_test_utils'; import { BasicAbi, BasicBytecode } from '../../shared_fixtures/build/Basic'; import { toAllVariants } from '../../shared_fixtures/utils'; import { sendFewTxes } from '../helper'; -describe('rpc with block', () => { +// hardhat does not support eth_getBlockUncleCountByBlockHash +describeIf(getSystemTestBackend() !== BACKEND.HARDHAT)('rpc with block', () => { let web3Eth: Web3Eth; let clientUrl: string | SupportedProviders; diff --git a/packages/web3-eth/test/integration/block/rpc.getUncle.test.ts b/packages/web3-eth/test/integration/block/rpc.getUncle.test.ts index 4ba7f08a91d..9b820fd9077 100644 --- a/packages/web3-eth/test/integration/block/rpc.getUncle.test.ts +++ b/packages/web3-eth/test/integration/block/rpc.getUncle.test.ts @@ -24,12 +24,16 @@ import { getSystemTestProvider, createTempAccount, closeOpenConnection, + describeIf, + getSystemTestBackend, + BACKEND } from '../../fixtures/system_test_utils'; import { BasicAbi, BasicBytecode } from '../../shared_fixtures/build/Basic'; import { toAllVariants } from '../../shared_fixtures/utils'; import { sendFewTxes } from '../helper'; -describe('rpc with block', () => { +// hardhat does not support eth_getUncle +describeIf(getSystemTestBackend() !== BACKEND.HARDHAT)('rpc with block', () => { let web3Eth: Web3Eth; let clientUrl: string | SupportedProviders; diff --git a/packages/web3-eth/test/integration/defaults.transactionBlockTimeout.test.ts b/packages/web3-eth/test/integration/defaults.transactionBlockTimeout.test.ts index d547c2bc551..fe679bb0dbe 100644 --- a/packages/web3-eth/test/integration/defaults.transactionBlockTimeout.test.ts +++ b/packages/web3-eth/test/integration/defaults.transactionBlockTimeout.test.ts @@ -31,12 +31,16 @@ import { waitForOpenConnection, createLocalAccount, sendFewSampleTxs, + getSystemTestBackend, + describeIf, + BACKEND } from '../fixtures/system_test_utils'; const MAX_32_SIGNED_INTEGER = 2147483647; const gas = 21000; +// skip if using hardhat, does not return a transaction not mined error but instead a nonce too high error /* eslint-disable jest/no-standalone-expect */ -describe('defaults', () => { +describeIf(getSystemTestBackend() !== BACKEND.HARDHAT)('defaults', () => { let web3: Web3; let clientUrl: string | SupportedProviders; let account1: Web3Account; diff --git a/packages/web3-eth/test/integration/get_revert_reason.test.ts b/packages/web3-eth/test/integration/get_revert_reason.test.ts index 9c7977c0fe4..5318b06400c 100644 --- a/packages/web3-eth/test/integration/get_revert_reason.test.ts +++ b/packages/web3-eth/test/integration/get_revert_reason.test.ts @@ -26,6 +26,7 @@ import { createTempAccount, getSystemTestBackend, getSystemTestProvider, + BACKEND } from '../fixtures/system_test_utils'; describe('Web3Eth.getRevertReason', () => { @@ -58,16 +59,16 @@ describe('Web3Eth.getRevertReason', () => { const response = await getRevertReason(web3Eth, transaction); switch (getSystemTestBackend()) { - case 'geth': + case BACKEND.GETH: expect(response).toMatchObject({ reason: 'execution reverted: This is a call revert', signature: '0x08c379a0', data: '000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612063616c6c207265766572740000000000000000000000', }); break; - case 'ganache': + case BACKEND.HARDHAT: expect(response).toMatchObject({ - reason: 'VM Exception while processing transaction: revert This is a call revert', + reason: "Error: VM Exception while processing transaction: reverted with reason string 'This is a call revert'", signature: '0x08c379a0', data: '000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612063616c6c207265766572740000000000000000000000', }); @@ -89,16 +90,16 @@ describe('Web3Eth.getRevertReason', () => { const response = await getRevertReason(web3Eth, transaction); switch (getSystemTestBackend()) { - case 'geth': + case BACKEND.GETH: expect(response).toMatchObject({ reason: 'execution reverted: This is a send revert', signature: '0x08c379a0', data: '000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612073656e64207265766572740000000000000000000000', }); break; - case 'ganache': + case BACKEND.HARDHAT: expect(response).toMatchObject({ - reason: 'VM Exception while processing transaction: revert This is a send revert', + reason: "Error: VM Exception while processing transaction: reverted with reason string 'This is a send revert'", signature: '0x08c379a0', data: '000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612073656e64207265766572740000000000000000000000', }); @@ -120,13 +121,13 @@ describe('Web3Eth.getRevertReason', () => { const response = await getRevertReason(web3Eth, transaction); switch (getSystemTestBackend()) { - case 'geth': + case BACKEND.GETH: expect(response).toBe( 'err: intrinsic gas too low: have 0, want 21544 (supplied gas 0)', ); break; - case 'ganache': - expect(response).toBe('VM Exception while processing transaction: out of gas'); + case BACKEND.HARDHAT: + expect(response).toContain('Error: base fee exceeds gas limit'); break; default: throw new Error( @@ -144,7 +145,7 @@ describe('Web3Eth.getRevertReason', () => { const response = await getRevertReason(web3Eth, transaction, SimpleRevertAbi); switch (getSystemTestBackend()) { - case 'geth': + case BACKEND.GETH: expect(response).toMatchObject({ data: '', reason: 'execution reverted', @@ -154,10 +155,10 @@ describe('Web3Eth.getRevertReason', () => { customErrorArguments: {}, }); break; - case 'ganache': + case BACKEND.HARDHAT: expect(response).toMatchObject({ data: '', - reason: 'VM Exception while processing transaction: revert', + reason: "Error: VM Exception while processing transaction: reverted with an unrecognized custom error (return data: 0x72090e4d)", signature: '0x72090e4d', customErrorName: 'ErrorWithNoParams', customErrorDecodedSignature: 'ErrorWithNoParams()', @@ -180,7 +181,7 @@ describe('Web3Eth.getRevertReason', () => { const response = await getRevertReason(web3Eth, transaction, SimpleRevertAbi); switch (getSystemTestBackend()) { - case 'geth': + case BACKEND.GETH: expect(response).toMatchObject({ data: '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', reason: 'execution reverted', @@ -193,10 +194,10 @@ describe('Web3Eth.getRevertReason', () => { }, }); break; - case 'ganache': + case BACKEND.HARDHAT: expect(response).toMatchObject({ data: '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', - reason: 'VM Exception while processing transaction: revert', + reason: "Error: VM Exception while processing transaction: reverted with an unrecognized custom error (return data: 0xc85bda60000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000)", signature: '0xc85bda60', customErrorName: 'ErrorWithParams', customErrorDecodedSignature: 'ErrorWithParams(uint256,string)', diff --git a/packages/web3-eth/test/integration/nonce.test.ts b/packages/web3-eth/test/integration/nonce.test.ts index 806db34985f..201c0728d5f 100644 --- a/packages/web3-eth/test/integration/nonce.test.ts +++ b/packages/web3-eth/test/integration/nonce.test.ts @@ -24,7 +24,9 @@ import { closeOpenConnection, createAccount, createLocalAccount, + getSystemTestBackend, getSystemTestProvider, + BACKEND } from '../fixtures/system_test_utils'; const gas = 30000; @@ -84,10 +86,13 @@ describe('defaults', () => { web3Eth.transactionPollingTimeout / 1000 } seconds`, ); - } else { - throw error; - } + } else if (getSystemTestBackend() === BACKEND.HARDHAT){ + // eslint-disable-next-line jest/no-conditional-expect + expect((error as any).message).toContain("Nonce too high") + } else { + throw error; } - }); + } + }); }); }); diff --git a/packages/web3-eth/test/integration/rpc.test.ts b/packages/web3-eth/test/integration/rpc.test.ts index c8d8d68d34a..d9ca6e5676b 100644 --- a/packages/web3-eth/test/integration/rpc.test.ts +++ b/packages/web3-eth/test/integration/rpc.test.ts @@ -36,6 +36,8 @@ import { createNewAccount, itIf, createTempAccount, + describeIf, + BACKEND } from '../fixtures/system_test_utils'; import { BasicAbi, BasicBytecode } from '../shared_fixtures/build/Basic'; import { @@ -84,7 +86,7 @@ describe('rpc', () => { }); describe('methods', () => { - itIf(!['geth'].includes(getSystemTestBackend()))('getProtocolVersion', async () => { + itIf(!['geth', 'hardhat'].includes(getSystemTestBackend()))('getProtocolVersion', async () => { const version = await web3Eth.getProtocolVersion(); // eslint-disable-next-line jest/no-standalone-expect expect(parseInt(version, 16)).toBeGreaterThan(0); @@ -103,27 +105,38 @@ describe('rpc', () => { expect(coinbase).toHaveLength(42); }); - it('isMining', async () => { + itIf(getSystemTestBackend() !== BACKEND.HARDHAT)('isMining', async () => { const isMining = await web3Eth.isMining(); - if (getSystemTestBackend() !== 'geth') - // eslint-disable-next-line jest/no-conditional-expect + if (getSystemTestBackend() !== BACKEND.GETH) + // eslint-disable-next-line jest/no-conditional-expect, jest/no-standalone-expect expect(isMining).toBe(true); }); - it.each(Object.values(FMT_NUMBER))('getHashRate', async format => { - const hashRate = await web3Eth.getHashRate({ - number: format as FMT_NUMBER, - bytes: FMT_BYTES.HEX, + describeIf(getSystemTestBackend() !== BACKEND.HARDHAT)('getHashRate', () => { + it.each(Object.values(FMT_NUMBER))('getHashRate', async format => { + const hashRate = await web3Eth.getHashRate({ + number: format as FMT_NUMBER, + bytes: FMT_BYTES.HEX, + }); + // eslint-disable-next-line jest/no-standalone-expect + expect(typeof hashRate).toBe(mapFormatToType[format as string]); }); - expect(typeof hashRate).toBe(mapFormatToType[format as string]); - }); + }) it('getAccounts', async () => { - const account = await createNewAccount({ unlock: true }); - const accList = await web3Eth.getAccounts(); - const accListLowerCase = accList.map((add: string) => add.toLowerCase()); - expect(accListLowerCase).toContain(account.address.toLowerCase()); + // hardhat does not have support importrawkey, so we can't add new accounts rather just check the default 20 accounts + if (getSystemTestBackend() !== BACKEND.HARDHAT) { + const account = await createNewAccount({ unlock: true }); + const accList = await web3Eth.getAccounts(); + const accListLowerCase = accList.map((add: string) => add.toLowerCase()); + // eslint-disable-next-line jest/no-conditional-expect + expect(accListLowerCase).toContain(account.address.toLowerCase()); + } else { + const accList = await web3Eth.getAccounts(); + // eslint-disable-next-line jest/no-conditional-expect + expect(accList).toHaveLength(20); + } }); it.each(Object.values(FMT_NUMBER))('getBlockNumber', async format => { @@ -393,12 +406,6 @@ describe('rpc', () => { expect(res).toBeDefined(); }); - itIf(!['ganache', 'geth'].includes(getSystemTestBackend()))('getWork', async () => { - const res = await web3Eth.getWork(); - // eslint-disable-next-line jest/no-standalone-expect - expect(res[0]).toBeDefined(); - }); - itIf(!['geth', 'ganache'].includes(getSystemTestBackend()))('requestAccounts', () => { // const res = await web3Eth.requestAccounts(); // eslint-disable-next-line jest/no-standalone-expect @@ -406,7 +413,8 @@ describe('rpc', () => { // expect(res[0]).toEqual(tempAcc.address); }); - itIf(getSystemTestBackend() !== 'ganache')('getProof', async () => { + // hardhat does not support getProof + itIf(getSystemTestBackend() !== BACKEND.HARDHAT)('getProof', async () => { const numberData = BigInt(10); const stringData = 'str'; const boolData = true; diff --git a/packages/web3-eth/test/integration/web3_eth/createAccessList.test.ts b/packages/web3-eth/test/integration/web3_eth/createAccessList.test.ts index ae8ecc64f50..3e1186c3cda 100644 --- a/packages/web3-eth/test/integration/web3_eth/createAccessList.test.ts +++ b/packages/web3-eth/test/integration/web3_eth/createAccessList.test.ts @@ -22,9 +22,10 @@ import { describeIf, getSystemTestBackend, getSystemTestProvider, + BACKEND } from '../../fixtures/system_test_utils'; -describeIf(getSystemTestBackend() === 'geth')('Web3Eth.createAccessList', () => { +describeIf(getSystemTestBackend() === BACKEND.GETH)('Web3Eth.createAccessList', () => { let web3Eth: Web3Eth; let greeterContractAddress: string; let tempAcc: { address: string; privateKey: string }; diff --git a/packages/web3-eth/test/integration/web3_eth/estimate_gas.test.ts b/packages/web3-eth/test/integration/web3_eth/estimate_gas.test.ts index b03d779c0ab..e26de249a3e 100644 --- a/packages/web3-eth/test/integration/web3_eth/estimate_gas.test.ts +++ b/packages/web3-eth/test/integration/web3_eth/estimate_gas.test.ts @@ -23,6 +23,8 @@ import { getSystemTestProvider, itIf, isGeth, + getSystemTestBackend, + BACKEND } from '../../fixtures/system_test_utils'; describe('Web3Eth.estimateGas', () => { @@ -45,7 +47,13 @@ describe('Web3Eth.estimateGas', () => { value: '0x1', }; const response = await web3Eth.estimateGas(transaction); - expect(response).toBe(BigInt(21000)); + if (getSystemTestBackend() === BACKEND.HARDHAT) { + // eslint-disable-next-line jest/no-conditional-expect + expect(response).toBe(BigInt(21001)); + } else { + // eslint-disable-next-line jest/no-conditional-expect + expect(response).toBe(BigInt(21000)); + } }); itIf(isGeth)('should estimate a contract deployment', async () => { diff --git a/packages/web3-eth/test/integration/web3_eth/getFeeHistory.test.ts b/packages/web3-eth/test/integration/web3_eth/getFeeHistory.test.ts index c33eab71452..fd8aec67383 100644 --- a/packages/web3-eth/test/integration/web3_eth/getFeeHistory.test.ts +++ b/packages/web3-eth/test/integration/web3_eth/getFeeHistory.test.ts @@ -22,10 +22,11 @@ import { describeIf, getSystemTestBackend, closeOpenConnection, + BACKEND } from '../../fixtures/system_test_utils'; import { feeHistorySchema } from '../../../src/schemas'; -describeIf(getSystemTestBackend().includes('geth'))('Web3Eth.getFeeHistory', () => { +describeIf(getSystemTestBackend().includes(BACKEND.GETH))('Web3Eth.getFeeHistory', () => { let web3Eth: Web3Eth; let systemProvider: string | SupportedProviders; diff --git a/packages/web3-eth/test/integration/web3_eth/send_signed_transaction.test.ts b/packages/web3-eth/test/integration/web3_eth/send_signed_transaction.test.ts index 66587e6e90f..f74a12938ac 100644 --- a/packages/web3-eth/test/integration/web3_eth/send_signed_transaction.test.ts +++ b/packages/web3-eth/test/integration/web3_eth/send_signed_transaction.test.ts @@ -37,13 +37,16 @@ import { createTempAccount, getSystemTestBackend, getSystemTestProvider, + describeIf, + BACKEND } from '../../fixtures/system_test_utils'; import { getTransactionGasPricing } from '../../../src/utils/get_transaction_gas_pricing'; import { SimpleRevertAbi, SimpleRevertDeploymentData } from '../../fixtures/simple_revert'; const HEX_NUMBER_DATA_FORMAT = { bytes: FMT_BYTES.HEX, number: FMT_NUMBER.HEX } as const; -describe('Web3Eth.sendSignedTransaction', () => { +// hardhat does not support eth_signTransaction +describeIf(getSystemTestBackend() !== BACKEND.HARDHAT)('Web3Eth.sendSignedTransaction', () => { let web3Eth: Web3Eth; let tempAcc: { address: string; privateKey: string }; @@ -226,7 +229,7 @@ describe('Web3Eth.sendSignedTransaction', () => { }); }); - it('should send a signed contract deployment', async () => { + test('should send a signed contract deployment', async () => { const greeterContractDeploymentData = '0x60806040523480156200001157600080fd5b5060405162000a6a38038062000a6a8339818101604052810190620000379190620002a4565b80600090805190602001906200004f92919062000057565b505062000359565b828054620000659062000324565b90600052602060002090601f016020900481019282620000895760008555620000d5565b82601f10620000a457805160ff1916838001178555620000d5565b82800160010185558215620000d5579182015b82811115620000d4578251825591602001919060010190620000b7565b5b509050620000e49190620000e8565b5090565b5b8082111562000103576000816000905550600101620000e9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001708262000125565b810181811067ffffffffffffffff8211171562000192576200019162000136565b5b80604052505050565b6000620001a762000107565b9050620001b5828262000165565b919050565b600067ffffffffffffffff821115620001d857620001d762000136565b5b620001e38262000125565b9050602081019050919050565b60005b8381101562000210578082015181840152602081019050620001f3565b8381111562000220576000848401525b50505050565b60006200023d6200023784620001ba565b6200019b565b9050828152602081018484840111156200025c576200025b62000120565b5b62000269848285620001f0565b509392505050565b600082601f8301126200028957620002886200011b565b5b81516200029b84826020860162000226565b91505092915050565b600060208284031215620002bd57620002bc62000111565b5b600082015167ffffffffffffffff811115620002de57620002dd62000116565b5b620002ec8482850162000271565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200033d57607f821691505b602082108103620003535762000352620002f5565b5b50919050565b61070180620003696000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a41368621461003b578063cfae32171461006c575b600080fd5b6100556004803603810190610050919061043f565b61008a565b60405161006392919061052b565b60405180910390f35b6100746101b0565b604051610081919061055b565b60405180910390f35b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756000846040516100c0929190610672565b60405180910390a182600090805190602001906100de929190610242565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600060405161010f91906106a9565b60405180910390a160016000808054610127906105ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610153906105ac565b80156101a05780601f10610175576101008083540402835291602001916101a0565b820191906000526020600020905b81548152906001019060200180831161018357829003601f168201915b5050505050905091509150915091565b6060600080546101bf906105ac565b80601f01602080910402602001604051908101604052809291908181526020018280546101eb906105ac565b80156102385780601f1061020d57610100808354040283529160200191610238565b820191906000526020600020905b81548152906001019060200180831161021b57829003601f168201915b5050505050905090565b82805461024e906105ac565b90600052602060002090601f01602090048101928261027057600085556102b7565b82601f1061028957805160ff19168380011785556102b7565b828001600101855582156102b7579182015b828111156102b657825182559160200191906001019061029b565b5b5090506102c491906102c8565b5090565b5b808211156102e15760008160009055506001016102c9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61034c82610303565b810181811067ffffffffffffffff8211171561036b5761036a610314565b5b80604052505050565b600061037e6102e5565b905061038a8282610343565b919050565b600067ffffffffffffffff8211156103aa576103a9610314565b5b6103b382610303565b9050602081019050919050565b82818337600083830152505050565b60006103e26103dd8461038f565b610374565b9050828152602081018484840111156103fe576103fd6102fe565b5b6104098482856103c0565b509392505050565b600082601f830112610426576104256102f9565b5b81356104368482602086016103cf565b91505092915050565b600060208284031215610455576104546102ef565b5b600082013567ffffffffffffffff811115610473576104726102f4565b5b61047f84828501610411565b91505092915050565b60008115159050919050565b61049d81610488565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104dd5780820151818401526020810190506104c2565b838111156104ec576000848401525b50505050565b60006104fd826104a3565b61050781856104ae565b93506105178185602086016104bf565b61052081610303565b840191505092915050565b60006040820190506105406000830185610494565b818103602083015261055281846104f2565b90509392505050565b6000602082019050818103600083015261057581846104f2565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806105c457607f821691505b6020821081036105d7576105d661057d565b5b50919050565b60008190508160005260206000209050919050565b600081546105ff816105ac565b61060981866104ae565b94506001821660008114610624576001811461063657610669565b60ff1983168652602086019350610669565b61063f856105dd565b60005b8381101561066157815481890152600182019150602081019050610642565b808801955050505b50505092915050565b6000604082019050818103600083015261068c81856105f2565b905081810360208301526106a081846104f2565b90509392505050565b600060208201905081810360008301526106c381846105f2565b90509291505056fea2646970667358221220fe0f28c9f8ef0a13a95934b974e7bc2ca6762b40a5b93ccd6ca2038f454bf52764736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017736f6c79656e7420677265656e2069732070656f706c65000000000000000000'; const accountNonce = await web3Eth.getTransactionCount( @@ -411,7 +414,7 @@ describe('Web3Eth.sendSignedTransaction', () => { name: 'TransactionRevertInstructionError', cause: undefined, reason: - getSystemTestBackend() === 'geth' + getSystemTestBackend() === BACKEND.GETH ? expect.stringContaining( 'err: max fee per gas less than block base fee: address 0x', ) @@ -447,7 +450,7 @@ describe('Web3Eth.sendSignedTransaction', () => { message: 'Transaction has been reverted by the EVM', cause: undefined, reason: - getSystemTestBackend() === 'geth' + getSystemTestBackend() === BACKEND.GETH ? expect.stringContaining( 'err: insufficient funds for gas * price + value: address 0x', ) @@ -485,7 +488,7 @@ describe('Web3Eth.sendSignedTransaction', () => { name: 'TransactionRevertInstructionError', code: 402, reason: - getSystemTestBackend() === 'geth' + getSystemTestBackend() === BACKEND.GETH ? 'execution reverted: This is a send revert' : 'VM Exception while processing transaction: revert This is a send revert', signature: '0x08c379a0', @@ -520,7 +523,7 @@ describe('Web3Eth.sendSignedTransaction', () => { name: 'TransactionRevertWithCustomError', code: 438, reason: - getSystemTestBackend() === 'geth' + getSystemTestBackend() === BACKEND.GETH ? 'execution reverted' : 'VM Exception while processing transaction: revert', signature: '0x72090e4d', @@ -559,7 +562,7 @@ describe('Web3Eth.sendSignedTransaction', () => { name: 'TransactionRevertWithCustomError', code: 438, reason: - getSystemTestBackend() === 'geth' + getSystemTestBackend() === BACKEND.GETH ? 'execution reverted' : 'VM Exception while processing transaction: revert', signature: '0xc85bda60', @@ -602,7 +605,7 @@ describe('Web3Eth.sendSignedTransaction', () => { name: 'TransactionRevertInstructionError', cause: undefined, reason: - getSystemTestBackend() === 'geth' + getSystemTestBackend() === BACKEND.GETH ? 'execution reverted: This is a send revert' : 'VM Exception while processing transaction: revert This is a send revert', signature: '0x08c379a0', diff --git a/packages/web3-eth/test/integration/web3_eth/send_transaction.test.ts b/packages/web3-eth/test/integration/web3_eth/send_transaction.test.ts index 27be74bc7a9..a5203a93332 100644 --- a/packages/web3-eth/test/integration/web3_eth/send_transaction.test.ts +++ b/packages/web3-eth/test/integration/web3_eth/send_transaction.test.ts @@ -37,6 +37,8 @@ import { createTempAccount, getSystemTestBackend, getSystemTestProvider, + itIf, + BACKEND } from '../../fixtures/system_test_utils'; import { SimpleRevertAbi, SimpleRevertDeploymentData } from '../../fixtures/simple_revert'; @@ -494,22 +496,33 @@ describe('Web3Eth.sendTransaction', () => { name: 'TransactionRevertInstructionError', code: 402, reason: - getSystemTestBackend() === 'geth' + getSystemTestBackend() === BACKEND.GETH ? 'err: intrinsic gas too low: have 1, want 21000 (supplied gas 1)' - : 'VM Exception while processing transaction: out of gas', + : 'base fee exceeds gas limit', }; - - await expect( - web3Eth - .sendTransaction(transaction) - .on('error', error => expect(error).toMatchObject(expectedThrownError)), - ).rejects.toMatchObject(expectedThrownError); + + if(getSystemTestBackend() !== BACKEND.HARDHAT){ + await expect( + web3Eth + .sendTransaction(transaction) + .on('error', error => expect(error).toMatchObject(expectedThrownError)), + ).rejects.toMatchObject(expectedThrownError); + } else { + + try { + await web3Eth.sendTransaction(transaction); + } catch (error) { + expect((error as any).name).toEqual(expectedThrownError.name); + expect((error as any).code).toEqual(expectedThrownError.code); + expect((error as any).reason).toContain(expectedThrownError.reason); + } + } }); - it('Should throw TransactionRevertInstructionError because insufficient funds', async () => { + itIf(getSystemTestBackend() !== BACKEND.HARDHAT)('Should throw TransactionRevertInstructionError because insufficient funds', async () => { const transaction: Transaction = { from: tempAcc.address, to: '0x0000000000000000000000000000000000000000', - value: BigInt('999999999999999999999999999999999999999999999999999999999'), + value: BigInt('99999999999999999999999999999999999999999999999999999999999999999'), }; const expectedThrownError = { @@ -517,16 +530,18 @@ describe('Web3Eth.sendTransaction', () => { message: 'Transaction has been reverted by the EVM', code: 402, reason: - getSystemTestBackend() === 'geth' + getSystemTestBackend() === BACKEND.GETH ? expect.stringContaining( 'err: insufficient funds for gas * price + value: address', ) : 'VM Exception while processing transaction: insufficient balance', }; + // eslint-disable-next-line jest/no-standalone-expect await expect( web3Eth .sendTransaction(transaction) + // eslint-disable-next-line jest/no-standalone-expect .on('error', error => expect(error).toMatchObject(expectedThrownError)), ).rejects.toMatchObject(expectedThrownError); }); @@ -544,9 +559,9 @@ describe('Web3Eth.sendTransaction', () => { name: 'TransactionRevertInstructionError', code: 402, reason: - getSystemTestBackend() === 'geth' + getSystemTestBackend() === BACKEND.GETH ? 'execution reverted: This is a send revert' - : 'VM Exception while processing transaction: revert This is a send revert', + : "Error: VM Exception while processing transaction: reverted with reason string 'This is a send revert'", signature: '0x08c379a0', data: '000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612073656e64207265766572740000000000000000000000', receipt: undefined, @@ -572,9 +587,9 @@ describe('Web3Eth.sendTransaction', () => { name: 'TransactionRevertWithCustomError', code: 438, reason: - getSystemTestBackend() === 'geth' + getSystemTestBackend() === BACKEND.GETH ? 'execution reverted' - : 'VM Exception while processing transaction: revert', + : "Error: VM Exception while processing transaction: reverted with an unrecognized custom error (return data: 0x72090e4d)", signature: '0x72090e4d', customErrorName: 'ErrorWithNoParams', customErrorDecodedSignature: 'ErrorWithNoParams()', @@ -602,9 +617,9 @@ describe('Web3Eth.sendTransaction', () => { name: 'TransactionRevertWithCustomError', code: 438, reason: - getSystemTestBackend() === 'geth' + getSystemTestBackend() === BACKEND.GETH ? 'execution reverted' - : 'VM Exception while processing transaction: revert', + : "Error: VM Exception while processing transaction: reverted with an unrecognized custom error (return data: 0xc85bda60000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000)", signature: '0xc85bda60', data: '000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001c5468697320697320616e206572726f72207769746820706172616d7300000000', customErrorName: 'ErrorWithParams', @@ -636,13 +651,13 @@ describe('Web3Eth.sendTransaction', () => { name: 'TransactionRevertInstructionError', code: 402, reason: - getSystemTestBackend() === 'geth' + getSystemTestBackend() === BACKEND.GETH ? 'execution reverted: This is a send revert' - : 'VM Exception while processing transaction: revert This is a send revert', + : "Error: VM Exception while processing transaction: reverted with reason string 'This is a send revert'", signature: '0x08c379a0', data: '000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000155468697320697320612073656e64207265766572740000000000000000000000', }; - + await expect( web3Eth .sendTransaction(transaction) diff --git a/packages/web3-eth/test/integration/web3_eth/sign.test.ts b/packages/web3-eth/test/integration/web3_eth/sign.test.ts index d07ed4273b6..b468dbb1cb0 100644 --- a/packages/web3-eth/test/integration/web3_eth/sign.test.ts +++ b/packages/web3-eth/test/integration/web3_eth/sign.test.ts @@ -21,7 +21,9 @@ import { Web3Eth } from '../../../src'; import { closeOpenConnection, createTempAccount, + getSystemTestBackend, getSystemTestProvider, + BACKEND } from '../../fixtures/system_test_utils'; describe('Web3Eth.sign', () => { @@ -38,8 +40,17 @@ describe('Web3Eth.sign', () => { }); it('should sign message', async () => { - const message = '0x736f796c656e7420677265656e2069732070656f706c65'; - const response = await web3Eth.sign(message, tempAcc.address); - expect(isHexStrict(response as string)).toBe(true); + if (getSystemTestBackend() === BACKEND.HARDHAT) { + const message = '0x736f796c656e7420677265656e2069732070656f706c65'; + const accounts = await web3Eth.getAccounts(); + const response = await web3Eth.sign(message, accounts[0]); + // eslint-disable-next-line jest/no-conditional-expect + expect(isHexStrict(response as string)).toBe(true); + } else { + const message = '0x736f796c656e7420677265656e2069732070656f706c65'; + const response = await web3Eth.sign(message, tempAcc.address); + // eslint-disable-next-line jest/no-conditional-expect + expect(isHexStrict(response as string)).toBe(true); + } }); }); diff --git a/packages/web3-eth/test/integration/web3_eth/sign_transaction.test.ts b/packages/web3-eth/test/integration/web3_eth/sign_transaction.test.ts index be0e09c1782..317c180519f 100644 --- a/packages/web3-eth/test/integration/web3_eth/sign_transaction.test.ts +++ b/packages/web3-eth/test/integration/web3_eth/sign_transaction.test.ts @@ -21,9 +21,13 @@ import { closeOpenConnection, createTempAccount, getSystemTestProvider, + describeIf, + getSystemTestBackend, + BACKEND } from '../../fixtures/system_test_utils'; -describe('Web3Eth.signTransaction', () => { +// hardhat does not support eth_signtransaction +describeIf(getSystemTestBackend() !== BACKEND.HARDHAT)('Web3Eth.signTransaction', () => { let web3Eth: Web3Eth; let tempAcc: { address: string; privateKey: string }; @@ -36,7 +40,7 @@ describe('Web3Eth.signTransaction', () => { await closeOpenConnection(web3Eth); }); - it('should sign a simple value transfer', async () => { + test('should sign a simple value transfer', async () => { const nonce = await web3Eth.getTransactionCount(tempAcc.address); const transaction: Transaction = { from: tempAcc.address, @@ -69,7 +73,7 @@ describe('Web3Eth.signTransaction', () => { expect(response.tx.s).toMatch(/0[xX][0-9a-fA-F]{64}/); }); - it('should sign a contract deployment', async () => { + test('should sign a contract deployment', async () => { const greeterContractDeploymentData = '0x60806040523480156200001157600080fd5b5060405162000a6a38038062000a6a8339818101604052810190620000379190620002a4565b80600090805190602001906200004f92919062000057565b505062000359565b828054620000659062000324565b90600052602060002090601f016020900481019282620000895760008555620000d5565b82601f10620000a457805160ff1916838001178555620000d5565b82800160010185558215620000d5579182015b82811115620000d4578251825591602001919060010190620000b7565b5b509050620000e49190620000e8565b5090565b5b8082111562000103576000816000905550600101620000e9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001708262000125565b810181811067ffffffffffffffff8211171562000192576200019162000136565b5b80604052505050565b6000620001a762000107565b9050620001b5828262000165565b919050565b600067ffffffffffffffff821115620001d857620001d762000136565b5b620001e38262000125565b9050602081019050919050565b60005b8381101562000210578082015181840152602081019050620001f3565b8381111562000220576000848401525b50505050565b60006200023d6200023784620001ba565b6200019b565b9050828152602081018484840111156200025c576200025b62000120565b5b62000269848285620001f0565b509392505050565b600082601f8301126200028957620002886200011b565b5b81516200029b84826020860162000226565b91505092915050565b600060208284031215620002bd57620002bc62000111565b5b600082015167ffffffffffffffff811115620002de57620002dd62000116565b5b620002ec8482850162000271565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200033d57607f821691505b602082108103620003535762000352620002f5565b5b50919050565b61070180620003696000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a41368621461003b578063cfae32171461006c575b600080fd5b6100556004803603810190610050919061043f565b61008a565b60405161006392919061052b565b60405180910390f35b6100746101b0565b604051610081919061055b565b60405180910390f35b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756000846040516100c0929190610672565b60405180910390a182600090805190602001906100de929190610242565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600060405161010f91906106a9565b60405180910390a160016000808054610127906105ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610153906105ac565b80156101a05780601f10610175576101008083540402835291602001916101a0565b820191906000526020600020905b81548152906001019060200180831161018357829003601f168201915b5050505050905091509150915091565b6060600080546101bf906105ac565b80601f01602080910402602001604051908101604052809291908181526020018280546101eb906105ac565b80156102385780601f1061020d57610100808354040283529160200191610238565b820191906000526020600020905b81548152906001019060200180831161021b57829003601f168201915b5050505050905090565b82805461024e906105ac565b90600052602060002090601f01602090048101928261027057600085556102b7565b82601f1061028957805160ff19168380011785556102b7565b828001600101855582156102b7579182015b828111156102b657825182559160200191906001019061029b565b5b5090506102c491906102c8565b5090565b5b808211156102e15760008160009055506001016102c9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61034c82610303565b810181811067ffffffffffffffff8211171561036b5761036a610314565b5b80604052505050565b600061037e6102e5565b905061038a8282610343565b919050565b600067ffffffffffffffff8211156103aa576103a9610314565b5b6103b382610303565b9050602081019050919050565b82818337600083830152505050565b60006103e26103dd8461038f565b610374565b9050828152602081018484840111156103fe576103fd6102fe565b5b6104098482856103c0565b509392505050565b600082601f830112610426576104256102f9565b5b81356104368482602086016103cf565b91505092915050565b600060208284031215610455576104546102ef565b5b600082013567ffffffffffffffff811115610473576104726102f4565b5b61047f84828501610411565b91505092915050565b60008115159050919050565b61049d81610488565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104dd5780820151818401526020810190506104c2565b838111156104ec576000848401525b50505050565b60006104fd826104a3565b61050781856104ae565b93506105178185602086016104bf565b61052081610303565b840191505092915050565b60006040820190506105406000830185610494565b818103602083015261055281846104f2565b90509392505050565b6000602082019050818103600083015261057581846104f2565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806105c457607f821691505b6020821081036105d7576105d661057d565b5b50919050565b60008190508160005260206000209050919050565b600081546105ff816105ac565b61060981866104ae565b94506001821660008114610624576001811461063657610669565b60ff1983168652602086019350610669565b61063f856105dd565b60005b8381101561066157815481890152600182019150602081019050610642565b808801955050505b50505092915050565b6000604082019050818103600083015261068c81856105f2565b905081810360208301526106a081846104f2565b90509392505050565b600060208201905081810360008301526106c381846105f2565b90509291505056fea2646970667358221220fe0f28c9f8ef0a13a95934b974e7bc2ca6762b40a5b93ccd6ca2038f454bf52764736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017736f6c79656e7420677265656e2069732070656f706c65000000000000000000'; const nonce = await web3Eth.getTransactionCount(tempAcc.address); diff --git a/packages/web3-eth/test/integration/web3_eth/sign_typed_data.test.ts b/packages/web3-eth/test/integration/web3_eth/sign_typed_data.test.ts index 741690bc47f..04f5f19b9cb 100644 --- a/packages/web3-eth/test/integration/web3_eth/sign_typed_data.test.ts +++ b/packages/web3-eth/test/integration/web3_eth/sign_typed_data.test.ts @@ -121,86 +121,4 @@ describe('Web3Eth.signTypedData', () => { expect(recoveredAddress).toBe(tempAcc.address); }, ); - - itIf(getSystemTestBackend() === 'ganache')( - 'should sign the typed data (using legacy RPC method), return the signature, and recover the correct ETH address', - async () => { - const typedData = { - types: { - EIP712Domain: [ - { - name: 'name', - type: 'string', - }, - { - name: 'version', - type: 'string', - }, - { - name: 'chainId', - type: 'uint256', - }, - { - name: 'verifyingContract', - type: 'address', - }, - ], - Person: [ - { - name: 'name', - type: 'string', - }, - { - name: 'wallet', - type: 'address', - }, - ], - Mail: [ - { - name: 'from', - type: 'Person', - }, - { - name: 'to', - type: 'Person', - }, - { - name: 'contents', - type: 'string', - }, - ], - }, - primaryType: 'Mail', - domain: { - name: 'Ether Mail', - version: '1', - chainId: 1, - verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC', - }, - message: { - from: { - name: 'Cow', - wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', - }, - to: { - name: 'Bob', - wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', - }, - contents: 'Hello, Bob!', - }, - }; - const encodedTypedDataHash = getEncodedEip712Data(typedData, true); - const signature = await web3Eth.signTypedData(tempAcc.address, typedData, true); - const r = toUint8Array(signature.slice(0, 66)); - const s = toUint8Array(`0x${signature.slice(66, 130)}`); - const v = BigInt(hexToNumber(`0x${signature.slice(130, 132)}`)); - const recoveredPublicKey = bytesToHex( - ecrecover(toUint8Array(encodedTypedDataHash), v, r, s), - ); - - const recoveredAddress = `0x${keccak256(bytesToHex(recoveredPublicKey)).slice(-40)}`; - // eslint-disable-next-line jest/no-standalone-expect - expect(recoveredAddress).toBe(tempAcc.address); - }, - ); }); diff --git a/packages/web3-eth/test/integration/web3_eth/submit_work.test.ts b/packages/web3-eth/test/integration/web3_eth/submit_work.test.ts index e8541bb60ca..d3817d551b4 100644 --- a/packages/web3-eth/test/integration/web3_eth/submit_work.test.ts +++ b/packages/web3-eth/test/integration/web3_eth/submit_work.test.ts @@ -21,6 +21,7 @@ import { getSystemTestBackend, getSystemTestProvider, itIf, + BACKEND } from '../../fixtures/system_test_utils'; describe('Web3Eth.submitWork', () => { @@ -34,8 +35,8 @@ describe('Web3Eth.submitWork', () => { await closeOpenConnection(web3Eth); }); - // Geth doesn't support eth_submitWork - itIf(getSystemTestBackend() !== 'geth')('should submit work', async () => { + // Hardhat and Geth doesn't support eth_submitWork + itIf(getSystemTestBackend() !== BACKEND.GETH && getSystemTestBackend() !== BACKEND.HARDHAT)('should submit work', async () => { const response = await web3Eth.submitWork( '0x0000000000000001', '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', diff --git a/packages/web3-net/test/integration/web3_net.test.ts b/packages/web3-net/test/integration/web3_net.test.ts index f0786d45f60..60b0438f555 100644 --- a/packages/web3-net/test/integration/web3_net.test.ts +++ b/packages/web3-net/test/integration/web3_net.test.ts @@ -40,7 +40,8 @@ describe('Web3 net', () => { it('should be able to get id', async () => { const networkId = await web3Net.getId(); - expect(networkId).toBe(BigInt(1337)); + // eslint-disable-next-line jest/no-conditional-expect + expect(networkId).toBe(BigInt(1337)); }); it('should be able to listen', async () => { diff --git a/packages/web3/hardhat.config.js b/packages/web3/hardhat.config.js deleted file mode 100644 index 18ce0e6b00d..00000000000 --- a/packages/web3/hardhat.config.js +++ /dev/null @@ -1,3 +0,0 @@ -// A dummy file to prevent `hardhat` from throwing -// "HardhatError: HH1: You are not inside a Hardhat project." -// Note: Hardhat is just used inside the tests to ensure its compatibility. diff --git a/packages/web3/package.json b/packages/web3/package.json index ebd1a108966..dc32d9a2dd2 100644 --- a/packages/web3/package.json +++ b/packages/web3/package.json @@ -54,8 +54,8 @@ "test:unit": "jest --config=./test/unit/jest.config.js", "test:integration": "jest --config=./test/integration/jest.config.js --forceExit", "test:integration:stress": "jest --config=./test/stress/jest.config.js --forceExit", - "test:blackbox:ganache:http": "./scripts/black_box_test.sh ganache http", - "test:blackbox:ganache:ws": "./scripts/black_box_test.sh ganache ws", + "test:blackbox:hardhat:http": "./scripts/black_box_test.sh hardhat http", + "test:blackbox:hardhat:ws": "./scripts/black_box_test.sh hardhat ws", "test:blackbox:geth:http": "./scripts/black_box_test.sh geth http", "test:blackbox:geth:ws": "./scripts/black_box_test.sh geth ws", "test:blackbox:infura:http": "./scripts/black_box_test.sh infura http", diff --git a/packages/web3/scripts/black_box_test.sh b/packages/web3/scripts/black_box_test.sh index 64d89498983..3b571867064 100755 --- a/packages/web3/scripts/black_box_test.sh +++ b/packages/web3/scripts/black_box_test.sh @@ -5,7 +5,7 @@ ORIGARGS=("$@") . scripts/env.sh helpFunction() { - echo "Usage: $0 " + echo "Usage: $0 " exit 1 # Exit script after printing help } @@ -13,7 +13,7 @@ BACKEND=${ORIGARGS[0]} MODE=${ORIGARGS[1]} PROVIDER_URL=${ORIGARGS[2]} -SUPPORTED_BACKENDS=("ganache" "geth" "infura") +SUPPORTED_BACKENDS=("geth" "infura", "hardhat") SUPPORTED_MODE=("http" "ws") if [[ ! " ${SUPPORTED_BACKENDS[*]} " =~ " ${BACKEND} " ]]; then diff --git a/packages/web3/test/cjs_black_box/package.json b/packages/web3/test/cjs_black_box/package.json index f010a59c2a8..e5041d08c1d 100644 --- a/packages/web3/test/cjs_black_box/package.json +++ b/packages/web3/test/cjs_black_box/package.json @@ -6,8 +6,6 @@ "license": "LGPL-3.0", "type": "commonjs", "scripts": { - "test:ganache:http": "WEB3_SYSTEM_TEST_BACKEND=ganache WEB3_SYSTEM_TEST_PROVIDER=http://localhost:8545 jest", - "test:ganache:ws": "WEB3_SYSTEM_TEST_BACKEND=ganache WEB3_SYSTEM_TEST_PROVIDER=ws://localhost:8545 jest --forceExit", "test:geth:http": "WEB3_SYSTEM_TEST_BACKEND=geth WEB3_SYSTEM_TEST_PROVIDER=http://localhost:8545 jest", "test:geth:ws": "WEB3_SYSTEM_TEST_BACKEND=geth WEB3_SYSTEM_TEST_PROVIDER=ws://localhost:8545 jest --forceExit", "test:infura:http": "WEB3_SYSTEM_TEST_BACKEND=infura jest", diff --git a/packages/web3/test/cjs_black_box/test/web3-eth-contract/erc20.test.ts b/packages/web3/test/cjs_black_box/test/web3-eth-contract/erc20.test.ts index 87033b1ea1f..3f8f88238e0 100644 --- a/packages/web3/test/cjs_black_box/test/web3-eth-contract/erc20.test.ts +++ b/packages/web3/test/cjs_black_box/test/web3-eth-contract/erc20.test.ts @@ -22,6 +22,7 @@ import { isWs, getSystemTestProvider, createNewAccount, + BACKEND // eslint-disable-next-line import/no-relative-packages } from '../../../shared_fixtures/system_tests_utils'; import { @@ -33,7 +34,7 @@ import { // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires const Web3 = require('web3').default; -describeIf(getSystemTestBackend() === 'infura')( +describeIf(getSystemTestBackend() === BACKEND.INFURA)( 'CJS - Black Box Unit Tests - web3.eth.Contract', () => { describe('Infura - ERC20', () => { @@ -56,10 +57,10 @@ describeIf(getSystemTestBackend() === 'infura')( }, ); -describeIf(getSystemTestBackend() === 'geth' || getSystemTestBackend() === 'ganache')( +describeIf(getSystemTestBackend() === BACKEND.GETH || getSystemTestBackend() === BACKEND.GETH)( 'Black Box Unit Tests - web3.eth.Contract', () => { - describe('Geth || Ganache - ERC20', () => { + describe('Geth || Hardhat - ERC20', () => { let account; let web3: typeof Web3; let deployedContract: Contract; diff --git a/packages/web3/test/e2e/e2e_utils.ts b/packages/web3/test/e2e/e2e_utils.ts index cfb680d8b81..cf7db8b66ec 100644 --- a/packages/web3/test/e2e/e2e_utils.ts +++ b/packages/web3/test/e2e/e2e_utils.ts @@ -23,17 +23,17 @@ along with web3.js. If not, see . * running these E2E tests that use Sepolia and Mainnet, this util exists here for now. */ -import { getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { getSystemTestBackend, BACKEND } from '../shared_fixtures/system_tests_utils'; // eslint-disable-next-line import/no-relative-packages import secrets from '../../../../.secrets.json'; export const getSystemE2ETestProvider = (): string => { if (process.env.WEB3_SYSTEM_TEST_MODE === 'http') { - return getSystemTestBackend() === 'sepolia' + return getSystemTestBackend() === BACKEND.SEPOLIA ? process.env.INFURA_SEPOLIA_HTTP ?? secrets.SEPOLIA.HTTP : process.env.INFURA_MAINNET_HTTP ?? secrets.MAINNET.HTTP; } - return getSystemTestBackend() === 'sepolia' + return getSystemTestBackend() === BACKEND.SEPOLIA ? process.env.INFURA_SEPOLIA_WS ?? secrets.SEPOLIA.WS : process.env.INFURA_MAINNET_WS ?? secrets.MAINNET.WS; }; @@ -42,7 +42,7 @@ export const getE2ETestAccountAddress = (): string => { if (process.env.TEST_ACCOUNT_ADDRESS !== undefined) { return process.env.TEST_ACCOUNT_ADDRESS; // eslint-disable-next-line no-else-return - } else if (getSystemTestBackend() === 'sepolia' || getSystemTestBackend() === 'mainnet') { + } else if (getSystemTestBackend() === BACKEND.SEPOLIA || getSystemTestBackend() === BACKEND.MAINNET) { return secrets[getSystemTestBackend().toUpperCase() as 'SEPOLIA' | 'MAINNET'].ACCOUNT .address; } @@ -64,7 +64,7 @@ export const getAllowedSendTransaction = (): boolean => { return Boolean(process.env.ALLOWED_SEND_TRANSACTION); // eslint-disable-next-line no-else-return - } else if (getSystemTestBackend() === 'sepolia' || getSystemTestBackend() === 'mainnet') { + } else if (getSystemTestBackend() === BACKEND.SEPOLIA || getSystemTestBackend() === BACKEND.MAINNET) { return secrets[getSystemTestBackend().toUpperCase() as 'SEPOLIA' | 'MAINNET'] .ALLOWED_SEND_TRANSACTION; } @@ -76,7 +76,7 @@ export const getE2ETestAccountPrivateKey = (): string => { if (process.env.TEST_ACCOUNT_PRIVATE_KEY !== undefined) { return process.env.TEST_ACCOUNT_PRIVATE_KEY; // eslint-disable-next-line no-else-return - } else if (getSystemTestBackend() === 'sepolia' || getSystemTestBackend() === 'mainnet') { + } else if (getSystemTestBackend() === BACKEND.SEPOLIA || getSystemTestBackend() === BACKEND.MAINNET) { return secrets[getSystemTestBackend().toUpperCase() as 'SEPOLIA' | 'MAINNET'].ACCOUNT .privateKey; } diff --git a/packages/web3/test/e2e/estimate_gas.test.ts b/packages/web3/test/e2e/estimate_gas.test.ts index edccebcf063..cfad9595b02 100644 --- a/packages/web3/test/e2e/estimate_gas.test.ts +++ b/packages/web3/test/e2e/estimate_gas.test.ts @@ -18,14 +18,14 @@ import { toHex } from 'web3-utils'; import Web3, { FMT_BYTES, FMT_NUMBER, Transaction } from '../../src'; import { getSystemE2ETestProvider } from './e2e_utils'; -import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { closeOpenConnection, getSystemTestBackend, BACKEND } from '../shared_fixtures/system_tests_utils'; import { toAllVariants } from '../shared_fixtures/utils'; import { mainnetBlockData } from './fixtures/mainnet'; import { sepoliaBlockData } from './fixtures/sepolia'; describe(`${getSystemTestBackend()} tests - estimateGas`, () => { const provider = getSystemE2ETestProvider(); - const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + const blockData = getSystemTestBackend() === BACKEND.SEPOLIA ? sepoliaBlockData : mainnetBlockData; const simpleEthTransaction: Transaction = { from: '0x0000000000000000000000000000000000000000', to: '0x0000000000000000000000000000000000000000', @@ -37,7 +37,7 @@ describe(`${getSystemTestBackend()} tests - estimateGas`, () => { data: '0x60806040523480156200001157600080fd5b5060405162000a6a38038062000a6a8339818101604052810190620000379190620002a4565b80600090805190602001906200004f92919062000057565b505062000359565b828054620000659062000324565b90600052602060002090601f016020900481019282620000895760008555620000d5565b82601f10620000a457805160ff1916838001178555620000d5565b82800160010185558215620000d5579182015b82811115620000d4578251825591602001919060010190620000b7565b5b509050620000e49190620000e8565b5090565b5b8082111562000103576000816000905550600101620000e9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001708262000125565b810181811067ffffffffffffffff8211171562000192576200019162000136565b5b80604052505050565b6000620001a762000107565b9050620001b5828262000165565b919050565b600067ffffffffffffffff821115620001d857620001d762000136565b5b620001e38262000125565b9050602081019050919050565b60005b8381101562000210578082015181840152602081019050620001f3565b8381111562000220576000848401525b50505050565b60006200023d6200023784620001ba565b6200019b565b9050828152602081018484840111156200025c576200025b62000120565b5b62000269848285620001f0565b509392505050565b600082601f8301126200028957620002886200011b565b5b81516200029b84826020860162000226565b91505092915050565b600060208284031215620002bd57620002bc62000111565b5b600082015167ffffffffffffffff811115620002de57620002dd62000116565b5b620002ec8482850162000271565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200033d57607f821691505b602082108103620003535762000352620002f5565b5b50919050565b61070180620003696000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a41368621461003b578063cfae32171461006c575b600080fd5b6100556004803603810190610050919061043f565b61008a565b60405161006392919061052b565b60405180910390f35b6100746101b0565b604051610081919061055b565b60405180910390f35b600060607f0d363f2fba46ab11b6db8da0125b0d5484787c44e265b48810735998bab12b756000846040516100c0929190610672565b60405180910390a182600090805190602001906100de929190610242565b507f7d7846723bda52976e0286c6efffee937ee9f76817a867ec70531ad29fb1fc0e600060405161010f91906106a9565b60405180910390a160016000808054610127906105ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610153906105ac565b80156101a05780601f10610175576101008083540402835291602001916101a0565b820191906000526020600020905b81548152906001019060200180831161018357829003601f168201915b5050505050905091509150915091565b6060600080546101bf906105ac565b80601f01602080910402602001604051908101604052809291908181526020018280546101eb906105ac565b80156102385780601f1061020d57610100808354040283529160200191610238565b820191906000526020600020905b81548152906001019060200180831161021b57829003601f168201915b5050505050905090565b82805461024e906105ac565b90600052602060002090601f01602090048101928261027057600085556102b7565b82601f1061028957805160ff19168380011785556102b7565b828001600101855582156102b7579182015b828111156102b657825182559160200191906001019061029b565b5b5090506102c491906102c8565b5090565b5b808211156102e15760008160009055506001016102c9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61034c82610303565b810181811067ffffffffffffffff8211171561036b5761036a610314565b5b80604052505050565b600061037e6102e5565b905061038a8282610343565b919050565b600067ffffffffffffffff8211156103aa576103a9610314565b5b6103b382610303565b9050602081019050919050565b82818337600083830152505050565b60006103e26103dd8461038f565b610374565b9050828152602081018484840111156103fe576103fd6102fe565b5b6104098482856103c0565b509392505050565b600082601f830112610426576104256102f9565b5b81356104368482602086016103cf565b91505092915050565b600060208284031215610455576104546102ef565b5b600082013567ffffffffffffffff811115610473576104726102f4565b5b61047f84828501610411565b91505092915050565b60008115159050919050565b61049d81610488565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104dd5780820151818401526020810190506104c2565b838111156104ec576000848401525b50505050565b60006104fd826104a3565b61050781856104ae565b93506105178185602086016104bf565b61052081610303565b840191505092915050565b60006040820190506105406000830185610494565b818103602083015261055281846104f2565b90509392505050565b6000602082019050818103600083015261057581846104f2565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806105c457607f821691505b6020821081036105d7576105d661057d565b5b50919050565b60008190508160005260206000209050919050565b600081546105ff816105ac565b61060981866104ae565b94506001821660008114610624576001811461063657610669565b60ff1983168652602086019350610669565b61063f856105dd565b60005b8381101561066157815481890152600182019150602081019050610642565b808801955050505b50505092915050565b6000604082019050818103600083015261068c81856105f2565b905081810360208301526106a081846104f2565b90509392505050565b600060208201905081810360008301526106c381846105f2565b90509291505056fea2646970667358221220fe0f28c9f8ef0a13a95934b974e7bc2ca6762b40a5b93ccd6ca2038f454bf52764736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000017736f6c79656e7420677265656e2069732070656f706c65000000000000000000', }; const expectedContractDeploymentTransactionGas = - getSystemTestBackend() === 'sepolia' ? 475494 : 475494; + getSystemTestBackend() === BACKEND.SEPOLIA ? 475494 : 475494; let web3: Web3; @@ -62,7 +62,7 @@ describe(`${getSystemTestBackend()} tests - estimateGas`, () => { )('estimateGas', async ({ transaction, block, format }) => { let _blockData = blockData[block]; if ( - getSystemTestBackend() === 'mainnet' && + getSystemTestBackend() === BACKEND.MAINNET && (block === 'blockHash' || block === 'blockNumber') ) { /** diff --git a/packages/web3/test/e2e/get_balance.test.ts b/packages/web3/test/e2e/get_balance.test.ts index fd676bf262c..daba0c6397f 100644 --- a/packages/web3/test/e2e/get_balance.test.ts +++ b/packages/web3/test/e2e/get_balance.test.ts @@ -19,16 +19,16 @@ import { toHex } from 'web3-utils'; import Web3, { FMT_BYTES, FMT_NUMBER } from '../../src'; import { getSystemE2ETestProvider, getE2ETestAccountAddress } from './e2e_utils'; -import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { closeOpenConnection, getSystemTestBackend, BACKEND } from '../shared_fixtures/system_tests_utils'; import { toAllVariants } from '../shared_fixtures/utils'; import { sepoliaBlockData } from './fixtures/sepolia'; import { mainnetBlockData } from './fixtures/mainnet'; describe(`${getSystemTestBackend()} tests - getBalance`, () => { const provider = getSystemE2ETestProvider(); - const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + const blockData = getSystemTestBackend() === BACKEND.SEPOLIA ? sepoliaBlockData : mainnetBlockData; const expectedBalance = - getSystemTestBackend() === 'sepolia' ? '172530374997217200' : '2099795781954790368'; + getSystemTestBackend() === BACKEND.SEPOLIA ? '172530374997217200' : '2099795781954790368'; let web3: Web3; diff --git a/packages/web3/test/e2e/get_block.test.ts b/packages/web3/test/e2e/get_block.test.ts index f50f73612da..bd9753992b6 100644 --- a/packages/web3/test/e2e/get_block.test.ts +++ b/packages/web3/test/e2e/get_block.test.ts @@ -21,7 +21,7 @@ import { format as formatter } from 'web3-utils'; import Web3, { FMT_BYTES, FMT_NUMBER } from '../../src'; import { getSystemE2ETestProvider } from './e2e_utils'; -import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { closeOpenConnection, getSystemTestBackend, BACKEND } from '../shared_fixtures/system_tests_utils'; import { toAllVariants } from '../shared_fixtures/utils'; import { sepoliaBlock, sepoliaBlockData, sepoliaBlockHydrated } from './fixtures/sepolia'; import { mainnetBlockHydrated } from './fixtures/mainnet_block_hydrated'; @@ -29,7 +29,7 @@ import { mainnetBlock, mainnetBlockData } from './fixtures/mainnet'; describe(`${getSystemTestBackend()} tests - getBlock`, () => { const provider = getSystemE2ETestProvider(); - const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + const blockData = getSystemTestBackend() === BACKEND.SEPOLIA ? sepoliaBlockData : mainnetBlockData; let web3: Web3; @@ -66,7 +66,7 @@ describe(`${getSystemTestBackend()} tests - getBlock`, () => { })), }; let expectedBlock: Block = ((): Block => { - if (getSystemTestBackend() === 'sepolia') { + if (getSystemTestBackend() === BACKEND.SEPOLIA) { return hydrated ? sepoliaBlockHydrated : sepoliaBlock; } diff --git a/packages/web3/test/e2e/get_block_transaction_count.test.ts b/packages/web3/test/e2e/get_block_transaction_count.test.ts index 02fb0fc4357..ef65b08a2bb 100644 --- a/packages/web3/test/e2e/get_block_transaction_count.test.ts +++ b/packages/web3/test/e2e/get_block_transaction_count.test.ts @@ -19,15 +19,15 @@ import { toHex } from 'web3-utils'; import Web3, { FMT_BYTES, FMT_NUMBER } from '../../src'; import { getSystemE2ETestProvider } from './e2e_utils'; -import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { closeOpenConnection, getSystemTestBackend, BACKEND } from '../shared_fixtures/system_tests_utils'; import { toAllVariants } from '../shared_fixtures/utils'; import { sepoliaBlockData } from './fixtures/sepolia'; import { mainnetBlockData } from './fixtures/mainnet'; describe(`${getSystemTestBackend()} tests - getBlockTransactionCount`, () => { const provider = getSystemE2ETestProvider(); - const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; - const expectedTransactionCount = getSystemTestBackend() === 'sepolia' ? 30 : 196; + const blockData = getSystemTestBackend() === BACKEND.SEPOLIA ? sepoliaBlockData : mainnetBlockData; + const expectedTransactionCount = getSystemTestBackend() === BACKEND.SEPOLIA ? 30 : 196; let web3: Web3; diff --git a/packages/web3/test/e2e/get_block_uncle_count.test.ts b/packages/web3/test/e2e/get_block_uncle_count.test.ts index 521f017fad2..eb13f823585 100644 --- a/packages/web3/test/e2e/get_block_uncle_count.test.ts +++ b/packages/web3/test/e2e/get_block_uncle_count.test.ts @@ -16,14 +16,14 @@ along with web3.js. If not, see . */ import Web3 from '../../src'; import { getSystemE2ETestProvider } from './e2e_utils'; -import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { closeOpenConnection, getSystemTestBackend, describeIf, BACKEND} from '../shared_fixtures/system_tests_utils'; import { toAllVariants } from '../shared_fixtures/utils'; import { sepoliaBlockData } from './fixtures/sepolia'; import { mainnetBlockData } from './fixtures/mainnet'; -describe(`${getSystemTestBackend()} tests - getBlockUncleCount`, () => { +describeIf(getSystemTestBackend() !== 'hardhat')(`${getSystemTestBackend()} tests - getBlockUncleCount`, () => { const provider = getSystemE2ETestProvider(); - const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + const blockData = getSystemTestBackend() === BACKEND.SEPOLIA ? sepoliaBlockData : mainnetBlockData; let web3: Web3; @@ -34,7 +34,7 @@ describe(`${getSystemTestBackend()} tests - getBlockUncleCount`, () => { afterAll(async () => { await closeOpenConnection(web3); }); - + // eslint-disable-next-line jest/consistent-test-it it.each( toAllVariants<{ block: diff --git a/packages/web3/test/e2e/get_chain_id.test.ts b/packages/web3/test/e2e/get_chain_id.test.ts index 95dd93078b3..c58fe360c1b 100644 --- a/packages/web3/test/e2e/get_chain_id.test.ts +++ b/packages/web3/test/e2e/get_chain_id.test.ts @@ -18,12 +18,12 @@ import { toHex } from 'web3-utils'; import Web3, { FMT_BYTES, FMT_NUMBER } from '../../src'; import { getSystemE2ETestProvider } from './e2e_utils'; -import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { closeOpenConnection, getSystemTestBackend, BACKEND } from '../shared_fixtures/system_tests_utils'; import { toAllVariants } from '../shared_fixtures/utils'; describe(`${getSystemTestBackend()} tests - getChainId`, () => { const provider = getSystemE2ETestProvider(); - const expectedChainId = getSystemTestBackend() === 'sepolia' ? 11155111 : 1; + const expectedChainId = getSystemTestBackend() === BACKEND.SEPOLIA ? 11155111 : 1; let web3: Web3; diff --git a/packages/web3/test/e2e/get_id.test.ts b/packages/web3/test/e2e/get_id.test.ts index 8bbf21255e4..191c355340b 100644 --- a/packages/web3/test/e2e/get_id.test.ts +++ b/packages/web3/test/e2e/get_id.test.ts @@ -16,11 +16,11 @@ along with web3.js. If not, see . */ import Web3 from '../../src'; import { getSystemE2ETestProvider } from './e2e_utils'; -import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { closeOpenConnection, getSystemTestBackend, BACKEND } from '../shared_fixtures/system_tests_utils'; describe(`${getSystemTestBackend()} tests - getId`, () => { const provider = getSystemE2ETestProvider(); - const expectedChainId = getSystemTestBackend() === 'sepolia' ? BigInt(11155111) : BigInt(1); + const expectedChainId = getSystemTestBackend() === BACKEND.SEPOLIA ? BigInt(11155111) : BigInt(1); let web3: Web3; diff --git a/packages/web3/test/e2e/get_proof.test.ts b/packages/web3/test/e2e/get_proof.test.ts index a80f6d6f1f4..711abf0fac3 100644 --- a/packages/web3/test/e2e/get_proof.test.ts +++ b/packages/web3/test/e2e/get_proof.test.ts @@ -18,15 +18,15 @@ along with web3.js. If not, see . import Web3, { AccountObject } from '../../src'; import { getSystemE2ETestProvider } from './e2e_utils'; -import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { closeOpenConnection, getSystemTestBackend, BACKEND } from '../shared_fixtures/system_tests_utils'; import { toAllVariants } from '../shared_fixtures/utils'; import { mainnetBlockData, mainnetProof } from './fixtures/mainnet'; import { sepoliaBlockData, sepoliaProof } from './fixtures/sepolia'; describe(`${getSystemTestBackend()} tests - getProof`, () => { const provider = getSystemE2ETestProvider(); - const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; - const expectedProof = getSystemTestBackend() === 'sepolia' ? sepoliaProof : mainnetProof; + const blockData = getSystemTestBackend() === BACKEND.SEPOLIA ? sepoliaBlockData : mainnetBlockData; + const expectedProof = getSystemTestBackend() === BACKEND.SEPOLIA ? sepoliaProof : mainnetProof; let web3: Web3; diff --git a/packages/web3/test/e2e/get_transaction_count.test.ts b/packages/web3/test/e2e/get_transaction_count.test.ts index 62e3fad818c..7f679ca32c4 100644 --- a/packages/web3/test/e2e/get_transaction_count.test.ts +++ b/packages/web3/test/e2e/get_transaction_count.test.ts @@ -16,14 +16,14 @@ along with web3.js. If not, see . */ import Web3 from '../../src'; import { getSystemE2ETestProvider, getE2ETestAccountAddress } from './e2e_utils'; -import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { closeOpenConnection, getSystemTestBackend, BACKEND } from '../shared_fixtures/system_tests_utils'; import { toAllVariants } from '../shared_fixtures/utils'; import { sepoliaBlockData } from './fixtures/sepolia'; import { mainnetBlockData } from './fixtures/mainnet'; describe(`${getSystemTestBackend()} tests - getTransactionCount`, () => { const provider = getSystemE2ETestProvider(); - const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + const blockData = getSystemTestBackend() === BACKEND.SEPOLIA ? sepoliaBlockData : mainnetBlockData; let web3: Web3; @@ -63,7 +63,7 @@ describe(`${getSystemTestBackend()} tests - getTransactionCount`, () => { ); if (block === 'blockHash' || block === 'blockNumber') { - const expectedTxCount = getSystemTestBackend() === 'sepolia' ? BigInt(1) : BigInt(11); + const expectedTxCount = getSystemTestBackend() === BACKEND.SEPOLIA ? BigInt(1) : BigInt(11); // eslint-disable-next-line jest/no-conditional-expect expect(result).toBe(expectedTxCount); } else { diff --git a/packages/web3/test/e2e/get_transaction_from_block.test.ts b/packages/web3/test/e2e/get_transaction_from_block.test.ts index 3c7b18eccd7..20fd48b5f4e 100644 --- a/packages/web3/test/e2e/get_transaction_from_block.test.ts +++ b/packages/web3/test/e2e/get_transaction_from_block.test.ts @@ -20,14 +20,14 @@ import { Numbers, TransactionInfo } from 'web3-types'; import Web3 from '../../src'; import { getSystemE2ETestProvider } from './e2e_utils'; -import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { closeOpenConnection, getSystemTestBackend, BACKEND } from '../shared_fixtures/system_tests_utils'; import { toAllVariants } from '../shared_fixtures/utils'; import { sepoliaBlockData, sepoliaTransactionFromBlock } from './fixtures/sepolia'; import { mainnetBlockData, mainnetTransactionFromBlock } from './fixtures/mainnet'; describe(`${getSystemTestBackend()} tests - getTransactionFromBlock`, () => { const provider = getSystemE2ETestProvider(); - const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + const blockData = getSystemTestBackend() === BACKEND.SEPOLIA ? sepoliaBlockData : mainnetBlockData; let web3: Web3; @@ -71,7 +71,7 @@ describe(`${getSystemTestBackend()} tests - getTransactionFromBlock`, () => { expect(result).toBeNull(); } else if (block === 'blockHash' || block === 'blockNumber') { const expectedTransaction = - getSystemTestBackend() === 'sepolia' + getSystemTestBackend() === BACKEND.SEPOLIA ? sepoliaTransactionFromBlock : mainnetTransactionFromBlock; expect(result).toStrictEqual(expectedTransaction); diff --git a/packages/web3/test/e2e/get_uncle.test.ts b/packages/web3/test/e2e/get_uncle.test.ts index 75da6e73937..586026b82a7 100644 --- a/packages/web3/test/e2e/get_uncle.test.ts +++ b/packages/web3/test/e2e/get_uncle.test.ts @@ -18,14 +18,14 @@ import { Numbers } from 'web3-types'; import Web3 from '../../src'; import { getSystemE2ETestProvider } from './e2e_utils'; -import { closeOpenConnection, getSystemTestBackend } from '../shared_fixtures/system_tests_utils'; +import { closeOpenConnection, getSystemTestBackend, BACKEND } from '../shared_fixtures/system_tests_utils'; import { toAllVariants } from '../shared_fixtures/utils'; import { mainnetBlockData } from './fixtures/mainnet'; import { sepoliaBlockData } from './fixtures/sepolia'; describe(`${getSystemTestBackend()} tests - getUncle`, () => { const provider = getSystemE2ETestProvider(); - const blockData = getSystemTestBackend() === 'sepolia' ? sepoliaBlockData : mainnetBlockData; + const blockData = getSystemTestBackend() === BACKEND.SEPOLIA ? sepoliaBlockData : mainnetBlockData; let web3: Web3; diff --git a/packages/web3/test/esm_black_box/package.json b/packages/web3/test/esm_black_box/package.json index d6ff4ed8447..252793ca6cc 100644 --- a/packages/web3/test/esm_black_box/package.json +++ b/packages/web3/test/esm_black_box/package.json @@ -6,8 +6,7 @@ "license": "LGPL-3.0", "type": "module", "scripts": { - "test:ganache:http": "WEB3_SYSTEM_TEST_BACKEND=ganache WEB3_SYSTEM_TEST_PROVIDER=http://localhost:8545 jest", - "test:ganache:ws": "WEB3_SYSTEM_TEST_BACKEND=ganache WEB3_SYSTEM_TEST_PROVIDER=ws://localhost:8545 jest --forceExit", + "test:hardhat:http": "WEB3_SYSTEM_TEST_BACKEND=hardhat WEB3_SYSTEM_TEST_PROVIDER=http://localhost:8545 jest", "test:geth:http": "WEB3_SYSTEM_TEST_BACKEND=geth WEB3_SYSTEM_TEST_PROVIDER=http://localhost:8545 jest", "test:geth:ws": "WEB3_SYSTEM_TEST_BACKEND=geth WEB3_SYSTEM_TEST_PROVIDER=ws://localhost:8545 jest --forceExit", "test:infura:http": "WEB3_SYSTEM_TEST_BACKEND=infura jest", diff --git a/packages/web3/test/esm_black_box/test/web3-eth-contract/erc20.test.ts b/packages/web3/test/esm_black_box/test/web3-eth-contract/erc20.test.ts index 2139e4becba..dda2509ac97 100644 --- a/packages/web3/test/esm_black_box/test/web3-eth-contract/erc20.test.ts +++ b/packages/web3/test/esm_black_box/test/web3-eth-contract/erc20.test.ts @@ -25,10 +25,11 @@ import { isWs, getSystemTestProvider, createNewAccount, + BACKEND } from '../../../shared_fixtures/system_tests_utils'; import { ERC20TokenAbi, ERC20TokenBytecode } from '../../../shared_fixtures/contracts/ERC20Token'; -describeIf(getSystemTestBackend() === 'infura')( +describeIf(getSystemTestBackend() === BACKEND.INFURA)( 'ESM - Black Box Unit Tests - web3.eth.Contract', () => { describe('Infura - ERC20', () => { @@ -51,10 +52,10 @@ describeIf(getSystemTestBackend() === 'infura')( }, ); -describeIf(getSystemTestBackend() === 'geth' || getSystemTestBackend() === 'ganache')( +describeIf(getSystemTestBackend() === BACKEND.GETH || getSystemTestBackend() === BACKEND.HARDHAT)( 'Black Box Unit Tests - web3.eth.Contract', () => { - describe('Geth || Ganache - ERC20', () => { + describe('Geth || Hardhat - ERC20', () => { let account; let web3: Web3; let deployedContract: Contract; diff --git a/scripts/ganache.sh b/scripts/ganache.sh deleted file mode 100755 index f7f9089b686..00000000000 --- a/scripts/ganache.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash - -ORIGARGS=("$@") - -helpFunction() { - echo "Usage: $0 [start|stop] [background]" - exit 1 # Exit script after printing help -} - -start() { - . scripts/env.sh - - if [ -z "${ORIGARGS[1]}" ] - then - docker run --publish 8545:8545 trufflesuite/ganache:latest -m "$WEB3_SYSTEM_TEST_MNEMONIC" -a 5 -p $WEB3_SYSTEM_TEST_PORT --wallet.passphrase "123" --networkId 1337 - else - echo "Starting ganache ..." - docker run --detach --publish 8545:8545 trufflesuite/ganache:latest -m "$WEB3_SYSTEM_TEST_MNEMONIC" -a 5 -p $WEB3_SYSTEM_TEST_PORT --wallet.passphrase "123" --networkId 1337 - - echo "Waiting for ganache..." - npx wait-port "$WEB3_SYSTEM_TEST_PORT" - echo "Ganache started..." - fi -} - -stop() { - echo "Stopping ganache ..." - docker ps -q --filter ancestor="trufflesuite/ganache" | xargs -r docker stop -} - -case $1 in -start) start ;; -stop) stop ;; -*) helpFunction ;; # Print helpFunction in case parameter is non-existent -esac diff --git a/scripts/hardhat.sh b/scripts/hardhat.sh new file mode 100755 index 00000000000..04d1700f52d --- /dev/null +++ b/scripts/hardhat.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +ORIGARGS=("$@") + +helpFunction() { + echo "Usage: $0 [start|stop] [background]" + exit 1 # Exit script after printing help +} + +start() { + . scripts/env.sh + + if [ -z "${ORIGARGS[1]}" ] + then + echo "Starting hardhat ..." + npx hardhat node + fi +} + +stop() { + echo "Stopping hardhat ..." + PID=$(lsof -t -i :8545) + kill $PID + +} + +case $1 in +start) start ;; +stop) stop ;; +*) helpFunction ;; # Print helpFunction in case parameter is non-existent +esac diff --git a/scripts/system_tests_utils.ts b/scripts/system_tests_utils.ts index 2e306c18f2d..ea84d21f03e 100644 --- a/scripts/system_tests_utils.ts +++ b/scripts/system_tests_utils.ts @@ -25,6 +25,8 @@ import { signTransaction, } from 'web3-eth-accounts'; +// eslint-disable-next-line import/no-extraneous-dependencies +import HardhatPlugin from 'web3-hardhat-plugin'; // eslint-disable-next-line import/no-extraneous-dependencies import { prepareTransactionForSigning, Web3Eth } from 'web3-eth'; // eslint-disable-next-line import/no-extraneous-dependencies @@ -71,6 +73,13 @@ export const getEnvVar = (name: string): string | undefined => export const DEFAULT_SYSTEM_PROVIDER = 'http://127.0.0.1:8545'; export const DEFAULT_SYSTEM_ENGINE = 'node'; +export const BACKEND = { + GETH: 'geth', + HARDHAT: 'hardhat', + INFURA: 'infura', + SEPOLIA: 'sepolia', + MAINNET: 'mainnet', +}; export const getSystemTestProviderUrl = (): string => getEnvVar('WEB3_SYSTEM_TEST_PROVIDER') ?? DEFAULT_SYSTEM_PROVIDER; @@ -103,7 +112,7 @@ export const getSystemTestMnemonic = (): string => getEnvVar('WEB3_SYSTEM_TEST_M export const getSystemTestBackend = (): string => getEnvVar('WEB3_SYSTEM_TEST_BACKEND') ?? ''; -export const isGeth: boolean = getSystemTestBackend() === 'geth'; +export const isGeth: boolean = getSystemTestBackend() === BACKEND.GETH; export const createAccount = _createAccount; @@ -247,25 +256,41 @@ export const createNewAccount = async (config?: { const acc = config?.privateKey ? privateKeyToAccount(config?.privateKey) : _createAccount(); const clientUrl = DEFAULT_SYSTEM_PROVIDER; - if (config?.unlock) { + + if (getSystemTestBackend() === BACKEND.HARDHAT){ + const url = getSystemTestProviderUrl(); + const web3 = new Web3(url); + web3.registerPlugin(new HardhatPlugin()) + await web3.hardhat.impersonateAccount(acc.address); + // await impersonateAccount(acc.address); + await web3.hardhat.setBalance(acc.address, web3.utils.toHex('100000000')); + } else { const web3Personal = new Personal(clientUrl); if (!config?.doNotImport) { await web3Personal.importRawKey( - getSystemTestBackend() === 'geth' ? acc.privateKey.slice(2) : acc.privateKey, + getSystemTestBackend() === BACKEND.GETH ? acc.privateKey.slice(2) : acc.privateKey, config.password ?? '123456', ); } await web3Personal.unlockAccount(acc.address, config.password ?? '123456', 100000000); + } } if (config?.refill) { - const web3Personal = new Personal(clientUrl); - if (!mainAcc) { - [mainAcc] = await web3Personal.getAccounts(); + if (getSystemTestBackend() === BACKEND.HARDHAT){ + const url = getSystemTestProviderUrl(); + const web3 = new Web3(url); + web3.registerPlugin(new HardhatPlugin()) + await web3.hardhat.setBalance(acc.address, web3.utils.toHex('100000000')) + } else { + const web3Personal = new Personal(clientUrl); + if (!mainAcc) { + [mainAcc] = await web3Personal.getAccounts(); + } + await refillAccount(mainAcc, acc.address, '100000000000000000'); } - await refillAccount(mainAcc, acc.address, '100000000000000000'); } return { address: acc.address.toLowerCase(), privateKey: acc.privateKey }; @@ -298,7 +323,6 @@ export const createTempAccount = async ( password: config.password, }); } - if (currentIndex >= walletsOnWorker || !tempAccountList[currentIndex]) { currentIndex = 0; } @@ -313,7 +337,7 @@ export const createTempAccount = async ( currentIndex += 1; return acc; -}; + } export const getSystemTestAccountsWithKeys = async (): Promise< { diff --git a/scripts/test-runner.sh b/scripts/test-runner.sh index cbe35641285..da2cf2e69bb 100755 --- a/scripts/test-runner.sh +++ b/scripts/test-runner.sh @@ -5,7 +5,7 @@ ORIGARGS=("$@") . scripts/env.sh helpFunction() { - echo "Usage: $0 [node | electron | firefox | chrome] [coverage | sync]" + echo "Usage: $0 [node | electron | firefox | chrome] [coverage | sync]" exit 1 # Exit script after printing help } BACKEND=${ORIGARGS[0]} @@ -13,7 +13,7 @@ MODE=${ORIGARGS[1]} ENGINE=${ORIGARGS[2]} TEST_OPTION=${ORIGARGS[3]} -SUPPORTED_BACKENDS=("geth" "ganache" "sepolia" "mainnet" "geth-manual") +SUPPORTED_BACKENDS=("geth" "hardhat" "sepolia" "mainnet" "geth-manual") SUPPORTED_MODE=("http" "ws" "ipc") # if you will add a new browser please also add it in the system_test_utils.ts => isBrowser SUPPORTED_ENGINES=("node" "electron" "firefox" "chrome" "") @@ -73,8 +73,10 @@ else fi -if [[ $BACKEND == "geth" || $BACKEND == "ganache" || $BACKEND == "geth-binary" || $BACKEND == "geth-manual" ]]; then - yarn "$BACKEND:start:background" && yarn generate:accounts && yarn $TEST_COMMAND && yarn "$BACKEND:stop" +if [[ $BACKEND == "geth" || $BACKEND == "geth-binary" || $BACKEND == "geth-manual" ]]; then + yarn "$BACKEND:start:background" && yarn generate:accounts && yarn $TEST_COMMAND && yarn "$BACKEND:stop" +elif [[ $BACKEND == "hardhat" ]]; then + yarn $TEST_COMMAND && yarn "$BACKEND:stop" else - yarn $TEST_COMMAND + yarn $TEST_COMMAND fi diff --git a/yarn.lock b/yarn.lock index 6454bfea3d1..98bbc72e352 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12077,6 +12077,11 @@ typescript@^4.7.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== +typescript@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + uglify-js@^3.1.4: version "3.17.0" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.0.tgz#55bd6e9d19ce5eef0d5ad17cd1f587d85b180a85" @@ -12388,6 +12393,14 @@ wcwidth@^1.0.0, wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +web3-hardhat-plugin@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/web3-hardhat-plugin/-/web3-hardhat-plugin-1.0.0.tgz#f12862e1666fce56d9714da184d0ccc208cac80d" + integrity sha512-XEiusGIXMAAPXgNYmNJ9VhXJiiDhIubjLEAoiOwwoEu+ifNIKu+ppLZJAVlHy/lbjYk5iF7mXrDajYcZ3bSbxQ== + dependencies: + typescript "^5.3.3" + web3 "^4.3.0" + web3-provider-engine@16.0.3: version "16.0.3" resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-16.0.3.tgz#8ff93edf3a8da2f70d7f85c5116028c06a0d9f07" From a6b685e207301782374016b543a64d6efe74b6eb Mon Sep 17 00:00:00 2001 From: Jason Aw <73338582+jasonaw98@users.noreply.github.com> Date: Mon, 5 Feb 2024 23:34:27 +0800 Subject: [PATCH 4/6] Update transactions.md (#6783) * Update transactions.md Made some changes on the Transaction Object for sending raw transactions. The current tx object will result in an error when calling web3.eth.sendSignedTransaction * Update transactions.md * Update docs/docs/guides/wallet/transactions.md Co-authored-by: Alex --------- Co-authored-by: Santiago Trujillo Zuluaga Co-authored-by: Alex --- docs/docs/guides/wallet/transactions.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/docs/guides/wallet/transactions.md b/docs/docs/guides/wallet/transactions.md index 4219185bb57..5129c5057a4 100644 --- a/docs/docs/guides/wallet/transactions.md +++ b/docs/docs/guides/wallet/transactions.md @@ -49,11 +49,13 @@ const account = web3.eth.accounts.privateKeyToAccount('0x4651f9c219fc6401fe0b3f8 // 3rd - create a raw transaction object const rawTransaction = { from: account.address, - to: '0x5875da5854c2adadbc1a7a448b5b2a09b26baff8', //random wallet - value: 1, //1 wei - gasPrice: await web3.eth.getGasPrice(), - gasLimit: 300000, - nonce: await web3.eth.getTransactionCount(account.address), //get the current nonce of the account + to: '0x5875da5854c2adadbc1a7a448b5b2a09b26baff8', //random wallet or contract address + value: 1, //optional - value in wei + maxFeePerGas: (await web3.eth.getBlock()).baseFeePerGas * 2n, //updated depending on the network + maxPriorityFeePerGas: 100000, //high + gasLimit: 2000000 + nonce: await web3.eth.getTransactionCount(account.address), //optional - get the current nonce of the account + data: "0x0" //optional - encoded function signature and arguments }; // 4th - sign the raw transaction with the private key @@ -342,4 +344,4 @@ Confirmation: { latestBlockHash: '0xb52380054ad2382620615ba7b7b40638021d85c5904a402cd11d00fd4db9fba9' } */ -``` \ No newline at end of file +``` From ed1460c087995c14e04da24e2188c9514d6940ec Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 6 Feb 2024 15:43:23 -0500 Subject: [PATCH 5/6] Add abiitem (#6778) * add abiitem * update * update contract * update changelog * update abi to fixture --- .../web3-eth-contract/test/fixtures/Abi.json | 82 +++++++++++++++++++ .../test/unit/contract.test.ts | 13 ++- packages/web3-types/CHANGELOG.md | 6 +- packages/web3-types/src/eth_abi_types.ts | 31 +++++-- packages/web3-utils/CHANGELOG.md | 6 +- packages/web3-utils/src/index.ts | 2 + 6 files changed, 128 insertions(+), 12 deletions(-) create mode 100644 packages/web3-eth-contract/test/fixtures/Abi.json diff --git a/packages/web3-eth-contract/test/fixtures/Abi.json b/packages/web3-eth-contract/test/fixtures/Abi.json new file mode 100644 index 00000000000..3538463596d --- /dev/null +++ b/packages/web3-eth-contract/test/fixtures/Abi.json @@ -0,0 +1,82 @@ +{ + anonymous: false, + constant: true, + inputs: [ + { + name: 'testMe', + type: 'uint256[3]' + }, + { + name: 'inputA', + type: 'tuple', + components: [ + { + name: 'a', + type: 'uint8' + }, + { + name: 'b', + type: 'uint8' + } + ] + }, + { + name: 'inputB', + type: 'tuple[]', + components: [ + { + name: 'a1', + type: 'uint256' + }, + { + name: 'a2', + type: 'uint256' + } + ] + }, + { + name: 'inputC', + type: 'uint8', + indexed: false + } + ], + name: "testName", + outputs: [ + { + name: "test", + type: "uint256" + }, + { + name: 'outputA', + type: 'tuple', + components: [ + { + name: 'a', + type: 'uint8' + }, + { + name: 'b', + type: 'uint8' + } + ] + }, + { + name: 'outputB', + type: 'tuple[]', + components: [ + { + name: 'a1', + type: 'uint256' + }, + { + name: 'a2', + type: 'uint256' + } + ] + } + ], + payable: false, + stateMutability: "pure", + type: "function", + gas: 175875 +} \ No newline at end of file diff --git a/packages/web3-eth-contract/test/unit/contract.test.ts b/packages/web3-eth-contract/test/unit/contract.test.ts index e86d04cc4cd..b2917c86d9c 100644 --- a/packages/web3-eth-contract/test/unit/contract.test.ts +++ b/packages/web3-eth-contract/test/unit/contract.test.ts @@ -20,7 +20,8 @@ import { ValidChains, Hardfork, AccessListResult, Address, ETH_DATA_FORMAT , DEF import { Web3ContractError } from 'web3-errors'; import { Web3Context , Web3ConfigEvent } from 'web3-core'; import { Web3ValidatorError } from 'web3-validator'; - +import { AbiItem } from 'web3-utils'; +import {Abi} from '../fixtures/Abi.json' import { Contract } from '../../src'; import { sampleStorageContractABI } from '../fixtures/storage'; import { GreeterAbi, GreeterBytecode } from '../shared_fixtures/build/Greeter'; @@ -110,6 +111,16 @@ describe('Contract', () => { expect(contract).toBeInstanceOf(Contract); }); + it('should init with abiItem, options and context', () => { + const contract = new Contract( + [Abi as AbiItem], + { gas: '123' }, + { config: { defaultAccount: '0x00000000219ab540356cBB839Cbe05303d7705Fa' } }, + ); + + expect(contract).toBeInstanceOf(Contract); + }); + it('should init with abi, address and options', () => { const contract = new Contract([], '0x00000000219ab540356cBB839Cbe05303d7705Fa', { gas: '123', diff --git a/packages/web3-types/CHANGELOG.md b/packages/web3-types/CHANGELOG.md index 3b48f4ffc68..2dedcbca907 100644 --- a/packages/web3-types/CHANGELOG.md +++ b/packages/web3-types/CHANGELOG.md @@ -177,4 +177,8 @@ Documentation: - Interface `MetaMaskProvider` added and is part of `SupportedProviders` (#6534) - `gasPrice` was added to `Transaction1559UnsignedAPI` type. (#6539) -## [Unreleased] \ No newline at end of file +## [Unreleased] + +### Added + +- Adds missing exported type `AbiItem` from 1.x to v4 for compatabiltiy (#6678) \ No newline at end of file diff --git a/packages/web3-types/src/eth_abi_types.ts b/packages/web3-types/src/eth_abi_types.ts index 0f461693602..07b9374f4db 100644 --- a/packages/web3-types/src/eth_abi_types.ts +++ b/packages/web3-types/src/eth_abi_types.ts @@ -139,15 +139,6 @@ export type AbiErrorFragment = AbiBaseFragment & { readonly inputs?: ReadonlyArray; }; -// https://docs.soliditylang.org/en/latest/abi-spec.html#json -export type AbiFragment = - | AbiConstructorFragment - | AbiFunctionFragment - | AbiEventFragment - | AbiErrorFragment - | AbiFallbackFragment; - -export type ContractAbi = ReadonlyArray; export type AbiInput = | string @@ -161,6 +152,28 @@ export type AbiInput = } | { readonly [key: string]: unknown }; + export interface AbiOutput { + name: string; + type: string; + components?: AbiOutput[]; + internalType?: string; + } + + + +// https://docs.soliditylang.org/en/latest/abi-spec.html#json +export type AbiFragment = + | AbiConstructorFragment + | AbiFunctionFragment + | AbiEventFragment + | AbiErrorFragment + | AbiFallbackFragment + +// to be compatible with web3js v1 +export type AbiItem = AbiFragment +export type ContractAbi = ReadonlyArray | ReadonlyArray + + // https://docs.soliditylang.org/en/develop/abi-spec.html#json export type JsonFunctionInterface = { type: 'function'; diff --git a/packages/web3-utils/CHANGELOG.md b/packages/web3-utils/CHANGELOG.md index d63c09119cc..1204a73951c 100644 --- a/packages/web3-utils/CHANGELOG.md +++ b/packages/web3-utils/CHANGELOG.md @@ -187,4 +187,8 @@ Documentation: - Fixed an issue with detecting Uint8Array (#6486) -## [Unreleased] \ No newline at end of file +## [Unreleased] + +### Added + +- Adds missing exported type `AbiItem` from 1.x to v4 for compatabiltiy (#6678) \ No newline at end of file diff --git a/packages/web3-utils/src/index.ts b/packages/web3-utils/src/index.ts index 52bb219692b..e5f467ec5f8 100644 --- a/packages/web3-utils/src/index.ts +++ b/packages/web3-utils/src/index.ts @@ -32,3 +32,5 @@ export * from './uuid.js'; export * from './web3_eip1193_provider.js'; export * from './socket_provider.js'; export * from './uint8array.js'; +// for backwards compatibility with v1 +export {AbiItem} from 'web3-types'; \ No newline at end of file From 998954fff82e2b422eadca86da08072e76c4e2b2 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 7 Feb 2024 10:06:54 -0500 Subject: [PATCH 6/6] fix cache on github ci (#6790) * update ocnfig * update build * update build * update key * update * update const * remove config --- .github/workflows/build.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 06d9d16558f..6f75f28bb6a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: - uses: actions/cache/save@v3 with: path: ./ - key: web3-${{ matrix.node }}-${{github.event.pull_request.base.sha}} + key: web3-${{ matrix.node }}-${{github.sha}} build-esm: name: Build ESM @@ -42,7 +42,7 @@ jobs: - uses: actions/cache/restore@v3 with: path: ./ - key: web3-18-${{github.event.pull_request.base.sha}} + key: web3-18-${{github.sha}} - run: yarn build:esm build-types: name: Build Types @@ -55,7 +55,7 @@ jobs: - uses: actions/cache/restore@v3 with: path: ./ - key: web3-18-${{github.event.pull_request.base.sha}} + key: web3-18-${{github.sha}} - run: yarn build:types lint: name: Lint @@ -68,7 +68,7 @@ jobs: - uses: actions/cache/restore@v3 with: path: ./ - key: web3-18-${{github.event.pull_request.base.sha}} + key: web3-18-${{github.sha}} - run: npx ts-node scripts/init.ts - run: yarn lint @@ -83,13 +83,13 @@ jobs: - uses: actions/cache/restore@v3 with: path: ./ - key: web3-18-${{github.event.pull_request.base.sha}} + key: web3-18-${{github.sha}} - name: Restore default branch stats if: github.event_name != 'push' uses: actions/cache/restore@v3 with: path: packages/web3/dist/4.x.json - key: web3-bundle-stats-4x-${{github.event.pull_request.base.sha}} + key: web3-bundle-stats-4x-${{github.sha}} - run: yarn build:web:analyze env: STATS_FILE: ${{ github.ref_name }}.json @@ -122,7 +122,7 @@ jobs: - uses: actions/cache/restore@v3 with: path: ./ - key: web3-${{ matrix.node }}-${{github.event.pull_request.base.sha}} + key: web3-${{ matrix.node }}-${{github.sha}} - run: yarn test:unit - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 @@ -144,7 +144,7 @@ jobs: - uses: actions/cache/restore@v3 with: path: ./ - key: web3-18-${{github.event.pull_request.base.sha}} + key: web3-18-${{github.sha}} - run: npx hardhat node & - run: yarn test:e2e:hardhat:http shell: bash @@ -167,7 +167,7 @@ jobs: - uses: actions/cache/restore@v3 with: path: ./ - key: web3-18-${{github.event.pull_request.base.sha}} + key: web3-18-${{github.sha}} - run: yarn test:e2e:geth:${{ matrix.mode }} shell: bash @@ -188,7 +188,7 @@ jobs: - uses: actions/cache/restore@v3 with: path: ./ - key: web3-18-${{github.event.pull_request.base.sha}} + key: web3-18-${{github.sha}} - run: npx hardhat node & - run: npm install --no-package-lock --no-save --force cypress - name: Cypress run @@ -214,7 +214,7 @@ jobs: - uses: actions/cache/restore@v3 with: path: ./ - key: web3-18-${{github.event.pull_request.base.sha}} + key: web3-18-${{github.sha}} - run: yarn install --ignore-scripts - run: yarn build:cjs - run: yarn run build:docs @@ -237,7 +237,7 @@ jobs: - uses: actions/cache/restore@v3 with: path: ./ - key: web3-18-${{github.event.pull_request.base.sha}} + key: web3-18-${{github.sha}} # @octokit/core not supported on node 16, so I can't add it to the package.json - run: npm install --no-package-lock --no-save --force @octokit/core - name: Restore main branch benchmark data