From 2af2edc2ee2b19c7057df196a6a4a408cd7d9830 Mon Sep 17 00:00:00 2001 From: hangleang Date: Wed, 31 Jul 2024 20:28:21 +0700 Subject: [PATCH] fix: update @ethereumjs/* pkgs, update context --- .eslintignore | 3 + .prettierignore | 1 + build_monorepo.sh | 16 + components/Editor/SolidityAdvanceModeTab.tsx | 4 +- context/ethereumContext.tsx | 50 ++- package.json | 15 +- pnpm-lock.yaml | 406 ++++++++----------- tsconfig.json | 2 +- util/gas.ts | 158 +++----- webpack/nodeModuleReplacement.js | 3 + 10 files changed, 298 insertions(+), 360 deletions(-) create mode 100755 build_monorepo.sh diff --git a/.eslintignore b/.eslintignore index 1f1e725d..20235049 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,3 +4,6 @@ public @/ tailwind.config.js .eslintrc.js + +# monorepo +ethereumjs-monorepo \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 1eb5c74b..f6447840 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,3 @@ **/*.mdx pnpm-lock.yaml +ethereumjs-monorepo \ No newline at end of file diff --git a/build_monorepo.sh b/build_monorepo.sh new file mode 100755 index 00000000..f50adbe6 --- /dev/null +++ b/build_monorepo.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -e + +# start building packages +echo "Installing dependencies" +cd ethereumjs-monorepo +npm i + +echo "Add @ethereumjs/* packages" +cd .. +pnpm add ethereumjs-monorepo/packages/block +pnpm add ethereumjs-monorepo/packages/common +pnpm add ethereumjs-monorepo/packages/evm +pnpm add ethereumjs-monorepo/packages/tx +pnpm add ethereumjs-monorepo/packages/util +pnpm add ethereumjs-monorepo/packages/vm \ No newline at end of file diff --git a/components/Editor/SolidityAdvanceModeTab.tsx b/components/Editor/SolidityAdvanceModeTab.tsx index c08dcbdd..4b252c4e 100644 --- a/components/Editor/SolidityAdvanceModeTab.tsx +++ b/components/Editor/SolidityAdvanceModeTab.tsx @@ -9,7 +9,7 @@ import React, { } from 'react' import { EvmError } from '@ethereumjs/evm/src/exceptions' -import { Address } from '@ethereumjs/util' +import { Address, createAddressFromString } from '@ethereumjs/util' import abi from 'ethereumjs-abi' import { BN, bufferToHex } from 'ethereumjs-util' import Select, { OnChangeValue } from 'react-select' @@ -206,7 +206,7 @@ const SolidityAdvanceModeTab: FC = ({ const transaction = await transactionData( data, getCallValue(), - Address.fromString(deployedContractAddress), + createAddressFromString(deployedContractAddress), ) if (!transaction) { return diff --git a/context/ethereumContext.tsx b/context/ethereumContext.tsx index 204e1b39..f6a5c691 100644 --- a/context/ethereumContext.tsx +++ b/context/ethereumContext.tsx @@ -2,19 +2,26 @@ import { Buffer } from 'buffer' import React, { createContext, useEffect, useState, useRef } from 'react' -import { Block } from '@ethereumjs/block' +import { createBlock } from '@ethereumjs/block' import { Common, Chain, HardforkTransitionConfig } from '@ethereumjs/common' import { EVM, EvmError, getActivePrecompiles, InterpreterStep, + createEVM, } from '@ethereumjs/evm' import { RunState } from '@ethereumjs/evm/dist/cjs/interpreter' import { Opcode, OpcodeList } from '@ethereumjs/evm/src/opcodes' -import { TypedTransaction, TxData, TransactionFactory } from '@ethereumjs/tx' -import { Address, Account, bytesToHex } from '@ethereumjs/util' -import { VM } from '@ethereumjs/vm' +import { TypedTransaction, TxData, createTxFromTxData } from '@ethereumjs/tx' +import { + Address, + bytesToHex, + createAccount, + createAddressFromPrivateKey, + createContractAddress, +} from '@ethereumjs/util' +import { VM, runTx } from '@ethereumjs/vm' import OpcodesMeta from 'opcodes.json' import PrecompiledMeta from 'precompiled.json' import { @@ -45,8 +52,8 @@ const privateKey = Buffer.from( 'hex', ) const accountBalance = 18 // 1eth -const accountAddress = Address.fromPrivateKey(privateKey) -const contractAddress = Address.generate(accountAddress, 1n) +const accountAddress = createAddressFromPrivateKey(privateKey) +const contractAddress = createContractAddress(accountAddress, 1n) const gasLimit = 0xffffffffffffn const postMergeHardforkNames: Array = ['merge', 'shanghai', 'cancun'] export const prevrandaoDocName = '44_merge' @@ -185,7 +192,7 @@ export const EthereumProvider: React.FC<{}> = ({ children }) => { vm = await VM.create({ common }) - const evm = await EVM.create({ + const evm = await createEVM({ common, }) currentOpcodes = evm.getActiveOpcodes() @@ -255,11 +262,11 @@ export const EthereumProvider: React.FC<{}> = ({ children }) => { value: value, gasLimit, gasPrice: 10, - data: '0x' + data, + data: `0x${data}` as `0x${string}`, nonce: account?.nonce, } - return TransactionFactory.fromTxData(txData).sign(privateKey) + return createTxFromTxData(txData).sign(privateKey) } /** @@ -315,10 +322,7 @@ export const EthereumProvider: React.FC<{}> = ({ children }) => { value: bigint, data: string, ) => { - vm.stateManager.putContractCode( - contractAddress, - Buffer.from(byteCode, 'hex'), - ) + vm.stateManager.putCode(contractAddress, Buffer.from(byteCode, 'hex')) transientStorageMemory.clear() startTransaction(await transactionData(data, value, contractAddress)) } @@ -334,8 +338,7 @@ export const EthereumProvider: React.FC<{}> = ({ children }) => { setVmError(undefined) // starting execution via deployed contract's transaction - return vm - .runTx({ tx: tx as TypedTransaction, block: _getBlock() }) + return runTx(vm, { tx: tx as TypedTransaction, block: _getBlock() }) .then(({ execResult, totalGasSpent, createdAddress }) => { _loadRunState({ totalGasSpent, @@ -624,9 +627,8 @@ export const EthereumProvider: React.FC<{}> = ({ children }) => { if (evm instanceof EVM) { // Storage handler const proxyStateManager = traceStorageMethodCalls(evm.stateManager) - evm.stateManager.putContractStorage = proxyStateManager.putContractStorage - evm.stateManager.clearContractStorage = - proxyStateManager.clearContractStorage + evm.stateManager.putStorage = proxyStateManager.putContractStorage + evm.stateManager.clearStorage = proxyStateManager.clearContractStorage // Transient storage handler const transientStorageMethodProxy = traceTransientStorageMethodCalls( evm.transientStorage, @@ -648,14 +650,8 @@ export const EthereumProvider: React.FC<{}> = ({ children }) => { nonce: 0, balance: 0, } - vm.stateManager.putAccount( - accountAddress, - Account.fromAccountData(accountData), - ) - vm.stateManager.putAccount( - contractAddress, - Account.fromAccountData(contractData), - ) + vm.stateManager.putAccount(accountAddress, createAccount(accountData)) + vm.stateManager.putAccount(contractAddress, createAccount(contractData)) } const _loadRunState = ({ @@ -696,7 +692,7 @@ export const EthereumProvider: React.FC<{}> = ({ children }) => { return undefined } - return Block.fromBlockData( + return createBlock( { header: { baseFeePerGas: 10, diff --git a/package.json b/package.json index 266b9b7f..45d6ce55 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,8 @@ "build:solcjs-worker": "npx -y browserify -t babelify ./babel/solcWorker2.js > ./public/solcWorker.js", "dev": "pnpm run build:solcjs-worker && next dev", "format": "prettier --write --cache .", + "preinstall": "git submodule update --init", + "postinstall": "./build_monorepo.sh", "lint": "eslint --ext js,jsx,ts,tsx .", "lint:package": "sort-package-json", "prepare": "husky", @@ -18,12 +20,12 @@ "@babel/core": "^7.0.0", "@emotion/react": "^11.11.3", "@emotion/styled": "^11.11.0", - "@ethereumjs/block": "^5.2.0", - "@ethereumjs/common": "^4.3.0", - "@ethereumjs/evm": "^3.0.0", - "@ethereumjs/tx": "^5.2.1", - "@ethereumjs/util": "^9.0.2", - "@ethereumjs/vm": "^8.0.0", + "@ethereumjs/block": "link:ethereumjs-monorepo/packages/block", + "@ethereumjs/common": "link:ethereumjs-monorepo/packages/common", + "@ethereumjs/evm": "link:ethereumjs-monorepo/packages/evm", + "@ethereumjs/tx": "link:ethereumjs-monorepo/packages/tx", + "@ethereumjs/util": "link:ethereumjs-monorepo/packages/util", + "@ethereumjs/vm": "link:ethereumjs-monorepo/packages/vm", "@kunigi/string-compression": "1.0.2", "@mdx-js/loader": "^2.3.0", "@mdx-js/react": "^2.3.0", @@ -37,6 +39,7 @@ "classnames": "^2.3.1", "clsx": "^2.0.0", "copy-to-clipboard": "^3.3.1", + "crypto-browserify": "^3.12.0", "ethereumjs-abi": "^0.6.8", "ethereumjs-util": "^7.1.5", "events": "^3.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9f5fb645..19710742 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,23 +19,23 @@ dependencies: specifier: ^11.11.0 version: 11.11.5(@emotion/react@11.11.4)(@types/react@17.0.2)(react@17.0.2) '@ethereumjs/block': - specifier: ^5.2.0 - version: 5.2.0 + specifier: link:ethereumjs-monorepo/packages/block + version: link:ethereumjs-monorepo/packages/block '@ethereumjs/common': - specifier: ^4.3.0 - version: 4.3.0 + specifier: link:ethereumjs-monorepo/packages/common + version: link:ethereumjs-monorepo/packages/common '@ethereumjs/evm': - specifier: ^3.0.0 - version: 3.0.0 + specifier: link:ethereumjs-monorepo/packages/evm + version: link:ethereumjs-monorepo/packages/evm '@ethereumjs/tx': - specifier: ^5.2.1 - version: 5.3.0 + specifier: link:ethereumjs-monorepo/packages/tx + version: link:ethereumjs-monorepo/packages/tx '@ethereumjs/util': - specifier: ^9.0.2 - version: 9.0.3 + specifier: link:ethereumjs-monorepo/packages/util + version: link:ethereumjs-monorepo/packages/util '@ethereumjs/vm': - specifier: ^8.0.0 - version: 8.0.0 + specifier: link:ethereumjs-monorepo/packages/vm + version: link:ethereumjs-monorepo/packages/vm '@kunigi/string-compression': specifier: 1.0.2 version: 1.0.2 @@ -75,6 +75,9 @@ dependencies: copy-to-clipboard: specifier: ^3.3.1 version: 3.3.3 + crypto-browserify: + specifier: ^3.12.0 + version: 3.12.0 ethereumjs-abi: specifier: ^0.6.8 version: 0.6.8 @@ -1660,157 +1663,6 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@ethereumjs/block@5.2.0: - resolution: {integrity: sha512-NuVDtD58zyjm5lO3AKPaelzX9VywNwRpDF7WTCY0SKFlD5OeewK5Rdb6LWhwmdQ0ngiIg0Nh/36AQ/8W1nEhjw==} - engines: {node: '>=18'} - dependencies: - '@ethereumjs/common': 4.3.0 - '@ethereumjs/rlp': 5.0.2 - '@ethereumjs/trie': 6.2.0 - '@ethereumjs/tx': 5.3.0 - '@ethereumjs/util': 9.0.3 - ethereum-cryptography: 2.1.3 - transitivePeerDependencies: - - supports-color - dev: false - - /@ethereumjs/blockchain@7.2.0: - resolution: {integrity: sha512-VIylDQR81n1a0BpDZwihGNYHQdxPpz2LfQ4m2jGRtLnY6mu3PEdrriikVN4VKjRDsWInr5Pcz2u2CJsriVXusQ==} - engines: {node: '>=18'} - dependencies: - '@ethereumjs/block': 5.2.0 - '@ethereumjs/common': 4.3.0 - '@ethereumjs/ethash': 3.0.3 - '@ethereumjs/rlp': 5.0.2 - '@ethereumjs/trie': 6.2.0 - '@ethereumjs/tx': 5.3.0 - '@ethereumjs/util': 9.0.3 - debug: 4.3.4 - ethereum-cryptography: 2.1.3 - lru-cache: 10.1.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@ethereumjs/common@4.3.0: - resolution: {integrity: sha512-shBNJ0ewcPNTUfZduHiczPmqkfJDn0Dh/9BR5fq7xUFTuIq7Fu1Vx00XDwQVIrpVL70oycZocOhBM6nDO+4FEQ==} - dependencies: - '@ethereumjs/util': 9.0.3 - dev: false - - /@ethereumjs/ethash@3.0.3: - resolution: {integrity: sha512-AYW1HviuHmmgl/DlbzC50i7P5/XxMofxXSMfGmC8717WO3fvjAClYrwsHETtpuETkwwVNW4sY+4m2HR13K226w==} - engines: {node: '>=18'} - dependencies: - '@ethereumjs/block': 5.2.0 - '@ethereumjs/rlp': 5.0.2 - '@ethereumjs/util': 9.0.3 - bigint-crypto-utils: 3.3.0 - ethereum-cryptography: 2.1.3 - transitivePeerDependencies: - - supports-color - dev: false - - /@ethereumjs/evm@3.0.0: - resolution: {integrity: sha512-hG5VajXG28UWab0LkptDun8ZnUnB1y2cZeNTjrmnz9Q0+UZxFJaU8RaFqaIoOOOoAt3vqMI7tXvnc+VPdNnhLg==} - engines: {node: '>=18'} - dependencies: - '@ethereumjs/common': 4.3.0 - '@ethereumjs/statemanager': 2.3.0 - '@ethereumjs/tx': 5.3.0 - '@ethereumjs/util': 9.0.3 - '@types/debug': 4.1.12 - debug: 4.3.4 - ethereum-cryptography: 2.1.3 - rustbn-wasm: 0.4.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@ethereumjs/rlp@5.0.2: - resolution: {integrity: sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==} - engines: {node: '>=18'} - hasBin: true - dev: false - - /@ethereumjs/statemanager@2.3.0: - resolution: {integrity: sha512-mHxbtvjN126qwT+dqA5Vev99QR4L+RD/BeZEnFbPsEDrBflMssLMaXZahKzQnMu5iqGOc1KLtT0g1ONl6+JpCA==} - dependencies: - '@ethereumjs/common': 4.3.0 - '@ethereumjs/rlp': 5.0.2 - '@ethereumjs/trie': 6.2.0 - '@ethereumjs/util': 9.0.3 - '@ethereumjs/verkle': 0.0.2 - debug: 4.3.4 - ethereum-cryptography: 2.1.3 - js-sdsl: 4.4.2 - lru-cache: 10.1.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@ethereumjs/trie@6.2.0: - resolution: {integrity: sha512-4k9SrfIBTMi8MROXglKxk+jS15qcELUeLwI+NnKJOTCdci2ArhoQpiuRHT6aeXB+2P2cWX2OQHbSVtW9AqabDQ==} - engines: {node: '>=18'} - dependencies: - '@ethereumjs/rlp': 5.0.2 - '@ethereumjs/util': 9.0.3 - '@types/readable-stream': 2.3.15 - debug: 4.3.4 - ethereum-cryptography: 2.1.3 - lru-cache: 10.1.0 - readable-stream: 3.6.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@ethereumjs/tx@5.3.0: - resolution: {integrity: sha512-uv++XYuIfuqYbvymL3/o14hHuC6zX0nRQ1nI2FHsbkkorLZ2ChEIDqVeeVk7Xc9/jQNU/22sk9qZZkRlsveXxw==} - engines: {node: '>=18'} - dependencies: - '@ethereumjs/common': 4.3.0 - '@ethereumjs/rlp': 5.0.2 - '@ethereumjs/util': 9.0.3 - ethereum-cryptography: 2.1.3 - dev: false - - /@ethereumjs/util@9.0.3: - resolution: {integrity: sha512-PmwzWDflky+7jlZIFqiGsBPap12tk9zK5SVH9YW2OEnDN7OEhCjUOMzbOqwuClrbkSIkM2ERivd7sXZ48Rh/vg==} - engines: {node: '>=18'} - dependencies: - '@ethereumjs/rlp': 5.0.2 - ethereum-cryptography: 2.1.3 - dev: false - - /@ethereumjs/verkle@0.0.2: - resolution: {integrity: sha512-uUVdUJnkugHBHz6aNRBzQZCqZGtjDigfMYtJ7GfjWN0g7hIftnNWn1NEWRU7Fi+ypD8fvedrV5wcZ20Uofmz2Q==} - engines: {node: '>=18'} - dependencies: - '@ethereumjs/rlp': 5.0.2 - '@ethereumjs/util': 9.0.3 - lru-cache: 10.1.0 - rust-verkle-wasm: 0.0.1 - dev: false - - /@ethereumjs/vm@8.0.0: - resolution: {integrity: sha512-eC5ghbSYKSG7qQZHlKh/tBTWEYOHx/ZAm8tmwt29e5N33m/FR2i9Rjx7Bb3Y3j+hlkR53FBFRGG6VQl0eiA4sw==} - engines: {node: '>=18'} - dependencies: - '@ethereumjs/block': 5.2.0 - '@ethereumjs/blockchain': 7.2.0 - '@ethereumjs/common': 4.3.0 - '@ethereumjs/evm': 3.0.0 - '@ethereumjs/rlp': 5.0.2 - '@ethereumjs/statemanager': 2.3.0 - '@ethereumjs/trie': 6.2.0 - '@ethereumjs/tx': 5.3.0 - '@ethereumjs/util': 9.0.3 - debug: 4.3.4 - ethereum-cryptography: 2.1.3 - transitivePeerDependencies: - - supports-color - dev: false - /@floating-ui/core@1.6.0: resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} dependencies: @@ -2356,22 +2208,11 @@ packages: '@noble/hashes': 1.3.2 dev: false - /@noble/curves@1.3.0: - resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} - dependencies: - '@noble/hashes': 1.3.3 - dev: false - /@noble/hashes@1.3.2: resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} engines: {node: '>= 16'} dev: false - /@noble/hashes@1.3.3: - resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} - engines: {node: '>= 16'} - dev: false - /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2496,14 +2337,6 @@ packages: '@scure/base': 1.1.6 dev: false - /@scure/bip32@1.3.3: - resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} - dependencies: - '@noble/curves': 1.3.0 - '@noble/hashes': 1.3.3 - '@scure/base': 1.1.6 - dev: false - /@scure/bip39@1.2.1: resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} dependencies: @@ -2511,13 +2344,6 @@ packages: '@scure/base': 1.1.6 dev: false - /@scure/bip39@1.2.2: - resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} - dependencies: - '@noble/hashes': 1.3.3 - '@scure/base': 1.1.6 - dev: false - /@solidity-parser/parser@0.18.0: resolution: {integrity: sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==} dev: false @@ -2785,13 +2611,6 @@ packages: '@types/prop-types': 15.7.12 csstype: 3.1.3 - /@types/readable-stream@2.3.15: - resolution: {integrity: sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==} - dependencies: - '@types/node': 20.12.7 - safe-buffer: 5.1.2 - dev: false - /@types/secp256k1@4.0.6: resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} dependencies: @@ -3335,6 +3154,14 @@ packages: is-shared-array-buffer: 1.0.3 dev: true + /asn1.js@4.10.1: + resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false + /assert@2.1.0: resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} dependencies: @@ -3586,11 +3413,6 @@ packages: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true - /bigint-crypto-utils@3.3.0: - resolution: {integrity: sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==} - engines: {node: '>=14.0.0'} - dev: false - /binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -3640,6 +3462,46 @@ packages: safe-buffer: 5.2.1 dev: false + /browserify-cipher@1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + dev: false + + /browserify-des@1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + dependencies: + cipher-base: 1.0.4 + des.js: 1.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /browserify-rsa@4.1.0: + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + dependencies: + bn.js: 5.2.1 + randombytes: 2.1.0 + dev: false + + /browserify-sign@4.2.3: + resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==} + engines: {node: '>= 0.12'} + dependencies: + bn.js: 5.2.1 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.5.5 + hash-base: 3.0.4 + inherits: 2.0.4 + parse-asn1: 5.1.7 + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + dev: false + /browserslist@4.23.0: resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -3870,6 +3732,10 @@ packages: requiresBuild: true dev: false + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: false + /cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -3881,6 +3747,13 @@ packages: yaml: 1.10.2 dev: false + /create-ecdh@4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.5 + dev: false + /create-hash@1.2.0: resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} dependencies: @@ -3910,6 +3783,22 @@ packages: shebang-command: 2.0.0 which: 2.0.2 + /crypto-browserify@3.12.0: + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.3 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + inherits: 2.0.4 + pbkdf2: 3.1.2 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + dev: false + /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -4012,6 +3901,13 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + /des.js@1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false + /detab@2.0.4: resolution: {integrity: sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==} dependencies: @@ -4036,6 +3932,14 @@ packages: engines: {node: '>=0.3.1'} dev: false + /diffie-hellman@5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + dependencies: + bn.js: 4.12.0 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dev: false + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -4617,15 +4521,6 @@ packages: setimmediate: 1.0.5 dev: false - /ethereum-cryptography@2.1.3: - resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} - dependencies: - '@noble/curves': 1.3.0 - '@noble/hashes': 1.3.3 - '@scure/bip32': 1.3.3 - '@scure/bip39': 1.2.2 - dev: false - /ethereumjs-abi@0.6.8: resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} dependencies: @@ -5006,6 +4901,14 @@ packages: dependencies: has-symbols: 1.0.3 + /hash-base@3.0.4: + resolution: {integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==} + engines: {node: '>=4'} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + /hash-base@3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} engines: {node: '>=4'} @@ -5464,6 +5367,10 @@ packages: resolution: {integrity: sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==} dev: false + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: false + /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} dev: true @@ -5509,10 +5416,6 @@ packages: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true - /js-sdsl@4.4.2: - resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} - dev: false - /js-sha3@0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} dev: false @@ -5703,11 +5606,6 @@ packages: dependencies: js-tokens: 4.0.0 - /lru-cache@10.1.0: - resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} - engines: {node: 14 || >=16.14} - dev: false - /lru-cache@10.2.0: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} @@ -6176,6 +6074,14 @@ packages: braces: 3.0.2 picomatch: 2.3.1 + /miller-rabin@4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + dev: false + /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -6477,6 +6383,18 @@ packages: dependencies: callsites: 3.1.0 + /parse-asn1@5.1.7: + resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} + engines: {node: '>= 0.10'} + dependencies: + asn1.js: 4.10.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + hash-base: 3.0.4 + pbkdf2: 3.1.2 + safe-buffer: 5.2.1 + dev: false + /parse-entities@2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} dependencies: @@ -6677,6 +6595,10 @@ packages: hasBin: true dev: true + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: false + /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -6699,6 +6621,17 @@ packages: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} dev: false + /public-encrypt@4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + dependencies: + bn.js: 4.12.0 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + parse-asn1: 5.1.7 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: false + /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -6711,6 +6644,13 @@ packages: dependencies: safe-buffer: 5.2.1 + /randomfill@1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: false + /react-dom@17.0.2(react@17.0.2): resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} peerDependencies: @@ -6826,6 +6766,18 @@ packages: dependencies: pify: 2.3.0 + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: false + /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -7048,16 +7000,6 @@ packages: dependencies: queue-microtask: 1.2.3 - /rust-verkle-wasm@0.0.1: - resolution: {integrity: sha512-BN6fiTsxcd2dCECz/cHtGTt9cdLJR925nh7iAuRcj8ymKw7OOaPmCneQZ7JePOJ/ia27TjEL91VdOi88Yf+mcA==} - dev: false - - /rustbn-wasm@0.4.0: - resolution: {integrity: sha512-C2ujvPv05hXC69MD7YwSsoUEsT/X/dKHkkgwN9B0ZTgb0OXDC9yaHhE6Pq+uaRAzMyW0Y97bwc4JO4cqPDzVuQ==} - dependencies: - '@scure/base': 1.1.6 - dev: false - /sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -7355,6 +7297,12 @@ packages: es-object-atoms: 1.0.0 dev: true + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: false + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: diff --git a/tsconfig.json b/tsconfig.json index 42414704..900d3daf 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -22,5 +22,5 @@ ] }, "include": ["next-env.d.ts", "**/*.js", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"] + "exclude": ["node_modules", "ethereumjs-monorepo"] } diff --git a/util/gas.ts b/util/gas.ts index 6c099760..f42dcaaa 100644 --- a/util/gas.ts +++ b/util/gas.ts @@ -21,8 +21,8 @@ function toWordSize(a: BN): BN { } function memoryCost(wordSize: BN, common: Common): BN { - const fee = Number(common.param('gasPrices', 'memory')) - const quadCoeff = Number(common.param('gasPrices', 'quadCoeffDiv')) + const fee = Number(common.param('memory')) + const quadCoeff = Number(common.param('quadCoeffDiv')) return wordSize.muln(fee).add(wordSize.mul(wordSize).divn(quadCoeff)) } @@ -51,7 +51,7 @@ function memoryExtensionCost( } function memoryCostCopy(inputs: any, param: string, common: Common): BN { - const paramWordCost = new BN(Number(common.param('gasPrices', param))) + const paramWordCost = new BN(Number(common.param(param))) const expansionCost = memoryExtensionCost( new BN(inputs.offset), new BN(inputs.size), @@ -63,48 +63,46 @@ function memoryCostCopy(inputs: any, param: string, common: Common): BN { function addressAccessCost(common: Common, inputs: any): BN { if (inputs.cold === '1') { - return new BN(Number(common.param('gasPrices', 'coldaccountaccess'))) + return new BN(Number(common.param('coldaccountaccess'))) } else { - return new BN(Number(common.param('gasPrices', 'warmstorageread'))) + return new BN(Number(common.param('warmstorageread'))) } } function sstoreCost(common: Common, inputs: any): BN { if (common.hardfork() === 'constantinople') { if (inputs.newValue === inputs.currentValue) { - return new BN(Number(common.param('gasPrices', 'netSstoreNoopGas'))) + return new BN(Number(common.param('netSstoreNoopGas'))) } else if (inputs.currentValue === inputs.originalValue) { if (inputs.originalValue === '0') { - return new BN(Number(common.param('gasPrices', 'netSstoreInitGas'))) + return new BN(Number(common.param('netSstoreInitGas'))) } else { - return new BN(Number(common.param('gasPrices', 'netSstoreCleanGas'))) + return new BN(Number(common.param('netSstoreCleanGas'))) } } else { - return new BN(Number(common.param('gasPrices', 'netSstoreDirtyGas'))) + return new BN(Number(common.param('netSstoreDirtyGas'))) } } else if (common.gteHardfork('istanbul')) { if (inputs.newValue === inputs.currentValue) { if (common.gteHardfork('berlin') && inputs.cold !== '1') { - return new BN(Number(common.param('gasPrices', 'warmstorageread'))) + return new BN(Number(common.param('warmstorageread'))) } else { - return new BN(Number(common.param('gasPrices', 'sstoreNoopGasEIP2200'))) + return new BN(Number(common.param('sstoreNoopGasEIP2200'))) } } else if (inputs.currentValue === inputs.originalValue) { if (inputs.originalValue === '0') { - return new BN(Number(common.param('gasPrices', 'sstoreInitGasEIP2200'))) + return new BN(Number(common.param('sstoreInitGasEIP2200'))) } else { - return new BN( - Number(common.param('gasPrices', 'sstoreCleanGasEIP2200')), - ) + return new BN(Number(common.param('sstoreCleanGasEIP2200'))) } } else { - return new BN(Number(common.param('gasPrices', 'sstoreDirtyGasEIP2200'))) + return new BN(Number(common.param('sstoreDirtyGasEIP2200'))) } } else { if (inputs.newValue !== '0' && inputs.currentValue === '0') { - return new BN(Number(common.param('gasPrices', 'sstoreSet'))) + return new BN(Number(common.param('sstoreSet'))) } else { - return new BN(Number(common.param('gasPrices', 'sstoreReset'))) + return new BN(Number(common.param('sstoreReset'))) } } } @@ -117,7 +115,7 @@ function createCost(common: Common, inputs: any): BN { common, ) const depositCost = new BN(inputs.deployedSize).imuln( - Number(common.param('gasPrices', 'createData')), + Number(common.param('createData')), ) const result = expansionCost @@ -127,7 +125,7 @@ function createCost(common: Common, inputs: any): BN { if (common.gteHardfork('shanghai')) { const initCodeCost = new BN( toWordSize(new BN(inputs.size)).imuln( - Number(common.param('gasPrices', 'initCodeWordCost')), + Number(common.param('initCodeWordCost')), ), ) result.iadd(initCodeCost) @@ -162,16 +160,16 @@ function callCost(common: Common, inputs: any): BN { result.iadd(new BN(inputs.executionCost)) if (typeof inputs.value !== 'undefined' && inputs.value !== '0') { - result.iaddn(Number(common.param('gasPrices', 'callValueTransfer'))) - result.isubn(Number(common.param('gasPrices', 'callStipend'))) + result.iaddn(Number(common.param('callValueTransfer'))) + result.isubn(Number(common.param('callStipend'))) } if (common.gteHardfork('spuriousDragon')) { if (inputs.empty === '1' && inputs.value !== '0') { - result.iadd(new BN(Number(common.param('gasPrices', 'callNewAccount')))) + result.iadd(new BN(Number(common.param('callNewAccount')))) } } else if (inputs.empty === '1') { - result.iadd(new BN(Number(common.param('gasPrices', 'callNewAccount')))) + result.iadd(new BN(Number(common.param('callNewAccount')))) } if (common.gteHardfork('berlin')) { @@ -206,9 +204,7 @@ export const calculateDynamicRefund = ( result = new BN(0) } else if (inputs.currentValue === inputs.originalValue) { if (inputs.originalValue !== '0' && inputs.newValue === '0') { - result = new BN( - Number(common.param('gasPrices', 'netSstoreClearRefund')), - ) + result = new BN(Number(common.param('netSstoreClearRefund'))) } else { result = new BN(0) } @@ -216,24 +212,16 @@ export const calculateDynamicRefund = ( result = new BN(0) if (inputs.originalValue !== '0') { if (inputs.currentValue === '0') { - result.isubn( - Number(common.param('gasPrices', 'netSstoreClearRefund')), - ) + result.isubn(Number(common.param('netSstoreClearRefund'))) } else if (inputs.newValue === '0') { - result.iaddn( - Number(common.param('gasPrices', 'netSstoreClearRefund')), - ) + result.iaddn(Number(common.param('netSstoreClearRefund'))) } } if (inputs.newValue === inputs.originalValue) { if (inputs.originalValue === '0') { - result.iaddn( - Number(common.param('gasPrices', 'netSstoreResetClearRefund')), - ) + result.iaddn(Number(common.param('netSstoreResetClearRefund'))) } else { - result.iaddn( - Number(common.param('gasPrices', 'netSstoreResetRefund')), - ) + result.iaddn(Number(common.param('netSstoreResetRefund'))) } } } @@ -242,9 +230,7 @@ export const calculateDynamicRefund = ( result = new BN(0) } else if (inputs.currentValue === inputs.originalValue) { if (inputs.originalValue !== '0' && inputs.newValue === '0') { - result = new BN( - Number(common.param('gasPrices', 'sstoreClearRefundEIP2200')), - ) + result = new BN(Number(common.param('sstoreClearRefundEIP2200'))) } else { result = new BN(0) } @@ -252,45 +238,35 @@ export const calculateDynamicRefund = ( result = new BN(0) if (inputs.originalValue !== '0') { if (inputs.currentValue === '0') { - result.isubn( - Number(common.param('gasPrices', 'sstoreClearRefundEIP2200')), - ) + result.isubn(Number(common.param('sstoreClearRefundEIP2200'))) } else if (inputs.newValue === '0') { - result.iaddn( - Number(common.param('gasPrices', 'sstoreClearRefundEIP2200')), - ) + result.iaddn(Number(common.param('sstoreClearRefundEIP2200'))) } } if (inputs.newValue === inputs.originalValue) { if (inputs.originalValue === '0') { if (common.gteHardfork('berlin') && inputs.cold !== '1') { result - .iaddn( - Number(common.param('gasPrices', 'sstoreInitGasEIP2200')), - ) - .isubn(Number(common.param('gasPrices', 'warmstorageread'))) + .iaddn(Number(common.param('sstoreInitGasEIP2200'))) + .isubn(Number(common.param('warmstorageread'))) } else { - result.iaddn( - Number(common.param('gasPrices', 'sstoreInitRefundEIP2200')), - ) + result.iaddn(Number(common.param('sstoreInitRefundEIP2200'))) } } else { if (common.gteHardfork('berlin') && inputs.cold !== '1') { result - .iaddn(Number(common.param('gasPrices', 'sstoreReset'))) - .isubn(Number(common.param('gasPrices', 'coldsload'))) - .isubn(Number(common.param('gasPrices', 'warmstorageread'))) + .iaddn(Number(common.param('sstoreReset'))) + .isubn(Number(common.param('coldsload'))) + .isubn(Number(common.param('warmstorageread'))) } else { - result.iaddn( - Number(common.param('gasPrices', 'sstoreCleanRefundEIP2200')), - ) + result.iaddn(Number(common.param('sstoreCleanRefundEIP2200'))) } } } } } else { if (inputs.newValue === '0' && inputs.currentValue !== '0') { - result = new BN(Number(common.param('gasPrices', 'sstoreRefund'))) + result = new BN(Number(common.param('sstoreRefund'))) } else { result = new BN(0) } @@ -301,7 +277,7 @@ export const calculateDynamicRefund = ( if (common.gteHardfork('london')) { return null } else { - result = new BN(Number(common.param('gasPrices', 'selfdestructRefund'))) + result = new BN(Number(common.param('selfdestructRefund'))) } break } @@ -333,7 +309,7 @@ export const calculateOpcodeDynamicFee = ( switch (opcode.opcodeOrAddress) { case '0a': { const exponent = new BN(inputs.exponent) - const gasPrice = Number(common.param('gasPrices', 'expByte')) + const gasPrice = Number(common.param('expByte')) result = new BN(exponent.byteLength()).imuln(gasPrice) break } @@ -389,9 +365,9 @@ export const calculateOpcodeDynamicFee = ( case '54': { if (common.gteHardfork('berlin')) { if (inputs.cold === '1') { - result = new BN(Number(common.param('gasPrices', 'coldsload'))) + result = new BN(Number(common.param('coldsload'))) } else { - result = new BN(Number(common.param('gasPrices', 'warmstorageread'))) + result = new BN(Number(common.param('warmstorageread'))) } } else { result = new BN(0) @@ -402,7 +378,7 @@ export const calculateOpcodeDynamicFee = ( result = sstoreCost(common, inputs) if (common.gteHardfork('berlin') && inputs.cold === '1') { - result.iaddn(Number(common.param('gasPrices', 'coldsload'))) + result.iaddn(Number(common.param('coldsload'))) } break } @@ -435,14 +411,10 @@ export const calculateOpcodeDynamicFee = ( new BN(inputs.memorySize), common, ) - result = new BN(Number(common.param('gasPrices', 'logTopic'))) + result = new BN(Number(common.param('logTopic'))) .imul(topicsCount) .iadd(expansionCost) - .iadd( - new BN(inputs.size).muln( - Number(common.param('gasPrices', 'logData')), - ), - ) + .iadd(new BN(inputs.size).muln(Number(common.param('logData')))) break } case 'f0': { @@ -469,7 +441,7 @@ export const calculateOpcodeDynamicFee = ( case 'f5': { result = createCost(common, inputs).iadd( toWordSize(new BN(inputs.size)).imuln( - Number(common.param('gasPrices', 'keccak256Word')), + Number(common.param('keccak256Word')), ), ) break @@ -485,13 +457,13 @@ export const calculateOpcodeDynamicFee = ( } case 'ff': { if (inputs.empty === '1' && inputs.hasNoBalance !== '1') { - result = new BN(Number(common.param('gasPrices', 'callNewAccount'))) + result = new BN(Number(common.param('callNewAccount'))) } else { result = new BN(0) } if (common.gteHardfork('berlin') && inputs.cold === '1') { - result.iaddn(Number(common.param('gasPrices', 'coldaccountaccess'))) + result.iaddn(Number(common.param('coldaccountaccess'))) } break } @@ -574,31 +546,29 @@ export const calculatePrecompiledDynamicFee = ( let result = null switch (precompiled.opcodeOrAddress) { case '0x01': { - result = new BN(Number(common.param('gasPrices', 'ecRecover'))) + result = new BN(Number(common.param('ecRecover'))) break } case '0x02': { result = toWordSize(new BN(inputs.size)) - .imuln(Number(common.param('gasPrices', 'sha256Word'))) - .iaddn(Number(common.param('gasPrices', 'sha256'))) + .imuln(Number(common.param('sha256Word'))) + .iaddn(Number(common.param('sha256'))) break } case '0x03': { result = toWordSize(new BN(inputs.size)) - .imuln(Number(common.param('gasPrices', 'ripemd160Word'))) - .iaddn(Number(common.param('gasPrices', 'ripemd160'))) + .imuln(Number(common.param('ripemd160Word'))) + .iaddn(Number(common.param('ripemd160'))) break } case '0x04': { result = toWordSize(new BN(inputs.size)) - .imuln(Number(common.param('gasPrices', 'identityWord'))) - .iaddn(Number(common.param('gasPrices', 'identity'))) + .imuln(Number(common.param('identityWord'))) + .iaddn(Number(common.param('identity'))) break } case '0x05': { - const Gquaddivisor = Number( - common.param('gasPrices', 'modexpGquaddivisor'), - ) + const Gquaddivisor = Number(common.param('modexpGquaddivisor')) result = getAdjustedExponentLength(new BN(inputs.exponent)) let maxLen = new BN(inputs.Bsize) @@ -621,7 +591,7 @@ export const calculatePrecompiledDynamicFee = ( if (inputs.invalid === '1') { result = new BN(inputs.remaining) } else { - result = new BN(Number(common.param('gasPrices', 'ecAdd'))) + result = new BN(Number(common.param('ecAdd'))) } break } @@ -629,28 +599,26 @@ export const calculatePrecompiledDynamicFee = ( if (inputs.invalid === '1') { result = new BN(inputs.remaining) } else { - result = new BN(Number(common.param('gasPrices', 'ecMul'))) + result = new BN(Number(common.param('ecMul'))) } break } case '0x08': { const inputDataSize = Math.floor(parseInt(inputs.size || 0) / 192) result = new BN( - Number(common.param('gasPrices', 'ecPairing')) + - inputDataSize * Number(common.param('gasPrices', 'ecPairingWord')), + Number(common.param('ecPairing')) + + inputDataSize * Number(common.param('ecPairingWord')), ) break } case '0x09': { - result = new BN(Number(common.param('gasPrices', 'blake2Round'))) + result = new BN(Number(common.param('blake2Round'))) result.imul(new BN(inputs.rounds)) break } case '0x0a': { result = new BN( - Number( - common.param('gasPrices', 'kzgPointEvaluationGasPrecompilePrice'), - ), + Number(common.param('kzgPointEvaluationGasPrecompilePrice')), ) break } @@ -682,7 +650,7 @@ export const parseGasPrices = (common: Common, contents: string) => { } if (namespace === 'gasPrices') { - const gasPrice = common.param('gasPrices', key) + const gasPrice = common.param(key) return gasPrice.toString() } return str diff --git a/webpack/nodeModuleReplacement.js b/webpack/nodeModuleReplacement.js index 1b438d2b..845c412b 100644 --- a/webpack/nodeModuleReplacement.js +++ b/webpack/nodeModuleReplacement.js @@ -10,6 +10,9 @@ module.exports.default = new NormalModuleReplacementPlugin( case 'buffer': resource.request = 'buffer' break + case 'crypto': + resource.request = 'crypto-browserify' + break case 'stream': resource.request = 'readable-stream' break