diff --git a/.circleci/config.yml b/.circleci/config.yml index b34e3716dd..e193c39d81 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -313,3 +313,5 @@ workflows: filters: branches: only: remix_beta + +# VS Code Extension Version: 1.5.0 \ No newline at end of file diff --git a/apps/debugger/webpack.config.js b/apps/debugger/webpack.config.js index 5bb78141c3..32991b2e69 100644 --- a/apps/debugger/webpack.config.js +++ b/apps/debugger/webpack.config.js @@ -2,6 +2,7 @@ const nxWebpack = require('@nrwl/react/plugins/webpack') module.exports = config => { const nxWebpackConfig = nxWebpack(config) + const webpackConfig = { ...nxWebpackConfig, resolve : { diff --git a/apps/remix-ide-e2e/src/tests/debugger.test.ts b/apps/remix-ide-e2e/src/tests/debugger.test.ts index c659dabc01..273123b87e 100644 --- a/apps/remix-ide-e2e/src/tests/debugger.test.ts +++ b/apps/remix-ide-e2e/src/tests/debugger.test.ts @@ -167,7 +167,11 @@ module.exports = { .clickFunction('t - transact (not payable)') .pause(2000) .debugTransaction(0) - .waitForElementVisible('*[data-id="slider"]').pause(2000) + .waitForElementVisible('*[data-id="slider"]') + .waitForElementVisible({ + locateStrategy: 'xpath', + selector: '//*[@data-id="treeViewLivm trace step" and contains(.,"29")]', + }) .goToVMTraceStep(7453) .waitForElementPresent('*[data-id="treeViewDivtreeViewItemarray"]') .click('*[data-id="treeViewDivtreeViewItemarray"]') diff --git a/apps/remix-ide-e2e/src/tests/remixd.test.ts b/apps/remix-ide-e2e/src/tests/remixd.test.ts index fb881e28e9..b27e81a380 100644 --- a/apps/remix-ide-e2e/src/tests/remixd.test.ts +++ b/apps/remix-ide-e2e/src/tests/remixd.test.ts @@ -72,8 +72,8 @@ module.exports = { return sources }, 'run Remixd tests #group4': function (browser) { - browser.perform((done) => { - remixd = spawnRemixd(join(process.cwd(), '/apps/remix-ide', '/contracts')) + browser.perform(async (done) => { + remixd = await spawnRemixd(join(process.cwd(), '/apps/remix-ide', '/contracts')) console.log('working directory', process.cwd()) connectRemixd(browser, done) }) @@ -86,8 +86,8 @@ module.exports = { when a relative import is used (i.e import "openzeppelin-solidity/contracts/math/SafeMath.sol") remix (as well as truffle) try to resolve it against the node_modules and installed_contracts folder. */ - browser.perform((done) => { - remixd = spawnRemixd(join(process.cwd(), '/apps/remix-ide', '/contracts')) + browser.perform(async (done) => { + remixd = await spawnRemixd(join(process.cwd(), '/apps/remix-ide', '/contracts')) console.log('working directory', process.cwd()) connectRemixd(browser, done) }) @@ -100,8 +100,8 @@ module.exports = { .testContracts('test_import_node_modules.sol', sources[3]['test_import_node_modules.sol'], ['SafeMath']) }, 'Import from node_modules and reference a github import #group2': function (browser) { - browser.perform((done) => { - remixd = spawnRemixd(join(process.cwd(), '/apps/remix-ide', '/contracts')) + browser.perform(async (done) => { + remixd = await spawnRemixd(join(process.cwd(), '/apps/remix-ide', '/contracts')) console.log('working directory', process.cwd()) connectRemixd(browser, done) }) @@ -146,8 +146,8 @@ module.exports = { 'Should listen on compilation result from hardhat #group5': function (browser: NightwatchBrowser) { - browser.perform((done) => { - remixd = spawnRemixd(join(process.cwd(), '/apps/remix-ide', '/contracts/hardhat')) + browser.perform(async (done) => { + remixd = await spawnRemixd(join(process.cwd(), '/apps/remix-ide', '/contracts/hardhat')) console.log('working directory', process.cwd()) connectRemixd(browser, done) }) @@ -181,8 +181,8 @@ module.exports = { writeFileSync('./apps/remix-ide/contracts/hardhat/artifacts/build-info/7839ba878952cc00ff316061405f273a.json', JSON.stringify(hardhatCompilation)) done() }) - .perform((done) => { - remixd = spawnRemixd(join(process.cwd(), '/apps/remix-ide', '/contracts/hardhat')) + .perform(async (done) => { + remixd = await spawnRemixd(join(process.cwd(), '/apps/remix-ide', '/contracts/hardhat')) console.log('working directory', process.cwd()) connectRemixd(browser, done) }) @@ -201,8 +201,8 @@ module.exports = { 'Should listen on compilation result from foundry #group7': function (browser: NightwatchBrowser) { - browser.perform((done) => { - remixd = spawnRemixd(join(process.cwd(), '/apps/remix-ide', '/contracts/foundry')) + browser.perform(async (done) => { + remixd = await spawnRemixd(join(process.cwd(), '/apps/remix-ide', '/contracts/foundry')) console.log('working directory', process.cwd()) connectRemixd(browser, done) }) @@ -236,8 +236,8 @@ module.exports = { 'Should listen on compilation result from truffle #group8': function (browser: NightwatchBrowser) { - browser.perform((done) => { - remixd = spawnRemixd(join(process.cwd(), '/apps/remix-ide', '/contracts/truffle')) + browser.perform(async (done) => { + remixd = await spawnRemixd(join(process.cwd(), '/apps/remix-ide', '/contracts/truffle')) console.log('working directory', process.cwd()) connectRemixd(browser, done) }) @@ -311,15 +311,22 @@ function testImportFromRemixd(browser: NightwatchBrowser, callback: VoidFunction .perform(() => { callback() }) } -function spawnRemixd(path: string) { +async function spawnRemixd(path: string): Promise { const remixd = spawn('yarn run remixd', [`-s ${path}`], { cwd: process.cwd(), shell: true, detached: true }) - remixd.stdout.on('data', function (data) { - console.log('stdout: ' + data.toString()) - }) - remixd.stderr.on('err', function (data) { - console.log('err: ' + data.toString()) + return new Promise((resolve, reject) => { + remixd.stdout.on('data', function (data) { + if( + data.toString().includes('is listening') + || data.toString().includes('There is already a client running') + ) { + + resolve(remixd) + } + }) + remixd.stderr.on('err', function (data) { + reject(data.toString()) + }) }) - return remixd } function connectRemixd(browser: NightwatchBrowser, done: any) { diff --git a/apps/remix-ide/.babelrc b/apps/remix-ide/.babelrc index bad0bfb00c..9123728aa1 100644 --- a/apps/remix-ide/.babelrc +++ b/apps/remix-ide/.babelrc @@ -2,7 +2,7 @@ "presets": ["@babel/preset-env", ["@babel/preset-react", {"runtime": "automatic"} ]], - "plugins": ["@babel/plugin-proposal-class-properties", "@babel/plugin-transform-runtime"], + "plugins": ["@babel/plugin-proposal-class-properties", "@babel/plugin-transform-runtime", "@babel/plugin-proposal-nullish-coalescing-operator"], "ignore": [ "**/node_modules/**" ] diff --git a/apps/remix-ide/ci/browser_test.sh b/apps/remix-ide/ci/browser_test.sh index 00e7ec440d..600e794c7f 100755 --- a/apps/remix-ide/ci/browser_test.sh +++ b/apps/remix-ide/ci/browser_test.sh @@ -7,7 +7,6 @@ set -e BUILD_ID=${CIRCLE_BUILD_NUM:-${TRAVIS_JOB_NUMBER}} echo "$BUILD_ID" TEST_EXITCODE=0 - yarn run ganache-cli & yarn run serve:production & echo 'sharing folder: ' $PWD '/apps/remix-ide/contracts' & diff --git a/apps/remix-ide/src/app/tabs/test-tab.js b/apps/remix-ide/src/app/tabs/test-tab.js index b5c9518d23..3ed78a474a 100644 --- a/apps/remix-ide/src/app/tabs/test-tab.js +++ b/apps/remix-ide/src/app/tabs/test-tab.js @@ -74,7 +74,7 @@ module.exports = class TestTab extends ViewPlugin { if (!isSolidityActive) { await this.call('manager', 'activatePlugin', 'solidity') } - await this.testRunner.init() + await this.testRunner.init(await this.call('blockchain', 'web3VM')) await this.createTestLibs() } @@ -108,7 +108,8 @@ module.exports = class TestTab extends ViewPlugin { /* Test is not associated with the UI */ - testFromSource (content, path = 'browser/unit_test.sol') { + async testFromSource (content, path = 'browser/unit_test.sol') { + const web3 = await this.call('blockchain', 'web3VM') return new Promise((resolve, reject) => { const runningTest = {} runningTest[path] = { content } @@ -126,6 +127,8 @@ module.exports = class TestTab extends ViewPlugin { resolve(result) }, (url, cb) => { return this.contentImport.resolveAndSave(url).then((result) => cb(null, result)).catch((error) => cb(error.message)) + }, { + web3 }) }) } diff --git a/apps/remix-ide/src/blockchain/blockchain.js b/apps/remix-ide/src/blockchain/blockchain.js index c345231ce9..509e2d4ea3 100644 --- a/apps/remix-ide/src/blockchain/blockchain.js +++ b/apps/remix-ide/src/blockchain/blockchain.js @@ -22,7 +22,7 @@ const profile = { name: 'blockchain', displayName: 'Blockchain', description: 'Blockchain - Logic', - methods: ['getCode', 'getTransactionReceipt', 'addProvider', 'removeProvider'], + methods: ['getCode', 'getTransactionReceipt', 'addProvider', 'removeProvider', 'getCurrentFork', 'web3VM'], version: packageJson.version } @@ -295,7 +295,7 @@ export class Blockchain extends Plugin { if (error) { return finalCb(`creation of ${selectedContract.name} errored: ${error.message ? error.message : error}`) } - if (txResult.receipt.status === false || txResult.receipt.status === '0x0') { + if (txResult.receipt.status === false || txResult.receipt.status === '0x0' || txResult.receipt.status === 0) { return finalCb(`creation of ${selectedContract.name} errored: transaction execution failed`) } finalCb(null, selectedContract, address) @@ -401,6 +401,10 @@ export class Blockchain extends Plugin { this.getCurrentProvider().signMessage(message, account, passphrase, cb) } + web3VM () { + return this.providers.vm.web3 + } + web3 () { // @todo(https://github.com/ethereum/remix-project/issues/431) const isVM = this.getProvider() === 'vm' @@ -733,7 +737,7 @@ export class Blockchain extends Plugin { execResult = await this.web3().eth.getExecutionResultFromSimulator(txResult.transactionHash) if (execResult) { // if it's not the VM, we don't have return value. We only have the transaction, and it does not contain the return value. - returnValue = execResult ? execResult.returnValue : toBuffer(addHexPrefix(txResult.result) || '0x0000000000000000000000000000000000000000000000000000000000000000') + returnValue = execResult ? toBuffer(execResult.returnValue) : toBuffer(addHexPrefix(txResult.result) || '0x0000000000000000000000000000000000000000000000000000000000000000') const compiledContracts = await this.call('compilerArtefacts', 'getAllContractDatas') const vmError = txExecution.checkVMError(execResult, compiledContracts) if (vmError.error) { diff --git a/apps/remix-ide/src/blockchain/execution-context.js b/apps/remix-ide/src/blockchain/execution-context.js index 1b7f808bc4..bdd403b93c 100644 --- a/apps/remix-ide/src/blockchain/execution-context.js +++ b/apps/remix-ide/src/blockchain/execution-context.js @@ -133,11 +133,7 @@ export class ExecutionContext { internalWeb3 () { return web3 } - - blankWeb3 () { - return new Web3() - } - + setContext (context, endPointUrl, confirmCb, infoCb) { this.executionContext = context this.executionContextChange(context, endPointUrl, confirmCb, infoCb, null) diff --git a/apps/remix-ide/src/blockchain/providers/vm.js b/apps/remix-ide/src/blockchain/providers/vm.js index b503aed6f9..281288a38b 100644 --- a/apps/remix-ide/src/blockchain/providers/vm.js +++ b/apps/remix-ide/src/blockchain/providers/vm.js @@ -1,10 +1,10 @@ const Web3 = require('web3') const { BN, privateToAddress, hashPersonalMessage } = require('ethereumjs-util') -const { Provider, extend } = require('@remix-project/remix-simulator') - +const { extend } = require('@remix-project/remix-simulator') class VMProvider { constructor (executionContext) { this.executionContext = executionContext + this.worker = null } getAccounts (cb) { @@ -17,10 +17,27 @@ class VMProvider { } resetEnvironment () { + if (this.worker) this.worker.terminate() this.accounts = {} - this.RemixSimulatorProvider = new Provider({ fork: this.executionContext.getCurrentFork() }) - this.RemixSimulatorProvider.init() - this.web3 = new Web3(this.RemixSimulatorProvider) + this.worker = new Worker(new URL('./worker-vm', import.meta.url)) + this.worker.postMessage({ cmd: 'init', fork: this.executionContext.getCurrentFork() }) + + let incr = 0 + const stamps = {} + this.worker.addEventListener('message', (msg) => { + if (stamps[msg.data.stamp]) { + stamps[msg.data.stamp](msg.data.error, msg.data.result) + } + }) + const provider = { + sendAsync: (query, callback) => { + const stamp = Date.now() + incr + incr++ + stamps[stamp] = callback + this.worker.postMessage({ cmd: 'sendAsync', query, stamp }) + } + } + this.web3 = new Web3(provider) extend(this.web3) this.accounts = {} this.executionContext.setWeb3('vm', this.web3) diff --git a/apps/remix-ide/src/blockchain/providers/worker-vm.ts b/apps/remix-ide/src/blockchain/providers/worker-vm.ts new file mode 100644 index 0000000000..56d479041d --- /dev/null +++ b/apps/remix-ide/src/blockchain/providers/worker-vm.ts @@ -0,0 +1,36 @@ +import { Provider } from '@remix-project/remix-simulator' + +let provider: Provider = null +self.onmessage = (e: MessageEvent) => { + const data = e.data + switch (data.cmd) { + case 'init': + { + provider = new Provider({ fork: data.fork }) + if (provider) provider.init() + break + } + case 'sendAsync': + { + if (provider) { + provider.sendAsync(data.query, (error, result) => { + self.postMessage({ + cmd: 'sendAsyncResult', + error, + result, + stamp: data.stamp + }) + }) + } else { + self.postMessage({ + cmd: 'sendAsyncResult', + error: 'Provider not instantiated', + result: null, + stamp: data.stamp + }) + } + + break + } + } +} diff --git a/babel.config.js b/babel.config.js index 56dbf11731..e31ff6f5b2 100644 --- a/babel.config.js +++ b/babel.config.js @@ -4,6 +4,7 @@ module.exports = { "babel-plugin-replace-ts-export-assignment", "@babel/plugin-transform-modules-commonjs", "@babel/plugin-proposal-class-properties", + "@babel/plugin-proposal-nullish-coalescing-operator", ["@babel/plugin-proposal-private-property-in-object", { "loose": false }], ["@babel/plugin-proposal-private-methods", { "loose": false }]] } \ No newline at end of file diff --git a/libs/remix-analyzer/package.json b/libs/remix-analyzer/package.json index 30d5365381..8b73f84f7b 100644 --- a/libs/remix-analyzer/package.json +++ b/libs/remix-analyzer/package.json @@ -21,9 +21,9 @@ } ], "dependencies": { - "@ethereumjs/block": "^3.5.1", - "@ethereumjs/tx": "^3.3.2", - "@ethereumjs/vm": "^5.5.3", + "@ethereumjs/block": "^4.0.0", + "@ethereumjs/tx": "^4.0.0", + "@ethereumjs/vm": "^6.0.0", "@remix-project/remix-astwalker": "^0.0.51", "@remix-project/remix-lib": "^0.5.21", "async": "^2.6.2", diff --git a/libs/remix-astwalker/package.json b/libs/remix-astwalker/package.json index 4b1b7e8937..72b9869154 100644 --- a/libs/remix-astwalker/package.json +++ b/libs/remix-astwalker/package.json @@ -33,9 +33,9 @@ ] }, "dependencies": { - "@ethereumjs/block": "^3.5.1", - "@ethereumjs/tx": "^3.3.2", - "@ethereumjs/vm": "^5.5.3", + "@ethereumjs/block": "^4.0.0", + "@ethereumjs/tx": "^4.0.0", + "@ethereumjs/vm": "^6.0.0", "@remix-project/remix-lib": "^0.5.21", "@types/tape": "^4.2.33", "async": "^2.6.2", diff --git a/libs/remix-debug/package.json b/libs/remix-debug/package.json index 2f762aac7e..515a3efef1 100644 --- a/libs/remix-debug/package.json +++ b/libs/remix-debug/package.json @@ -21,10 +21,10 @@ "test": "./../../node_modules/.bin/ts-node --project ../../tsconfig.base.json --require tsconfig-paths/register ./../../node_modules/.bin/tape ./test/tests.ts" }, "dependencies": { - "@ethereumjs/block": "^3.5.1", - "@ethereumjs/common": "^2.5.0", - "@ethereumjs/tx": "^3.3.2", - "@ethereumjs/vm": "^5.5.3", + "@ethereumjs/block": "^4.0.0", + "@ethereumjs/common": "^3.0.0", + "@ethereumjs/tx": "^4.0.0", + "@ethereumjs/vm": "^6.0.0", "@remix-project/remix-astwalker": "^0.0.51", "@remix-project/remix-lib": "^0.5.21", "@remix-project/remix-simulator": "^0.2.21", diff --git a/libs/remix-debug/src/code/codeUtils.ts b/libs/remix-debug/src/code/codeUtils.ts index caebf7d150..6590cfc01d 100644 --- a/libs/remix-debug/src/code/codeUtils.ts +++ b/libs/remix-debug/src/code/codeUtils.ts @@ -1,11 +1,11 @@ 'use strict' -import Common from '@ethereumjs/common' -import { getOpcodesForHF } from '@ethereumjs/vm/dist/evm/opcodes' +import { Common } from '@ethereumjs/common' +import { getOpcodesForHF, OpcodeList } from '@ethereumjs/evm/dist/opcodes/codes' import getOpcodes from './opcodes' export function nameOpCodes (raw, hardfork) { const common = new Common({ chain: 'mainnet', hardfork }) - const opcodes = getOpcodesForHF(common) + const opcodes = getOpcodesForHF(common).opcodes let pushData = '' const codeMap = {} @@ -47,7 +47,7 @@ type Opcode = { */ export function parseCode (raw) { const common = new Common({ chain: 'mainnet', hardfork: 'london' }) - const opcodes = getOpcodesForHF(common) + const opcodes = getOpcodesForHF(common).opcodes const code = [] for (let i = 0; i < raw.length; i++) { diff --git a/libs/remix-lib/package.json b/libs/remix-lib/package.json index 34c1867ea4..ec18f356be 100644 --- a/libs/remix-lib/package.json +++ b/libs/remix-lib/package.json @@ -17,9 +17,6 @@ "test": "./../../node_modules/.bin/ts-node --require tsconfig-paths/register ./../../node_modules/.bin/tape ./test/tests.ts" }, "dependencies": { - "@ethereumjs/block": "^3.5.1", - "@ethereumjs/tx": "^3.3.2", - "@ethereumjs/vm": "^5.5.3", "async": "^2.1.2", "ethereumjs-util": "^7.0.10", "ethers": "^4.0.40", diff --git a/libs/remix-lib/src/execution/txExecution.ts b/libs/remix-lib/src/execution/txExecution.ts index da9274e89c..781d9733ce 100644 --- a/libs/remix-lib/src/execution/txExecution.ts +++ b/libs/remix-lib/src/execution/txExecution.ts @@ -89,7 +89,7 @@ export function checkVMError (execResult, compiledContracts) { ret.error = true } else if (exceptionError === errorCode.REVERT) { const returnData = execResult.returnValue - const returnDataHex = returnData.slice(0, 4).toString('hex') + const returnDataHex = returnData.slice(2, 10) let customError if (compiledContracts) { let decodedCustomErrorInputsClean @@ -159,7 +159,7 @@ export function checkVMError (execResult, compiledContracts) { // It is the hash of Error(string) if (returnData && (returnDataHex === '08c379a0')) { const abiCoder = new ethers.utils.AbiCoder() - const reason = abiCoder.decode(['string'], returnData.slice(4))[0] + const reason = abiCoder.decode(['string'], '0x' + returnData.slice(10))[0] msg = `\tThe transaction has been reverted to the initial state.\nReason provided by the contract: "${reason}".` } else { msg = '\tThe transaction has been reverted to the initial state.\nNote: The called function should be payable if you send value and the value you send should be less than your current balance.' diff --git a/libs/remix-lib/src/execution/txListener.ts b/libs/remix-lib/src/execution/txListener.ts index de94fbf3e6..b1d8b0f169 100644 --- a/libs/remix-lib/src/execution/txListener.ts +++ b/libs/remix-lib/src/execution/txListener.ts @@ -10,7 +10,7 @@ function addExecutionCosts (txResult, tx, execResult) { if (txResult) { if (execResult) { tx.returnValue = execResult.returnValue - if (execResult.gasUsed) tx.executionCost = execResult.gasUsed.toString(10) + if (execResult.executionGasUsed) tx.executionCost = execResult.executionGasUsed.toString(10) } if (txResult.receipt && txResult.receipt.gasUsed) tx.transactionCost = txResult.receipt.gasUsed.toString(10) } @@ -64,7 +64,7 @@ export class TxListener { let execResult if (this.executionContext.isVM()) { execResult = await this.executionContext.web3().eth.getExecutionResultFromSimulator(txResult.transactionHash) - returnValue = execResult.returnValue + returnValue = toBuffer(execResult.returnValue) } else { returnValue = toBuffer(addHexPrefix(txResult.result)) } @@ -104,7 +104,7 @@ export class TxListener { addExecutionCosts(txResult, tx, execResult) tx.envMode = this.executionContext.getProvider() - tx.status = txResult.receipt.status // 0x0 or 0x1 + tx.status = txResult.receipt.status this._resolve([tx]) }) }) diff --git a/libs/remix-lib/src/execution/txRunnerVM.ts b/libs/remix-lib/src/execution/txRunnerVM.ts index fb4e291916..3b77637108 100644 --- a/libs/remix-lib/src/execution/txRunnerVM.ts +++ b/libs/remix-lib/src/execution/txRunnerVM.ts @@ -1,10 +1,21 @@ 'use strict' +import { RunBlockResult, RunTxResult } from '@ethereumjs/vm' import { Transaction, FeeMarketEIP1559Transaction } from '@ethereumjs/tx' import { Block } from '@ethereumjs/block' import { BN, bufferToHex, Address } from 'ethereumjs-util' +import type { Account } from '@ethereumjs/util' import { EventManager } from '../eventManager' import { LogsManager } from './logsManager' +export type VMexecutionResult = { + result: RunTxResult, + transactionHash: string + block: Block, + tx: Transaction +} + +export type VMExecutionCallBack = (error: string | Error, result?: VMexecutionResult) => void + export class TxRunnerVM { event blockNumber @@ -41,20 +52,20 @@ export class TxRunnerVM { this.nextNonceForCall = 0 } - execute (args, confirmationCb, gasEstimationForceSend, promptCb, callback) { + execute (args, confirmationCb, gasEstimationForceSend, promptCb, callback: VMExecutionCallBack) { let data = args.data if (data.slice(0, 2) !== '0x') { data = '0x' + data } try { - this.runInVm(args.from, args.to, data, args.value, args.gasLimit, args.useCall, args.timestamp, callback) + this.runInVm(args.from, args.to, data, args.value, args.gasLimit, args.useCall, callback) } catch (e) { callback(e, null) } } - runInVm (from, to, data, value, gasLimit, useCall, timestamp, callback) { + runInVm (from: string, to: string, data: string, value: string, gasLimit: number, useCall: boolean, callback: VMExecutionCallBack) { const self = this let account if (!from && useCall && Object.keys(self.vmaccounts).length) { @@ -65,30 +76,13 @@ export class TxRunnerVM { if (!account) { return callback('Invalid account selected') } - if (Number.isInteger(gasLimit)) { - gasLimit = '0x' + gasLimit.toString(16) - } - - this.getVMObject().stateManager.getAccount(Address.fromString(from)).then((res) => { - // See https://github.com/ethereumjs/ethereumjs-tx/blob/master/docs/classes/transaction.md#constructor - // for initialization fields and their types - if (!value) value = 0 - if (typeof value === 'string') { - if (value.startsWith('0x')) value = new BN(value.replace('0x', ''), 'hex') - else { - try { - value = new BN(value, 10) - } catch (e) { - return callback('Unable to parse the value ' + e.message) - } - } - } - + + this.getVMObject().stateManager.getAccount(Address.fromString(from)).then((res: Account) => { const EIP1559 = this.commonContext.hardfork() !== 'berlin' // berlin is the only pre eip1559 fork that we handle. let tx if (!EIP1559) { tx = Transaction.fromTxData({ - nonce: useCall ? this.nextNonceForCall : new BN(res.nonce), + nonce: useCall ? this.nextNonceForCall : res.nonce, gasPrice: '0x1', gasLimit: gasLimit, to: to, @@ -97,7 +91,7 @@ export class TxRunnerVM { }, { common: this.commonContext }).sign(account.privateKey) } else { tx = FeeMarketEIP1559Transaction.fromTxData({ - nonce: useCall ? this.nextNonceForCall : new BN(res.nonce), + nonce: useCall ? this.nextNonceForCall : res.nonce, maxPriorityFeePerGas: '0x01', maxFeePerGas: '0x1', gasLimit: gasLimit, @@ -109,15 +103,15 @@ export class TxRunnerVM { if (useCall) this.nextNonceForCall++ const coinbases = ['0x0e9281e9c6a0808672eaba6bd1220e144c9bb07a', '0x8945a1288dc78a6d8952a92c77aee6730b414778', '0x94d76e24f818426ae84aa404140e8d5f60e10e7e'] - const difficulties = [new BN('69762765929000', 10), new BN('70762765929000', 10), new BN('71762765929000', 10)] + const difficulties = [69762765929000, 70762765929000, 71762765929000] const block = Block.fromBlockData({ header: { - timestamp: timestamp || (new Date().getTime() / 1000 | 0), + timestamp: new Date().getTime() / 1000 | 0, number: self.blockNumber, coinbase: coinbases[self.blockNumber % coinbases.length], difficulty: difficulties[self.blockNumber % difficulties.length], - gasLimit: new BN(gasLimit.replace('0x', ''), 16).imuln(2), + gasLimit, baseFeePerGas: EIP1559 ? '0x1' : undefined }, transactions: [tx] @@ -141,14 +135,10 @@ export class TxRunnerVM { } runBlockInVm (tx, block, callback) { - this.getVMObject().vm.runBlock({ block: block, generate: true, skipBlockValidation: true, skipBalance: false, skipNonce: true }).then((results) => { - const result = results.results[0] - if (result) { - const status = result.execResult.exceptionError ? 0 : 1 - result.status = `0x${status}` - } + this.getVMObject().vm.runBlock({ block: block, generate: true, skipBlockValidation: true, skipBalance: false, skipNonce: true }).then((results: RunBlockResult) => { + const result: RunTxResult = results.results[0] callback(null, { - result: result, + result, transactionHash: bufferToHex(Buffer.from(tx.hash())), block, tx diff --git a/libs/remix-lib/src/execution/txRunnerWeb3.ts b/libs/remix-lib/src/execution/txRunnerWeb3.ts index 2300973b3a..465960a753 100644 --- a/libs/remix-lib/src/execution/txRunnerWeb3.ts +++ b/libs/remix-lib/src/execution/txRunnerWeb3.ts @@ -47,6 +47,8 @@ export class TxRunnerWeb3 { } _sendTransaction (sendTx, tx, pass, callback) { + let currentDateTime = new Date(); + const start = currentDateTime.getTime() / 1000 const cb = (err, resp) => { if (err) { return callback(err, resp) @@ -57,6 +59,9 @@ export class TxRunnerWeb3 { return new Promise(async (resolve, reject) => { const receipt = await tryTillReceiptAvailable(resp, this.getWeb3()) tx = await tryTillTxAvailable(resp, this.getWeb3()) + currentDateTime = new Date(); + const end = currentDateTime.getTime() / 1000 + console.log('stopwatch', end - start) resolve({ receipt, tx, diff --git a/libs/remix-lib/src/index.ts b/libs/remix-lib/src/index.ts index 1f2cdb6676..628626fecd 100644 --- a/libs/remix-lib/src/index.ts +++ b/libs/remix-lib/src/index.ts @@ -18,6 +18,7 @@ import * as txResultHelper from './helpers/txResultHelper' export { ConsoleLogs } from './helpers/hhconsoleSigs' export { ICompilerApi, ConfigurationSettings } from './types/ICompilerApi' export { QueryParams } from './query-params' +export { VMexecutionResult } from './execution/txRunnerVM' const helpers = { ui: uiHelper, diff --git a/libs/remix-simulator/package.json b/libs/remix-simulator/package.json index cdbb506cd1..7421e763a6 100644 --- a/libs/remix-simulator/package.json +++ b/libs/remix-simulator/package.json @@ -17,10 +17,10 @@ "test": "./../../node_modules/.bin/ts-node --project ../../tsconfig.base.json --require tsconfig-paths/register ./../../node_modules/.bin/mocha test/*.ts" }, "dependencies": { - "@ethereumjs/block": "^3.5.1", - "@ethereumjs/common": "^2.5.0", - "@ethereumjs/tx": "^3.3.2", - "@ethereumjs/vm": "^5.5.3", + "@ethereumjs/block": "^4.0.0", + "@ethereumjs/common": "^3.0.0", + "@ethereumjs/tx": "^4.0.0", + "@ethereumjs/vm": "^6.0.0", "@remix-project/remix-lib": "^0.5.21", "ansi-gray": "^0.1.1", "async": "^3.1.0", diff --git a/libs/remix-simulator/src/VmProxy.ts b/libs/remix-simulator/src/VmProxy.ts index dcc834b617..afd840147c 100644 --- a/libs/remix-simulator/src/VmProxy.ts +++ b/libs/remix-simulator/src/VmProxy.ts @@ -4,14 +4,17 @@ import { helpers } from '@remix-project/remix-lib' const { normalizeHexAddress } = helpers.ui import { ConsoleLogs } from '@remix-project/remix-lib' import { toChecksumAddress, BN, keccak, bufferToHex, Address, toBuffer } from 'ethereumjs-util' -import Web3 from 'web3' +import utils from 'web3-utils' import { ethers } from 'ethers' import { VMContext } from './vm-context' +import type { StateManager } from '@ethereumjs/statemanager' +import type { InterpreterStep } from '@ethereumjs/evm/dist/interpreter' +import type { AfterTxEvent, VM } from '@ethereumjs/vm' +import type { TypedTransaction } from '@ethereumjs/tx' export class VmProxy { vmContext: VMContext - web3: Web3 - vm + vm: VM vmTraces txs txsReceipt @@ -26,7 +29,6 @@ export class VmProxy { providers currentProvider storageCache - lastProcessedStorageTxHash sha3Preimages sha3 toHex @@ -40,10 +42,11 @@ export class VmProxy { utils txsMapBlock blocks + stateCopy: StateManager constructor (vmContext: VMContext) { this.vmContext = vmContext - this.web3 = new Web3() + this.stateCopy this.vm = null this.vmTraces = {} this.txs = {} @@ -68,19 +71,18 @@ export class VmProxy { this.providers = { HttpProvider: function (url) {} } this.currentProvider = { host: 'vm provider' } this.storageCache = {} - this.lastProcessedStorageTxHash = {} this.sha3Preimages = {} // util - this.sha3 = (...args) => this.web3.utils.sha3.apply(this, args) - this.toHex = (...args) => this.web3.utils.toHex.apply(this, args) - this.toAscii = (...args) => this.web3.utils.toAscii.apply(this, args) - this.fromAscii = (...args) => this.web3.utils.fromAscii.apply(this, args) - this.fromDecimal = (...args) => this.web3.utils.fromDecimal.apply(this, args) - this.fromWei = (...args) => this.web3.utils.fromWei.apply(this, args) - this.toWei = (...args) => this.web3.utils.toWei.apply(this, args) - this.toBigNumber = (...args) => this.web3.utils.toBN.apply(this, args) - this.isAddress = (...args) => this.web3.utils.isAddress.apply(this, args) - this.utils = Web3.utils || [] + this.sha3 = (...args) => utils.sha3.apply(this, args) + this.toHex = (...args) => utils.toHex.apply(this, args) + this.toAscii = (...args) => utils.toAscii.apply(this, args) + this.fromAscii = (...args) => utils.fromAscii.apply(this, args) + this.fromDecimal = (...args) => utils.fromDecimal.apply(this, args) + this.fromWei = (...args) => utils.fromWei.apply(this, args) + this.toWei = (...args) => utils.toWei.apply(this, args) + this.toBigNumber = (...args) => utils.toBN.apply(this, args) + this.isAddress = (...args) => utils.isAddress.apply(this, args) + this.utils = utils this.txsMapBlock = {} this.blocks = {} } @@ -88,17 +90,16 @@ export class VmProxy { setVM (vm) { if (this.vm === vm) return this.vm = vm - this.vm.on('step', async (data, next) => { + this.vm.evm.events.on('step', async (data: InterpreterStep) => { await this.pushTrace(data) - next() }) - this.vm.on('afterTx', async (data, next) => { + this.vm.events.on('afterTx', async (data: AfterTxEvent, resolve: (result?: any) => void) => { await this.txProcessed(data) - next() + resolve() }) - this.vm.on('beforeTx', async (data, next) => { + this.vm.events.on('beforeTx', async (data: TypedTransaction, resolve: (result?: any) => void) => { await this.txWillProcess(data) - next() + resolve() }) } @@ -108,7 +109,8 @@ export class VmProxy { return ret } - async txWillProcess (data) { + async txWillProcess (data: TypedTransaction) { + this.stateCopy = await this.vm.stateManager.copy() this.incr++ this.processingHash = bufferToHex(data.hash()) this.vmTraces[this.processingHash] = { @@ -133,23 +135,24 @@ export class VmProxy { this.storageCache[this.processingHash] = {} this.storageCache['after_' + this.processingHash] = {} if (data.to) { - try { - const storage = await this.vm.stateManager.dumpStorage(data.to) - this.storageCache[this.processingHash][tx['to']] = storage - this.lastProcessedStorageTxHash[tx['to']] = this.processingHash - } catch (e) { - console.log(e) - } + (async (processingHash, processingAccount, processingAddress, self) => { + try { + const storage = await self.stateCopy.dumpStorage(processingAccount) + self.storageCache[processingHash][processingAddress] = storage + } catch (e) { + console.log(e) + } + })(this.processingHash, data.to, tx['to'], this) } this.processingIndex = 0 } - async txProcessed (data) { + async txProcessed (data: AfterTxEvent) { const lastOp = this.vmTraces[this.processingHash].structLogs[this.processingIndex - 1] if (lastOp) { lastOp.error = lastOp.op !== 'RETURN' && lastOp.op !== 'STOP' && lastOp.op !== 'DESTRUCT' } - const gasUsed = '0x' + data.gasUsed.toString(16) + const gasUsed = '0x' + data.totalGasSpent.toString(16) this.vmTraces[this.processingHash].gas = gasUsed this.txsReceipt[this.processingHash].gasUsed = gasUsed const logs = [] @@ -191,95 +194,102 @@ export class VmProxy { this.vmTraces[this.processingHash].return = toChecksumAddress(address) this.txsReceipt[this.processingHash].contractAddress = toChecksumAddress(address) } else if (data.execResult.returnValue) { - this.vmTraces[this.processingHash].return = bufferToHex(data.execResult.returnValue) + this.vmTraces[this.processingHash].return = '0x' + data.execResult.returnValue.toString('hex') } else { this.vmTraces[this.processingHash].return = '0x' } this.processingIndex = null this.processingAddress = null this.previousDepth = 0 + this.stateCopy = null } - async pushTrace (data) { - const depth = data.depth + 1 // geth starts the depth from 1 - if (!this.processingHash) { - console.log('no tx processing') - return - } - let previousopcode - if (this.vmTraces[this.processingHash] && this.vmTraces[this.processingHash].structLogs[this.processingIndex - 1]) { - previousopcode = this.vmTraces[this.processingHash].structLogs[this.processingIndex - 1] - } - - if (this.previousDepth > depth && previousopcode) { - // returning from context, set error it is not STOP, RETURN - previousopcode.invalidDepthChange = previousopcode.op !== 'RETURN' && previousopcode.op !== 'STOP' - } - const step = { - stack: hexListFromBNs(data.stack), - memory: formatMemory(data.memory), - storage: data.storage, - op: data.opcode.name, - pc: data.pc, - gasCost: data.opcode.fee.toString(), - gas: data.gasLeft.toString(), - depth: depth, - error: data.error === false ? undefined : data.error - } - this.vmTraces[this.processingHash].structLogs.push(step) - // Track hardhat console.log call - if (step.op === 'STATICCALL' && step.stack[step.stack.length - 2] === '0x000000000000000000000000000000000000000000636f6e736f6c652e6c6f67') { - const stackLength = step.stack.length - const payloadStart = parseInt(step.stack[stackLength - 3], 16) - const memory = step.memory.join('') - let payload = memory.substring(payloadStart * 2, memory.length) - const fnselectorStr = payload.substring(0, 8) - const fnselectorStrInHex = '0x' + fnselectorStr - const fnselector = parseInt(fnselectorStrInHex) - const fnArgs = ConsoleLogs[fnselector] - const iface = new ethers.utils.Interface([`function log${fnArgs} view`]) - const functionDesc = iface.getFunction(`log${fnArgs}`) - const sigHash = iface.getSighash(`log${fnArgs}`) - if (fnArgs.includes('uint') && sigHash !== fnselectorStrInHex) { - payload = payload.replace(fnselectorStr, sigHash) - } else { - payload = '0x' + payload + async pushTrace (data: InterpreterStep) { + try { + const depth = data.depth + 1 // geth starts the depth from 1 + if (!this.processingHash) { + return + } + let previousOpcode + if (this.vmTraces[this.processingHash] && this.vmTraces[this.processingHash].structLogs[this.processingIndex - 1]) { + previousOpcode = this.vmTraces[this.processingHash].structLogs[this.processingIndex - 1] + } + if (this.previousDepth > depth && previousOpcode) { + // returning from context, set error it is not STOP, RETURN + previousOpcode.invalidDepthChange = previousOpcode.op !== 'RETURN' && previousOpcode.op !== 'STOP' + } + const step = { + stack: hexListFromBNs(data.stack), + memory: formatMemory(data.memory), + storage: {}, + op: data.opcode.name, + pc: data.pc, + gasCost: data.opcode.fee.toString(), + gas: data.gasLeft.toString(), + depth: depth + } + this.vmTraces[this.processingHash].structLogs.push(step) + // Track hardhat console.log call + if (step.op === 'STATICCALL' && step.stack[step.stack.length - 2] === '0x000000000000000000000000000000000000000000636f6e736f6c652e6c6f67') { + const stackLength = step.stack.length + const payloadStart = parseInt(step.stack[stackLength - 3], 16) + const memory = step.memory.join('') + let payload = memory.substring(payloadStart * 2, memory.length) + const fnselectorStr = payload.substring(0, 8) + const fnselectorStrInHex = '0x' + fnselectorStr + const fnselector = parseInt(fnselectorStrInHex) + const fnArgs = ConsoleLogs[fnselector] + const iface = new ethers.utils.Interface([`function log${fnArgs} view`]) + const functionDesc = iface.getFunction(`log${fnArgs}`) + const sigHash = iface.getSighash(`log${fnArgs}`) + if (fnArgs.includes('uint') && sigHash !== fnselectorStrInHex) { + payload = payload.replace(fnselectorStr, sigHash) + } else { + payload = '0x' + payload + } + let consoleArgs = iface.decodeFunctionData(functionDesc, payload) + consoleArgs = consoleArgs.map((value) => { + if (utils.isBigNumber(value)) { + return value.toString() + } + return value + }) + this.hhLogs[this.processingHash] = this.hhLogs[this.processingHash] ? this.hhLogs[this.processingHash] : [] + this.hhLogs[this.processingHash].push(consoleArgs) } - const consoleArgs = iface.decodeFunctionData(functionDesc, payload) - this.hhLogs[this.processingHash] = this.hhLogs[this.processingHash] ? this.hhLogs[this.processingHash] : [] - this.hhLogs[this.processingHash].push(consoleArgs) - } - if (step.op === 'CREATE' || step.op === 'CALL') { - if (step.op === 'CREATE') { - this.processingAddress = '(Contract Creation - Step ' + this.processingIndex + ')' - this.storageCache[this.processingHash][this.processingAddress] = {} - this.lastProcessedStorageTxHash[this.processingAddress] = this.processingHash - } else { - this.processingAddress = normalizeHexAddress(step.stack[step.stack.length - 2]) - this.processingAddress = toChecksumAddress(this.processingAddress) - if (!this.storageCache[this.processingHash][this.processingAddress]) { - const account = Address.fromString(this.processingAddress) - try { - const storage = await this.vm.stateManager.dumpStorage(account) - this.storageCache[this.processingHash][this.processingAddress] = storage - this.lastProcessedStorageTxHash[this.processingAddress] = this.processingHash - } catch (e) { - console.log(e) + if (step.op === 'CREATE' || step.op === 'CALL') { + if (step.op === 'CREATE') { + this.processingAddress = '(Contract Creation - Step ' + this.processingIndex + ')' + this.storageCache[this.processingHash][this.processingAddress] = {} + } else { + this.processingAddress = normalizeHexAddress(step.stack[step.stack.length - 2]) + this.processingAddress = toChecksumAddress(this.processingAddress) + if (!this.storageCache[this.processingHash][this.processingAddress]) { + (async (processingHash, processingAddress, self) => { + try { + const account = Address.fromString(processingAddress) + const storage = await self.stateCopy.dumpStorage(account) + self.storageCache[processingHash][processingAddress] = storage + } catch (e) { + console.log(e) + } + })(this.processingHash, this.processingAddress, this) } } } - } - if (previousopcode && previousopcode.op === 'SHA3') { - const preimage = this.getSha3Input(previousopcode.stack, previousopcode.memory) - const imageHash = step.stack[step.stack.length - 1].replace('0x', '') - this.sha3Preimages[imageHash] = { - preimage: preimage + if (previousOpcode && previousOpcode.op === 'SHA3') { + const preimage = this.getSha3Input(previousOpcode.stack, previousOpcode.memory) + const imageHash = step.stack[step.stack.length - 1].replace('0x', '') + this.sha3Preimages[imageHash] = { + preimage: preimage + } } + this.processingIndex++ + this.previousDepth = depth + } catch (e) { + console.log(e) } - - this.processingIndex++ - this.previousDepth = depth } getCode (address, cb) { @@ -321,7 +331,7 @@ export class VmProxy { } // Before https://github.com/ethereum/remix-project/pull/1703, it used to throw error as // 'unable to retrieve storage ' + txIndex + ' ' + address - cb(null, { storage: {} }) + cb(null, '0x0') } storageRangeAt (blockNumber, txIndex, address, start, maxLength, cb) { diff --git a/libs/remix-simulator/src/genesis.ts b/libs/remix-simulator/src/genesis.ts index 839a0c4cb6..e62e4e4432 100644 --- a/libs/remix-simulator/src/genesis.ts +++ b/libs/remix-simulator/src/genesis.ts @@ -1,5 +1,4 @@ import { Block } from '@ethereumjs/block' -import { BN } from 'ethereumjs-util' export function generateBlock (vmContext) { return new Promise((resolve, reject) => { @@ -8,8 +7,8 @@ export function generateBlock (vmContext) { timestamp: (new Date().getTime() / 1000 | 0), number: 0, coinbase: '0x0e9281e9c6a0808672eaba6bd1220e144c9bb07a', - difficulty: new BN('69762765929000', 10), - gasLimit: new BN('8000000').imuln(1) + difficulty: 69762765929000, + gasLimit: 8000000 } }, { common: vmContext.vmObject().common }) diff --git a/libs/remix-simulator/src/methods/accounts.ts b/libs/remix-simulator/src/methods/accounts.ts index 8d18498afc..0a82056ca0 100644 --- a/libs/remix-simulator/src/methods/accounts.ts +++ b/libs/remix-simulator/src/methods/accounts.ts @@ -1,18 +1,18 @@ import { BN, privateToAddress, toChecksumAddress, isValidPrivate, Address } from 'ethereumjs-util' -import Web3 from 'web3' +const Web3EthAccounts = require('web3-eth-accounts') import * as crypto from 'crypto' -export class Accounts { - web3 +export class Web3Accounts { accounts: Record accountsKeys: Record + web3Accounts: any vmContext constructor (vmContext) { - this.web3 = new Web3() this.vmContext = vmContext // TODO: make it random and/or use remix-libs + this.web3Accounts = new Web3EthAccounts() this.accounts = {} this.accountsKeys = {} } @@ -98,7 +98,7 @@ export class Accounts { if (!privateKey) { return cb(new Error('unknown account')) } - const account = this.web3.eth.accounts.privateKeyToAccount(privateKey) + const account = this.web3Accounts.privateKeyToAccount(privateKey as string) const data = account.sign(message) diff --git a/libs/remix-simulator/src/methods/blocks.ts b/libs/remix-simulator/src/methods/blocks.ts index cc6f96f042..cfd8c30ef4 100644 --- a/libs/remix-simulator/src/methods/blocks.ts +++ b/libs/remix-simulator/src/methods/blocks.ts @@ -1,5 +1,7 @@ -import Web3 from 'web3' +import { toHex } from 'web3-utils' import { VMContext } from '../vm-context' +import { bigIntToHex } from '@ethereumjs/util' + export class Blocks { vmContext: VMContext coinbase: string @@ -47,23 +49,23 @@ export class Blocks { if (receipt) { return { blockHash: '0x' + block.hash().toString('hex'), - blockNumber: '0x' + block.header.number.toString('hex'), + blockNumber: bigIntToHex(block.header.number), from: receipt.from, - gas: Web3.utils.toHex(receipt.gas), + gas: bigIntToHex(receipt.gas), chainId: '0xd05', gasPrice: '0x4a817c800', // 20000000000 hash: receipt.transactionHash, input: receipt.input, - nonce: '0x' + tx.nonce.toString('hex'), + nonce: bigIntToHex(tx.nonce), transactionIndex: this.TX_INDEX, - value: receipt.value === '0x' ? '0x0' : receipt.value, + value: bigIntToHex(tx.value), to: receipt.to ? receipt.to : null } } }) const b = { baseFeePerGas: '0x01', - number: this.toHex(block.header.number), + number: bigIntToHex(block.header.number), hash: this.toHex(block.hash()), parentHash: this.toHex(block.header.parentHash), nonce: this.toHex(block.header.nonce), @@ -72,13 +74,13 @@ export class Blocks { transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', stateRoot: this.toHex(block.header.stateRoot), miner: this.coinbase, - difficulty: this.toHex(block.header.difficulty), - totalDifficulty: this.toHex((block.header as any).totalDifficulty), + difficulty: bigIntToHex(block.header.difficulty), + totalDifficulty: bigIntToHex((block.header as any).totalDifficulty || 0), extraData: this.toHex(block.header.extraData), size: '0x027f07', // 163591 - gasLimit: this.toHex(block.header.gasLimit), - gasUsed: this.toHex(block.header.gasUsed), - timestamp: this.toHex(block.header.timestamp), + gasLimit: bigIntToHex(block.header.gasLimit), + gasUsed: bigIntToHex(block.header.gasUsed), + timestamp: bigIntToHex(block.header.timestamp), transactions, uncles: [] } @@ -101,23 +103,23 @@ export class Blocks { if (receipt) { return { blockHash: '0x' + block.hash().toString('hex'), - blockNumber: '0x' + block.header.number.toString('hex'), + blockNumber: bigIntToHex(block.header.number), from: receipt.from, - gas: Web3.utils.toHex(receipt.gas), + gas: toHex(receipt.gas), chainId: '0xd05', gasPrice: '0x4a817c800', // 20000000000 hash: receipt.transactionHash, input: receipt.input, - nonce: '0x' + tx.nonce.toString('hex'), + nonce: bigIntToHex(tx.nonce), transactionIndex: this.TX_INDEX, - value: receipt.value === '0x' ? '0x0' : receipt.value, + value: bigIntToHex(tx.value), to: receipt.to ? receipt.to : null } } }) const b = { baseFeePerGas: '0x01', - number: this.toHex(block.header.number), + number: bigIntToHex(block.header.number), hash: this.toHex(block.hash()), parentHash: this.toHex(block.header.parentHash), nonce: this.toHex(block.header.nonce), @@ -126,13 +128,13 @@ export class Blocks { transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', stateRoot: this.toHex(block.header.stateRoot), miner: this.coinbase, - difficulty: this.toHex(block.header.difficulty), - totalDifficulty: this.toHex((block.header as any).totalDifficulty), + difficulty: bigIntToHex(block.header.difficulty), + totalDifficulty: bigIntToHex((block.header as any).totalDifficulty || 0), extraData: this.toHex(block.header.extraData), size: '0x027f07', // 163591 - gasLimit: this.toHex(block.header.gasLimit), - gasUsed: this.toHex(block.header.gasUsed), - timestamp: this.toHex(block.header.timestamp), + gasLimit: bigIntToHex(block.header.gasLimit), + gasUsed: bigIntToHex(block.header.gasUsed), + timestamp: bigIntToHex(block.header.timestamp), transactions, uncles: [] } diff --git a/libs/remix-simulator/src/methods/misc.ts b/libs/remix-simulator/src/methods/misc.ts index aba2241516..e6f8a3716a 100644 --- a/libs/remix-simulator/src/methods/misc.ts +++ b/libs/remix-simulator/src/methods/misc.ts @@ -1,4 +1,4 @@ -import Web3 from 'web3' +import { sha3 } from 'web3-utils' const version = require('../../package.json').version export function methods () { @@ -39,7 +39,7 @@ export function eth_hashrate (payload, cb) { export function web3_sha3 (payload, cb) { const str: string = payload.params[0] - cb(null, Web3.utils.sha3(str)) + cb(null, sha3(str)) } export function eth_getCompilers (payload, cb) { diff --git a/libs/remix-simulator/src/methods/transactions.ts b/libs/remix-simulator/src/methods/transactions.ts index 55bc23cd53..28cedbedf4 100644 --- a/libs/remix-simulator/src/methods/transactions.ts +++ b/libs/remix-simulator/src/methods/transactions.ts @@ -1,11 +1,24 @@ -import Web3 from 'web3' +import { toHex, toDecimal } from 'web3-utils' +import { bigIntToHex } from '@ethereumjs/util' import { toChecksumAddress, BN, Address } from 'ethereumjs-util' import { processTx } from './txProcess' import { execution } from '@remix-project/remix-lib' import { ethers } from 'ethers' +import { VMexecutionResult } from '@remix-project/remix-lib' +import { RunTxResult } from '@ethereumjs/vm' +import { Log, EvmError } from '@ethereumjs/evm' const TxRunnerVM = execution.TxRunnerVM const TxRunner = execution.TxRunner +export type VMExecResult = { + exceptionError: EvmError + executionGasUsed: bigint + gas: bigint + gasRefund: bigint + logs: Log[] + returnValue: string +} + export class Transactions { vmContext accounts @@ -69,12 +82,21 @@ export class Transactions { if (payload.params && payload.params.length > 0 && payload.params[0].from) { payload.params[0].from = toChecksumAddress(payload.params[0].from) } - processTx(this.txRunnerInstance, payload, false, (error, result) => { + processTx(this.txRunnerInstance, payload, false, (error, result: VMexecutionResult) => { if (!error && result) { this.vmContext.addBlock(result.block) const hash = '0x' + result.tx.hash().toString('hex') this.vmContext.trackTx(hash, result.block, result.tx) - this.vmContext.trackExecResult(hash, result.result.execResult) + const returnValue = `0x${result.result.execResult.returnValue.toString('hex') || '0'}` + const execResult: VMExecResult = { + exceptionError: result.result.execResult.exceptionError, + executionGasUsed: result.result.execResult.executionGasUsed, + gas: result.result.execResult.gas, + gasRefund: result.result.execResult.gasRefund, + logs: result.result.execResult.logs, + returnValue + } + this.vmContext.trackExecResult(hash, execResult) return cb(null, result.transactionHash) } cb(error) @@ -105,7 +127,7 @@ export class Transactions { transactionHash: receipt.hash, transactionIndex: this.TX_INDEX, blockHash: '0x' + txBlock.hash().toString('hex'), - blockNumber: '0x' + txBlock.header.number.toString('hex'), + blockNumber: bigIntToHex(txBlock.header.number), gasUsed: receipt.gasUsed, cumulativeGasUsed: receipt.gasUsed, // only 1 tx per block contractAddress: receipt.contractAddress, @@ -133,23 +155,25 @@ export class Transactions { payload.params[0].gas = 10000000 * 10 - processTx(this.txRunnerInstance, payload, true, (error, { result }) => { + processTx(this.txRunnerInstance, payload, true, (error, value: VMexecutionResult) => { + const result: RunTxResult = value.result if (error) return cb(error) - if (result.status === '0x0') { + if ((result as any).receipt?.status === '0x0' || (result as any).receipt?.status === 0) { try { - const msg = result.execResult.returnValue + const msg = `0x${result.execResult.returnValue.toString('hex') || '0'}` const abiCoder = new ethers.utils.AbiCoder() - const reason = abiCoder.decode(['string'], msg.slice(4))[0] + const reason = abiCoder.decode(['string'], '0x' + msg.slice(10))[0] return cb('revert ' + reason) } catch (e) { return cb(e.message) } } - let gasUsed = result.execResult.gasUsed.toNumber() + let gasUsed = result.execResult.executionGasUsed if (result.execResult.gasRefund) { - gasUsed += result.execResult.gasRefund.toNumber() + gasUsed += result.execResult.gasRefund } - cb(null, Math.ceil(gasUsed + (15 * gasUsed) / 100)) + gasUsed = gasUsed + value.tx.getBaseFee() + cb(null, Math.ceil(Number(gasUsed) + (15 * Number(gasUsed)) / 100)) }) } @@ -178,15 +202,23 @@ export class Transactions { const tag = payload.params[0].timestamp // e2e reference - processTx(this.txRunnerInstance, payload, true, (error, result) => { + processTx(this.txRunnerInstance, payload, true, (error, result: VMexecutionResult) => { if (!error && result) { this.vmContext.addBlock(result.block) const hash = '0x' + result.tx.hash().toString('hex') this.vmContext.trackTx(hash, result.block, result.tx) - this.vmContext.trackExecResult(hash, result.result.execResult) + const returnValue = `0x${result.result.execResult.returnValue.toString('hex') || '0'}` + const execResult: VMExecResult = { + exceptionError: result.result.execResult.exceptionError, + executionGasUsed: result.result.execResult.executionGasUsed, + gas: result.result.execResult.gas, + gasRefund: result.result.execResult.gasRefund, + logs: result.result.execResult.logs, + returnValue: returnValue + } + this.vmContext.trackExecResult(hash, execResult) this.tags[tag] = result.transactionHash // calls are not supposed to return a transaction hash. we do this for keeping track of it and allowing debugging calls. - const returnValue = `0x${result.result.execResult.returnValue.toString('hex') || '0'}` return cb(null, returnValue) } cb(error) @@ -222,17 +254,17 @@ export class Transactions { // TODO: params to add later const r: Record = { blockHash: '0x' + txBlock.hash().toString('hex'), - blockNumber: '0x' + txBlock.header.number.toString('hex'), + blockNumber: bigIntToHex(txBlock.header.number), from: receipt.from, - gas: Web3.utils.toHex(receipt.gas), + gas: toHex(receipt.gas), chainId: '0xd05', // 'gasPrice': '2000000000000', // 0x123 gasPrice: '0x4a817c800', // 20000000000 hash: receipt.transactionHash, input: receipt.input, - nonce: '0x' + tx.nonce.toString('hex'), + nonce: bigIntToHex(tx.nonce), transactionIndex: this.TX_INDEX, - value: receipt.value + value: bigIntToHex(tx.value) // "value":"0xf3dbb76162000" // 4290000000000000 // "v": "0x25", // 37 // "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", @@ -259,7 +291,7 @@ export class Transactions { const txIndex = payload.params[1] const txBlock = this.vmContext.blocks[payload.params[0]] - const txHash = '0x' + txBlock.transactions[Web3.utils.toDecimal(txIndex)].hash().toString('hex') + const txHash = '0x' + txBlock.transactions[toDecimal(txIndex)].hash().toString('hex') this.vmContext.web3().eth.getTransactionReceipt(txHash, (error, receipt) => { if (error) { @@ -271,15 +303,15 @@ export class Transactions { // TODO: params to add later const r: Record = { blockHash: '0x' + txBlock.hash().toString('hex'), - blockNumber: '0x' + txBlock.header.number.toString('hex'), + blockNumber: bigIntToHex(txBlock.header.number), from: receipt.from, - gas: Web3.utils.toHex(receipt.gas), + gas: toHex(receipt.gas), chainId: '0xd05', // 'gasPrice': '2000000000000', // 0x123 gasPrice: '0x4a817c800', // 20000000000 hash: receipt.transactionHash, input: receipt.input, - nonce: '0x' + tx.nonce.toString('hex'), + nonce: bigIntToHex(tx.nonce), transactionIndex: this.TX_INDEX, value: receipt.value // "value":"0xf3dbb76162000" // 4290000000000000 @@ -304,7 +336,7 @@ export class Transactions { const txIndex = payload.params[1] const txBlock = this.vmContext.blocks[payload.params[0]] - const txHash = '0x' + txBlock.transactions[Web3.utils.toDecimal(txIndex)].hash().toString('hex') + const txHash = '0x' + txBlock.transactions[toDecimal(txIndex)].hash().toString('hex') this.vmContext.web3().eth.getTransactionReceipt(txHash, (error, receipt) => { if (error) { @@ -316,15 +348,15 @@ export class Transactions { // TODO: params to add later const r: Record = { blockHash: '0x' + txBlock.hash().toString('hex'), - blockNumber: '0x' + txBlock.header.number.toString('hex'), + blockNumber: bigIntToHex(txBlock.header.number), from: receipt.from, - gas: Web3.utils.toHex(receipt.gas), + gas: toHex(receipt.gas), // 'gasPrice': '2000000000000', // 0x123 chainId: '0xd05', gasPrice: '0x4a817c800', // 20000000000 hash: receipt.transactionHash, input: receipt.input, - nonce: '0x' + tx.nonce.toString('hex'), + nonce: bigIntToHex(tx.nonce), transactionIndex: this.TX_INDEX, value: receipt.value // "value":"0xf3dbb76162000" // 4290000000000000 diff --git a/libs/remix-simulator/src/provider.ts b/libs/remix-simulator/src/provider.ts index 1e274e96f5..ab5e235014 100644 --- a/libs/remix-simulator/src/provider.ts +++ b/libs/remix-simulator/src/provider.ts @@ -3,7 +3,7 @@ import { Blocks } from './methods/blocks' import { info } from './utils/logs' import merge from 'merge' -import { Accounts } from './methods/accounts' +import { Web3Accounts } from './methods/accounts' import { Filters } from './methods/filters' import { methods as miscMethods } from './methods/misc' import { methods as netMethods } from './methods/net' @@ -25,7 +25,7 @@ export class Provider { this.connected = true this.vmContext = new VMContext(options['fork']) - this.Accounts = new Accounts(this.vmContext) + this.Accounts = new Web3Accounts(this.vmContext) this.Transactions = new Transactions(this.vmContext) this.methods = {} @@ -39,6 +39,7 @@ export class Provider { } async init () { + await this.vmContext.init() await generateBlock(this.vmContext) await this.Accounts.resetAccounts() this.Transactions.init(this.Accounts.accounts) diff --git a/libs/remix-simulator/src/vm-context.ts b/libs/remix-simulator/src/vm-context.ts index 9e9afdef0a..a10e32b0bb 100644 --- a/libs/remix-simulator/src/vm-context.ts +++ b/libs/remix-simulator/src/vm-context.ts @@ -1,25 +1,45 @@ /* global ethereum */ 'use strict' -import Web3 from 'web3' import { rlp, keccak, bufferToHex } from 'ethereumjs-util' import { execution } from '@remix-project/remix-lib' const { LogsManager } = execution import { VmProxy } from './VmProxy' -import VM from '@ethereumjs/vm' -import Common from '@ethereumjs/common' -import StateManager from '@ethereumjs/vm/dist/state/stateManager' -import { StorageDump } from '@ethereumjs/vm/dist/state/interface' +import { VM } from '@ethereumjs/vm' +import { Common } from '@ethereumjs/common' +import { Trie } from '@ethereumjs/trie' +import { DefaultStateManager } from '@ethereumjs/statemanager' +import { StorageDump } from '@ethereumjs/statemanager/dist/interface' +import { EVM } from '@ethereumjs/evm' +import { EEI } from '@ethereumjs/vm' +import { Blockchain } from '@ethereumjs/blockchain' import { Block } from '@ethereumjs/block' import { Transaction } from '@ethereumjs/tx' +import { bigIntToHex } from '@ethereumjs/util' + +/** + * Options for constructing a {@link StateManager}. + */ +export interface DefaultStateManagerOpts { + /** + * A {@link Trie} instance + */ + trie?: Trie + /** + * Option to prefix codehashes in the database. This defaults to `true`. + * If this is disabled, note that it is possible to corrupt the trie, by deploying code + * which code is equal to the preimage of a trie-node. + * E.g. by putting the code `0x80` into the empty trie, will lead to a corrupted trie. + */ + prefixCodeHashes?: boolean +} /* extend vm state manager and instanciate VM */ - -class StateManagerCommonStorageDump extends StateManager { +class StateManagerCommonStorageDump extends DefaultStateManager { keyHashes: { [key: string]: string } - constructor () { - super() + constructor (opts: DefaultStateManagerOpts = {}) { + super(opts) this.keyHashes = {} } @@ -28,6 +48,14 @@ class StateManagerCommonStorageDump extends StateManager { return super.putContractStorage(address, key, value) } + copy(): StateManagerCommonStorageDump { + const copyState = new StateManagerCommonStorageDump({ + trie: this._trie.copy(false), + }) + copyState.keyHashes = this.keyHashes + return copyState + } + async dumpStorage (address): Promise { return new Promise((resolve, reject) => { this._getStorageTrie(address) @@ -52,18 +80,7 @@ class StateManagerCommonStorageDump extends StateManager { }) } - async getStateRoot (force = false) { - await this._cache.flush() - - const stateRoot = this._trie.root - return stateRoot - } - async setStateRoot (stateRoot) { - if (this._checkpointCount !== 0) { - throw new Error('Cannot set state root with uncommitted checkpoints') - } - await this._cache.flush() if (!stateRoot.equals(this._trie.EMPTY_TRIE_ROOT)) { @@ -106,7 +123,7 @@ export class VMContext { this.blockGasLimitDefault = 4300000 this.blockGasLimit = this.blockGasLimitDefault this.currentFork = fork || 'london' - this.currentVm = this.createVm(this.currentFork) + this.blocks = {} this.latestBlockNumber = "0x0" this.blockByTxHash = {} @@ -115,14 +132,23 @@ export class VMContext { this.logsManager = new LogsManager() } - createVm (hardfork) { + async init () { + this.currentVm = await this.createVm(this.currentFork) + } + + async createVm (hardfork) { const stateManager = new StateManagerCommonStorageDump() const common = new Common({ chain: 'mainnet', hardfork }) - const vm = new VM({ + const blockchain = new (Blockchain as any)({ common }) + const eei = new EEI(stateManager, common, blockchain) + const evm = new EVM({ common, eei, allowUnlimitedContractSize: true }) + + const vm = await VM.create({ common, activatePrecompiles: true, stateManager, - allowUnlimitedContractSize: true + blockchain, + evm }) // VmProxy and VMContext are very intricated. @@ -140,10 +166,6 @@ export class VMContext { return this.currentVm.web3vm } - blankWeb3 () { - return new Web3() - } - vm () { return this.currentVm.vm } @@ -153,7 +175,7 @@ export class VMContext { } addBlock (block: Block) { - let blockNumber = '0x' + block.header.number.toString('hex') + let blockNumber = bigIntToHex(block.header.number) if (blockNumber === '0x') { blockNumber = '0x0' } diff --git a/libs/remix-simulator/test/blocks.ts b/libs/remix-simulator/test/blocks.ts index 5ffb448070..6c4b0476ac 100644 --- a/libs/remix-simulator/test/blocks.ts +++ b/libs/remix-simulator/test/blocks.ts @@ -18,7 +18,7 @@ describe('blocks', () => { const block = await web3.eth.getBlock(0) const expectedBlock = { - baseFeePerGas: '0x01', + baseFeePerGas: 1, difficulty: '69762765929000', extraData: '0x0', gasLimit: 8000000, diff --git a/libs/remix-solidity/package.json b/libs/remix-solidity/package.json index 4f911b7e7a..9bfcbde1ae 100644 --- a/libs/remix-solidity/package.json +++ b/libs/remix-solidity/package.json @@ -15,9 +15,9 @@ } ], "dependencies": { - "@ethereumjs/block": "^3.5.1", - "@ethereumjs/tx": "^3.3.2", - "@ethereumjs/vm": "^5.5.3", + "@ethereumjs/block": "^4.0.0", + "@ethereumjs/tx": "^4.0.0", + "@ethereumjs/vm": "^6.0.0", "@remix-project/remix-lib": "^0.5.21", "async": "^2.6.2", "eslint-scope": "^5.0.0", diff --git a/libs/remix-tests/package.json b/libs/remix-tests/package.json index bc9b9dd27d..42b3c369e5 100644 --- a/libs/remix-tests/package.json +++ b/libs/remix-tests/package.json @@ -36,10 +36,10 @@ "homepage": "https://github.com/ethereum/remix-project/tree/master/libs/remix-tests#readme", "dependencies": { "@erebos/bzz-node": "^0.13.0", - "@ethereumjs/block": "^3.5.1", - "@ethereumjs/common": "^2.5.0", - "@ethereumjs/tx": "^3.3.2", - "@ethereumjs/vm": "^5.5.3", + "@ethereumjs/block": "^4.0.0", + "@ethereumjs/common": "^3.0.0", + "@ethereumjs/tx": "^4.0.0", + "@ethereumjs/vm": "^6.0.0", "@remix-project/remix-lib": "^0.5.21", "@remix-project/remix-simulator": "^0.2.21", "@remix-project/remix-solidity": "^0.5.7", diff --git a/libs/remix-tests/src/runTestSources.ts b/libs/remix-tests/src/runTestSources.ts index 40f0d87788..f6cb8cbcf3 100644 --- a/libs/remix-tests/src/runTestSources.ts +++ b/libs/remix-tests/src/runTestSources.ts @@ -25,16 +25,13 @@ export class UnitTestRunner { async init (web3 = null, accounts = null) { this.web3 = await this.createWeb3Provider(web3) - this.testsAccounts = accounts || await this.web3.eth.getAccounts() + this.testsAccounts = accounts || (this.web3 && await this.web3.eth.getAccounts()) || [] this.accountsLibCode = writeTestAccountsContract(this.testsAccounts) } async createWeb3Provider (optWeb3) { - const web3 = optWeb3 || new Web3() - const provider: any = new Provider() - await provider.init() - web3.setProvider(provider) - extend(web3) + const web3 = optWeb3 + if (web3) extend(web3) return web3 } diff --git a/libs/remix-tests/tests/testRunner.spec.ts b/libs/remix-tests/tests/testRunner.spec.ts index cda68551ad..56ef68cd8a 100644 --- a/libs/remix-tests/tests/testRunner.spec.ts +++ b/libs/remix-tests/tests/testRunner.spec.ts @@ -159,18 +159,18 @@ describe('testRunner', function () { deepEqualExcluding(tests, [ { type: 'accountList', value: accounts }, { type: 'contract', value: 'AssertEqualTest', filename: __dirname + '/examples_0/assert_equal_test.sol' }, - { type: 'testPass', debugTxHash: '0xbe77baee10f8a044a68fbb83abf57ce1ca63b8739f3b2dcd122dab0ee44fd0e9', value: 'Equal uint pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, - { type: 'testFailure', debugTxHash: '0xfc9691b0cd0a49dbefed5cd3fad32158dd229e5bb7b0eb11da3c72054eafae8b', value: 'Equal uint fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalUintFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '273:57:0', expected: '2', returned: '1' }, - { type: 'testPass', debugTxHash: '0xbc142789e5a51841781536a9291c9022896b0c7453140fdc98996638c0d76045', value: 'Equal int pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, - { type: 'testFailure', debugTxHash: '0xcc28211a4ab3149b1122fb47f45529a4edddbafa076d2338cc3754ab0629eaa1', value: 'Equal int fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalIntFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '493:45:0', expected: '2', returned: '-1' }, - { type: 'testPass', debugTxHash: '0x4f5570fc7da86f09aafb436ff3b4c46aa885f71680a233234433d0ef0346206b', value: 'Equal bool pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, - { type: 'testFailure', debugTxHash: '0x28dc2d146dee77a2d6446efb088e5f9d008a3c7a14116e798401b68470da017f', value: 'Equal bool fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalBoolFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '708:52:0', expected: false, returned: true }, - { type: 'testPass', debugTxHash: '0x0abc8fa8831efa3a8c82c758d045c1382f71b6a7f7e9135ffbe9e40059f84617', value: 'Equal address pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, - { type: 'testFailure', debugTxHash: '0x5ec200fb053539b8165a6b6ab36e9229a870c4752b0d6ff2786c4d5a66d5b35d', value: 'Equal address fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalAddressFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '1015:130:0', expected: '0x1c6637567229159d1eFD45f95A6675e77727E013', returned: '0x7994f14563F39875a2F934Ce42cAbF48a93FdDA9' }, - { type: 'testPass', debugTxHash: '0xb6c34f5baa6916569d122bcb1210fcd07fb126f4b859fea58db5328e5f1dab85', value: 'Equal bytes32 pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, - { type: 'testFailure', debugTxHash: '0xb3af74a384b8b6ddacbc03a480ae48e233415b1570717ca7023530023a871be6', value: 'Equal bytes32 fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalBytes32FailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '1670:48:0', expected: '0x72656d6978000000000000000000000000000000000000000000000000000000', returned: '0x72656d6979000000000000000000000000000000000000000000000000000000' }, - { type: 'testPass', debugTxHash: '0x8537e74941b511b5c745b398e55435748adcdf637659247e0d573fb681ee4833', value: 'Equal string pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, - { type: 'testFailure', debugTxHash: '0x30d44498e63ac51f1412062b849144c103e19a4dc9daf81c5e84bd984ef738a6', value: 'Equal string fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalStringFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '1916:81:0', expected: 'remix-tests', returned: 'remix' } + { type: 'testPass', debugTxHash: '0x233b8d91f0fa068b1a4deae1141178bc3eb79c3d2a6786160595a358363a157c', value: 'Equal uint pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, + { type: 'testFailure', debugTxHash: '0xa5e39c78663c2e5071c08467047ba5b2650d16081b50369700d46d7f90c4d94b', value: 'Equal uint fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalUintFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '273:57:0', expected: '2', returned: '1' }, + { type: 'testPass', debugTxHash: '0x57af51c2c19db390a4ccf72fa3d32347fb3d998e70820909c7876bd8ccebf8a3', value: 'Equal int pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, + { type: 'testFailure', debugTxHash: '0x710f3a54a561c009fcf0277273b8fe337b2c493e9e83e0ae02786d487339ca7b', value: 'Equal int fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalIntFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '493:45:0', expected: '2', returned: '-1' }, + { type: 'testPass', debugTxHash: '0x10c1ed8651110ad5de6adcad8e1284aa5c1fd3a998a1e863bbecc0ec855fcd7b', value: 'Equal bool pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, + { type: 'testFailure', debugTxHash: '0x004871a82968f43e02278eab9dd3d7eb0bbe88b64d459efa50065e5996fe5fad', value: 'Equal bool fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalBoolFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '708:52:0', expected: false, returned: true }, + { type: 'testPass', debugTxHash: '0x64a4d4853ab7907712912cf2120ac2bfd2e08b4767b375250f0e907757546454', value: 'Equal address pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, + { type: 'testFailure', debugTxHash: '0xcf62fb76e3b2eb95d92aa2671a9e81e30fefb944f55e2fb8b97096c45fc74a38', value: 'Equal address fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalAddressFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '1015:130:0', expected: '0x1c6637567229159d1eFD45f95A6675e77727E013', returned: '0x7994f14563F39875a2F934Ce42cAbF48a93FdDA9' }, + { type: 'testPass', debugTxHash: '0x18ef613acc128a21282e09cf920b32ef3be648bb35c0299471ddbbbeeb0faf8c', value: 'Equal bytes32 pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, + { type: 'testFailure', debugTxHash: '0x86fbf2f14e13d228f80a87a947841270d8c55073adddf78e8d4e2ba05d724ec6', value: 'Equal bytes32 fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalBytes32FailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '1670:48:0', expected: '0x72656d6978000000000000000000000000000000000000000000000000000000', returned: '0x72656d6979000000000000000000000000000000000000000000000000000000' }, + { type: 'testPass', debugTxHash: '0x80b3465f2504b74359790baa009237ba066685b24afa65a31814f1ad1bc4f99f', value: 'Equal string pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, + { type: 'testFailure', debugTxHash: '0x88b035a85c5f87f54a805334817f3e4599b4190d98f25947fe14d7804facd8b7', value: 'Equal string fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalStringFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '1916:81:0', expected: 'remix-tests', returned: 'remix' } ], ['time', 'web3']) }) }) @@ -200,19 +200,19 @@ describe('testRunner', function () { deepEqualExcluding(tests, [ { type: 'accountList', value: accounts }, { type: 'contract', value: 'AssertNotEqualTest', filename: __dirname + '/examples_0/assert_notEqual_test.sol' }, - { type: 'testPass', debugTxHash: '0xb0ac5cde13a5005dc1b4efbb66fb3a5d6f0697467aedd6165ed1c8ee552939bc', value: 'Not equal uint pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, - { type: 'testFailure', debugTxHash: '0x69d25ed9b9a010e97e0f7282313d4018c77a8873fd5f2e0b12483701febdd6b4', value: 'Not equal uint fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualUintFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '288:63:0', expected: '1', returned: '1' }, - { type: 'testPass', debugTxHash: '0x19a743cfb44b273c78b3271d603412d31087974309a70595bc5d15097a52c5c5', value: 'Not equal int pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, - { type: 'testFailure', debugTxHash: '0x8dfce61b71a9ea65fb00c471370413779626f290b71d41f8be8408674e64f4d2', value: 'Not equal int fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualIntFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '525:52:0', expected: '-2', returned: '-2' }, - { type: 'testPass', debugTxHash: '0x12bc9eb3a653ebe4c7ab954c144dab4848295c88d71d17cb86a41e8a004419ba', value: 'Not equal bool pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, - { type: 'testFailure', debugTxHash: '0x901b9cd631f8f29841243a257d1914060b9c36d88ee7d8b624de76dad4a34c85', value: 'Not equal bool fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualBoolFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '760:57:0', expected: true, returned: true }, - { type: 'testPass', debugTxHash: '0xf9e48bac26d3a2871ceb92974b897cae61e60bbc4db115b7e8eff4ac0390e4a5', value: 'Not equal address pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, + { type: 'testPass', debugTxHash: '0xdef34ec7fbc6a3e6c6ef619b424bf8ebf16db16ed3f74500d56d8170d3aeca66', value: 'Not equal uint pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, + { type: 'testFailure', debugTxHash: '0xfcbd35bc5f460e22e885951d560171d687cf90ccdffc41fb5de1beb7075fe4e9', value: 'Not equal uint fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualUintFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '288:63:0', expected: '1', returned: '1' }, + { type: 'testPass', debugTxHash: '0x7f269855c3fc5c677eca416eb85665b8f10df00d3b7ec5dcc00cbf8e6364cba4', value: 'Not equal int pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, + { type: 'testFailure', debugTxHash: '0x76555e218571d4ad69496d7d10ae46d30149c4bfd8c6e15ff2a58668ab6fba62', value: 'Not equal int fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualIntFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '525:52:0', expected: '-2', returned: '-2' }, + { type: 'testPass', debugTxHash: '0x5fe790b3f32b9580c1d5f9a2dbb0e10ddcb62846037d3f5800d47a51bb67cc91', value: 'Not equal bool pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, + { type: 'testFailure', debugTxHash: '0x660d0a73395e6855aea8f6d3450e63640437dc15071842b417c39f40e1d7ae61', value: 'Not equal bool fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualBoolFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '760:57:0', expected: true, returned: true }, + { type: 'testPass', debugTxHash: '0x6fddce5573bd6723acf5a3e4137d698ff78f695873a228939276c4323ddfb132', value: 'Not equal address pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, // eslint-disable-next-line @typescript-eslint/no-loss-of-precision - { type: 'testFailure', debugTxHash: '0x4e83a17426bc79b147ddd30a5434a2430a8302b3ce78b6979088ac5eceac5d3c', value: 'Not equal address fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualAddressFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '1084:136:0', expected: 0x7994f14563F39875a2F934Ce42cAbF48a93FdDA9, returned: 0x7994f14563F39875a2F934Ce42cAbF48a93FdDA9 }, - { type: 'testPass', debugTxHash: '0xfb4b30bb8373eeb6b09e38ad07880b86654f72780b41d7cf7554a112a04a0f53', value: 'Not equal bytes32 pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, - { type: 'testFailure', debugTxHash: '0x43edf8bc68229415ee63f63f5303351a0dfecf9f3eb2ec35ffd2c10c60cf7005', value: 'Not equal bytes32 fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualBytes32FailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '1756:54:0', expected: '0x72656d6978000000000000000000000000000000000000000000000000000000', returned: '0x72656d6978000000000000000000000000000000000000000000000000000000' }, - { type: 'testPass', debugTxHash: '0x712932edc040596e2b02ddc06a48b773f5fccc7346d55cefc5d1c52528ce3168', value: 'Not equal string pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, - { type: 'testFailure', debugTxHash: '0x961ce7425fdd4049aeb678ea20a0441eb837c1fe26b0d010593fc07d668321e6', value: 'Not equal string fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualStringFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '2026:81:0', expected: 'remix', returned: 'remix' }, + { type: 'testFailure', debugTxHash: '0x51479e46db802fb598c61ca0dd630345b9d70cc58667b5a80aa79e8119fa7787', value: 'Not equal address fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualAddressFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '1084:136:0', expected: 0x7994f14563F39875a2F934Ce42cAbF48a93FdDA9, returned: 0x7994f14563F39875a2F934Ce42cAbF48a93FdDA9 }, + { type: 'testPass', debugTxHash: '0xbcaf6d8977b655fdedb280e0e9221d728706d41e85e0973d00c8da1d128022c7', value: 'Not equal bytes32 pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, + { type: 'testFailure', debugTxHash: '0x34008ef0ea908fedbf80471424d801f5069e6e46221f8ee4a2ee16776a6eeef6', value: 'Not equal bytes32 fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualBytes32FailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '1756:54:0', expected: '0x72656d6978000000000000000000000000000000000000000000000000000000', returned: '0x72656d6978000000000000000000000000000000000000000000000000000000' }, + { type: 'testPass', debugTxHash: '0x8e0bc9dedea6e088ca7bd82b1e9fab516be5a52f7716a26ccca8197236aae105', value: 'Not equal string pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, + { type: 'testFailure', debugTxHash: '0x13c6d270c3609ef858dd6d0c79433ca0b43e47b485b2e40ffe363f18f2868ea8', value: 'Not equal string fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualStringFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '2026:81:0', expected: 'remix', returned: 'remix' }, ], ['time', 'web3']) }) }) @@ -239,14 +239,14 @@ describe('testRunner', function () { deepEqualExcluding(tests, [ { type: 'accountList', value: accounts }, { type: 'contract', value: 'AssertGreaterThanTest', filename: __dirname + '/examples_0/assert_greaterThan_test.sol' }, - { type: 'testPass', debugTxHash: '0x81cf46560b522280ac60bd5c8efedad4598957d33435a898c23eefb13ca6104f', value: 'Greater than uint pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, - { type: 'testFailure', debugTxHash: '0x7090dc27ac06e1afd66963992bdd9188200d0404d43b95cfa5d925bbe6eba3ed', value: 'Greater than uint fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanUintFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '303:69:0', expected: '4', returned: '1' }, - { type: 'testPass', debugTxHash: '0xd57b40ed464763baf128f8a72efcd198e825e0b8f498cef90aed23045d0196db', value: 'Greater than int pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, - { type: 'testFailure', debugTxHash: '0x6c7b84bd8fc452b7839e11129d3818fa69dfd9b914e55556b39fdc68b70fc1b5', value: 'Greater than int fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanIntFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '569:67:0', expected: '1', returned: '-1' }, - { type: 'testPass', debugTxHash: '0xc5883db70b83a1d3afff24a9f0555de3edd7776e5ec157cc2110e426e5be2594', value: 'Greater than uint int pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, - { type: 'testFailure', debugTxHash: '0xa534085a6bbdcf73a68bdef6a1421218c11ac0ec1af398f9445defeea31cea6e', value: 'Greater than uint int fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanUintIntFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '845:71:0', expected: '2', returned: '1' }, - { type: 'testPass', debugTxHash: '0x36a7139445d76f6072fab4cc0717461068276748622c0dfc3f092d548b197de8', value: 'Greater than int uint pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, - { type: 'testFailure', debugTxHash: '0x7890f7b8f2eabae581b6f70d55d2d3bfa64ddd7753d5f892dbdf86ced96945fe', value: 'Greater than int uint fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanIntUintFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '1125:76:0', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639836', returned: '100' } + { type: 'testPass', debugTxHash: '0xdc325916fd93227b76231131e52e67f8913d395098c5ac767032db9bd757a91c', value: 'Greater than uint pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, + { type: 'testFailure', debugTxHash: '0xf98eea22bb86f13e0bb4072df22b540289a46b332bdb203a1e488d7e14a1dcd4', value: 'Greater than uint fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanUintFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '303:69:0', expected: '4', returned: '1' }, + { type: 'testPass', debugTxHash: '0xef5ef38329ba6aac2f868d53d803053c52b1895a2c25b704260435c141a63bfc', value: 'Greater than int pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, + { type: 'testFailure', debugTxHash: '0x6b9430f3f12c12fb11e5a8d32fef849ab34614e644be20c6b41a25e510453440', value: 'Greater than int fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanIntFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '569:67:0', expected: '1', returned: '-1' }, + { type: 'testPass', debugTxHash: '0x4c6e10815a5e82bf2c60950606dc886317f680028a9229ba2dda17b5ea36325a', value: 'Greater than uint int pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, + { type: 'testFailure', debugTxHash: '0x989c405c32c8e270a5dea69e6250a514c05dacd6fcf018365a241abc28c2497b', value: 'Greater than uint int fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanUintIntFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '845:71:0', expected: '2', returned: '1' }, + { type: 'testPass', debugTxHash: '0x9fed670ae2061929f71780835b7ea3eb7da6d4fb553cd2d5f62950c353165861', value: 'Greater than int uint pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, + { type: 'testFailure', debugTxHash: '0xcf394fd279293cdcf58efc42f3a443595fdb171769a45df01b0c84cd76b3a9a2', value: 'Greater than int uint fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanIntUintFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '1125:76:0', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639836', returned: '100' } ], ['time', 'web3']) }) }) @@ -274,14 +274,14 @@ describe('testRunner', function () { deepEqualExcluding(tests, [ { type: 'accountList', value: accounts }, { type: 'contract', value: 'AssertLesserThanTest', filename: __dirname + '/examples_0/assert_lesserThan_test.sol' }, - { type: 'testPass', debugTxHash: '0x47875047c1fff8a7b1cc1603418960cd2a3afe8a9c59337b19fb463a85d6e47e', value: 'Lesser than uint pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, - { type: 'testFailure', debugTxHash: '0xf6fd459d0b28d0d85c56dd69d953331291e1c234c8a263150252e35da0ed6671', value: 'Lesser than uint fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanUintFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '298:67:0', expected: '2', returned: '4' }, - { type: 'testPass', debugTxHash: '0x761d95111764af396634474899ff1db218d5e514d6de6bc3260af15b1f5b929f', value: 'Lesser than int pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, - { type: 'testFailure', debugTxHash: '0xc17697ef2df92c22707639caa9355bdf0d98dbb18157e72b8b257bb0eb2beb4e', value: 'Lesser than int fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanIntFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '557:65:0', expected: '-1', returned: '1' }, - { type: 'testPass', debugTxHash: '0xf0721b28c547c1c64948661d677cf6afc10d139315726280162a984f2f7e5d9c', value: 'Lesser than uint int pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, - { type: 'testFailure', debugTxHash: '0x0757289229b58043c101cb311df8db16d1b30944747493e1491daa9aca6aa30e', value: 'Lesser than uint int fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanUintIntFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '826:71:0', expected: '-1', returned: '115792089237316195423570985008687907853269984665640564039457584007913129639935' }, - { type: 'testPass', debugTxHash: '0x316feb8f80c04b12194262dd80b6b004232eab00d7f7c3846badf6e92684e177', value: 'Lesser than int uint pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, - { type: 'testFailure', debugTxHash: '0x65c5ab3cb85f163eefe3321cc4444defa99154d3cbe415b9384bbd2627449b6a', value: 'Lesser than int uint fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanIntUintFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '1105:69:0', expected: '1', returned: '1' }, + { type: 'testPass', debugTxHash: '0x524fb46aa0e8a78bc11a99432908d422450c2933d837f858aeacba9b84706d5c', value: 'Lesser than uint pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, + { type: 'testFailure', debugTxHash: '0x0551a67b10b9e13182e8bdb4e530ed92466d5054ae959f999f2c558da2c39d22', value: 'Lesser than uint fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanUintFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '298:67:0', expected: '2', returned: '4' }, + { type: 'testPass', debugTxHash: '0x6d63958d8c3230e837d0ca8335e57262c6e0c6b2c07a5b481842b9ad7329ac28', value: 'Lesser than int pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, + { type: 'testFailure', debugTxHash: '0x38e96ef44f4e785db4d40a95862a9797e8cef6de0ce1d059da72ff42e2f3ca62', value: 'Lesser than int fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanIntFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '557:65:0', expected: '-1', returned: '1' }, + { type: 'testPass', debugTxHash: '0x699f9fc2bf7a14134e89b94cd9dc1c537b5d4581a1c26a34a0c3343ddede9608', value: 'Lesser than uint int pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, + { type: 'testFailure', debugTxHash: '0xce1391dcfbfdc6c611e357e6c1c9f6cd9f257153ee400cb80bd36af6d239c342', value: 'Lesser than uint int fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanUintIntFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '826:71:0', expected: '-1', returned: '115792089237316195423570985008687907853269984665640564039457584007913129639935' }, + { type: 'testPass', debugTxHash: '0x7040e6664c13e6b35ef1daaef93a8cae36a62150d818183892096a98b921800c', value: 'Lesser than int uint pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, + { type: 'testFailure', debugTxHash: '0x8c58bb433ea41760dcf11114232407d703e8ebf7d5e9637e2923282eae5caee6', value: 'Lesser than int uint fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanIntUintFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '1105:69:0', expected: '1', returned: '1' }, ], ['time', 'web3']) }) }) @@ -309,10 +309,10 @@ describe('testRunner', function () { deepEqualExcluding(tests, [ { type: 'accountList', value: accounts }, { type: 'contract', value: 'MyTest', filename: __dirname + '/examples_1/simple_storage_test.sol' }, - { type: 'testPass', debugTxHash: '0x5a805403a12f0431c5dd190d31a87eb62758f09dddc0c6ee7ee6899c5e7eba71', value: 'Initial value should be100', filename: __dirname + '/examples_1/simple_storage_test.sol', context: 'MyTest' }, - { type: 'testPass', debugTxHash: '0xd0ae7cb5a3a0f5e8f7bf90129e3daba36f649a5c1176ad54609f7b7615bef7dd', value: 'Initial value should not be200', filename: __dirname + '/examples_1/simple_storage_test.sol', context: 'MyTest' }, - { type: 'testFailure', debugTxHash: '0xb0d613434f2fd7060f97d4ca8bbfd8f2deeebed83062a25044f0237bd38b3229', value: 'Should trigger one fail', filename: __dirname + '/examples_1/simple_storage_test.sol', errMsg: 'uint test 1 fails', context: 'MyTest', assertMethod: 'equal', location: '532:51:1', expected: '2', returned: '1' }, - { type: 'testPass', debugTxHash: '0x5ee675ec81b550386b2fdd359ae3530e49dd3e02145e877a4a5f68753ac4e341', value: 'Should trigger one pass', filename: __dirname + '/examples_1/simple_storage_test.sol', context: 'MyTest' } + { type: 'testPass', debugTxHash: '0xed5b6898331119c6e3d1185b9de65d87ad7329cc629a8f2d43b966cf180a5dc1', value: 'Initial value should be100', filename: __dirname + '/examples_1/simple_storage_test.sol', context: 'MyTest' }, + { type: 'testPass', debugTxHash: '0x79cae5c4f44edfd7ae3490e01c75df5741b107672cef5e69800e4d30d380a721', value: 'Initial value should not be200', filename: __dirname + '/examples_1/simple_storage_test.sol', context: 'MyTest' }, + { type: 'testFailure', debugTxHash: '0x24a20f7643e88f891e469ef495911ab0b75f99e2b09b9b091e688674910d1506', value: 'Should trigger one fail', filename: __dirname + '/examples_1/simple_storage_test.sol', errMsg: 'uint test 1 fails', context: 'MyTest', assertMethod: 'equal', location: '532:51:1', expected: '2', returned: '1' }, + { type: 'testPass', debugTxHash: '0x08b1f60c908b7e6cf2dd24fc166c755f0fe5336aebfb325cae4ce00ea9bbf932', value: 'Should trigger one pass', filename: __dirname + '/examples_1/simple_storage_test.sol', context: 'MyTest' } ], ['time', 'web3']) }) }) @@ -340,8 +340,8 @@ describe('testRunner', function () { deepEqualExcluding(tests, [ { type: 'accountList', value: accounts }, { type: 'contract', value: 'MyTest', filename: __dirname + '/examples_2/simple_storage_test.sol' }, - { type: 'testPass', debugTxHash: '0xa700d29204f1ddb40ef66f151c44387f905d405b6da10380111a751451af2fe1', value: 'Initial value should be100', filename: __dirname + '/examples_2/simple_storage_test.sol', context: 'MyTest' }, - { type: 'testPass', debugTxHash: '0x2c037b78a435e5964615f838ea65f077f3b15d8552d514b3551d0fb87419e444', value: 'Value is set200', filename: __dirname + '/examples_2/simple_storage_test.sol', context: 'MyTest' } + { type: 'testPass', debugTxHash: '0xed5b6898331119c6e3d1185b9de65d87ad7329cc629a8f2d43b966cf180a5dc1', value: 'Initial value should be100', filename: __dirname + '/examples_2/simple_storage_test.sol', context: 'MyTest' }, + { type: 'testPass', debugTxHash: '0x8ed5b4858405b43ad4052f5690b4b711c0f6cdeb67a64f54084417d43bc54308', value: 'Value is set200', filename: __dirname + '/examples_2/simple_storage_test.sol', context: 'MyTest' } ], ['time', 'web3']) }) }) @@ -366,8 +366,8 @@ describe('testRunner', function () { deepEqualExcluding(tests, [ { type: 'accountList', value: accounts }, { type: 'contract', value: 'StringTest', filename: __dirname + '/examples_3/simple_string_test.sol' }, - { type: 'testPass', debugTxHash: '0x4e160dbc81f88d3d87b39d81651c42b0ea8e3aaa10c1a57394467e073bbcb2a4', value: 'Initial value should be hello world', filename: __dirname + '/examples_3/simple_string_test.sol', context: 'StringTest' }, - { type: 'testPass', debugTxHash: '0x47030578c5bcb990d837356430697d061a02813e3322fa3323f6b5f78176eea6', value: 'Value should not be hello wordl', filename: __dirname + '/examples_3/simple_string_test.sol', context: 'StringTest' } + { type: 'testPass', debugTxHash: '0x3567da76ffbec37e3b43a41987a7ff3e61b41b4c544f35c010d2d4b39568d6d4', value: 'Initial value should be hello world', filename: __dirname + '/examples_3/simple_string_test.sol', context: 'StringTest' }, + { type: 'testPass', debugTxHash: '0x8619b743ccc99be7d5347a064732474b2d1b69844be65b0e7754c6ac1340d275', value: 'Value should not be hello wordl', filename: __dirname + '/examples_3/simple_string_test.sol', context: 'StringTest' } ], ['time', 'web3']) }) }) @@ -392,9 +392,9 @@ describe('testRunner', function () { deepEqualExcluding(tests, [ { type: 'accountList', value: accounts }, { type: 'contract', value: 'StorageResolveTest', filename: __dirname + '/examples_5/test/simple_storage_test.sol' }, - { type: 'testPass', debugTxHash: '0x85e901e9160c4a17725d020f030c7cbb020d36da1fda8422d990391df3cbfcbb', value: 'Initial value should be100', filename: __dirname + '/examples_5/test/simple_storage_test.sol', context: 'StorageResolveTest' }, - { type: 'testPass', debugTxHash: '0x1abb2456746b416cddcaf2f3fe960103e740e9772c47a0f1d65d48394facb21a', value: 'Check if even', filename: __dirname + '/examples_5/test/simple_storage_test.sol', context: 'StorageResolveTest' }, - { type: 'testPass', debugTxHash: '0xfcc2332a24d2780390e85a06343fab81c4dc20c12cf5455d746641a9c3e8db03', value: 'Check if odd', filename: __dirname + '/examples_5/test/simple_storage_test.sol', context: 'StorageResolveTest' } + { type: 'testPass', debugTxHash: '0xed5b6898331119c6e3d1185b9de65d87ad7329cc629a8f2d43b966cf180a5dc1', value: 'Initial value should be100', filename: __dirname + '/examples_5/test/simple_storage_test.sol', context: 'StorageResolveTest' }, + { type: 'testPass', debugTxHash: '0x6893fe4f5a83cc51f03c9237ab93b93ffd826236167d58e20666be4c1b3128a4', value: 'Check if even', filename: __dirname + '/examples_5/test/simple_storage_test.sol', context: 'StorageResolveTest' }, + { type: 'testPass', debugTxHash: '0x64e600b32be681b68926660042ddd96f22d07949b424959811b8acb56e72f719', value: 'Check if odd', filename: __dirname + '/examples_5/test/simple_storage_test.sol', context: 'StorageResolveTest' } ], ['time', 'web3']) }) }) diff --git a/libs/remix-ui/run-tab/src/lib/types/execution-context.d.ts b/libs/remix-ui/run-tab/src/lib/types/execution-context.d.ts index cef12a1055..840a7b7e60 100644 --- a/libs/remix-ui/run-tab/src/lib/types/execution-context.d.ts +++ b/libs/remix-ui/run-tab/src/lib/types/execution-context.d.ts @@ -24,7 +24,6 @@ export class ExecutionContext { removeProvider(name: any): void; addProvider(network: any): void; internalWeb3(): any; - blankWeb3(): Web3; setContext(context: any, endPointUrl: any, confirmCb: any, infoCb: any): void; executionContextChange(value: any, endPointUrl: any, confirmCb: any, infoCb: any, cb: any): Promise; currentblockGasLimit(): number; diff --git a/libs/remix-ui/solidity-unit-testing/src/lib/solidity-unit-testing.tsx b/libs/remix-ui/solidity-unit-testing/src/lib/solidity-unit-testing.tsx index a377a6f73f..5b114499dd 100644 --- a/libs/remix-ui/solidity-unit-testing/src/lib/solidity-unit-testing.tsx +++ b/libs/remix-ui/solidity-unit-testing/src/lib/solidity-unit-testing.tsx @@ -537,7 +537,7 @@ export const SolidityUnitTesting = (props: Record) => { // eslint-d updateFinalResult(null, null, testFilePath) return } - testTab.fileManager.readFile(testFilePath).then((content: string) => { + testTab.fileManager.readFile(testFilePath).then(async (content: string) => { const runningTests: Record> = {} runningTests[testFilePath] = { content } filesContent[testFilePath] = { content } @@ -565,7 +565,7 @@ export const SolidityUnitTesting = (props: Record) => { // eslint-d callback(error) }, (url: string, cb: any) => { // eslint-disable-line @typescript-eslint/no-explicit-any return testTab.contentImport.resolveAndSave(url).then((result: any) => cb(null, result)).catch((error: Error) => cb(error.message)) // eslint-disable-line @typescript-eslint/no-explicit-any - }, { testFilePath } + }, { testFilePath: testFilePath, web3: await testTab.call('blockchain', 'web3VM') } ) }).catch((error: Error) => { console.log(error) diff --git a/libs/remix-ui/terminal/src/lib/components/ChechTxStatus.tsx b/libs/remix-ui/terminal/src/lib/components/ChechTxStatus.tsx index 40a0d71a83..44411142f5 100644 --- a/libs/remix-ui/terminal/src/lib/components/ChechTxStatus.tsx +++ b/libs/remix-ui/terminal/src/lib/components/ChechTxStatus.tsx @@ -1,12 +1,12 @@ import React from 'react' // eslint-disable-line const CheckTxStatus = ({ tx, type }) => { - if (tx.status === '0x1' || tx.status === true) { + if (tx.status === 1 || tx.status === '0x1' || tx.status === true) { return () } if (type === 'call' || type === 'unknownCall' || type === 'unknown') { return (call) - } else if (tx.status === '0x0' || tx.status === false) { + } else if (tx.status === 0 || tx.status === '0x0' || tx.status === false) { return () } else { return () diff --git a/libs/remix-ui/terminal/src/lib/components/Table.tsx b/libs/remix-ui/terminal/src/lib/components/Table.tsx index 4ade0ceb64..32eb34d77c 100644 --- a/libs/remix-ui/terminal/src/lib/components/Table.tsx +++ b/libs/remix-ui/terminal/src/lib/components/Table.tsx @@ -19,9 +19,9 @@ const showTable = (opts, showTableHash) => { } if (!opts.isCall) { if (opts.status !== undefined && opts.status !== null) { - if (opts.status === '0x0' || opts.status === false) { + if (opts.status === 0 || opts.status === '0x0' || opts.status === false) { msg = 'Transaction mined but execution failed' - } else if (opts.status === '0x1' || opts.status === true) { + } else if (opts.status === 1 || opts.status === '0x1' || opts.status === true) { msg = 'Transaction mined and execution succeed' } } else { diff --git a/libs/remix-ws-templates/src/templates/ozerc20/index.ts b/libs/remix-ws-templates/src/templates/ozerc20/index.ts index 3df48f3e02..9c087fd36d 100644 --- a/libs/remix-ws-templates/src/templates/ozerc20/index.ts +++ b/libs/remix-ws-templates/src/templates/ozerc20/index.ts @@ -23,7 +23,13 @@ export default async (opts) => { // If no options is selected, opts.upgradeable will be undefined // We do not show test file for upgradeable contract - // @ts-ignore - if (!opts || opts.upgradeable === undefined || !opts.upgradeable) filesObj['tests/MyToken_test.sol'] = (await import('raw-loader!./tests/MyToken_test.sol')).default + + if (!opts || opts.upgradeable === undefined || !opts.upgradeable) { + // @ts-ignore + if(opts.mintable) filesObj['tests/MyToken_test.sol'] = (await import('raw-loader!./tests/MyToken_mintable_test.sol')).default + // @ts-ignore + else filesObj['tests/MyToken_test.sol'] = (await import('raw-loader!./tests/MyToken_test.sol')).default + + } return filesObj } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc20/tests/MyToken_mintable_test.sol b/libs/remix-ws-templates/src/templates/ozerc20/tests/MyToken_mintable_test.sol new file mode 100644 index 0000000000..7388cf0b87 --- /dev/null +++ b/libs/remix-ws-templates/src/templates/ozerc20/tests/MyToken_mintable_test.sol @@ -0,0 +1,104 @@ +// SPDX-License-Identifier: GPL-3.0 + +pragma solidity >=0.7.0 <0.9.0; +import "remix_tests.sol"; +import "remix_accounts.sol"; +import "../contracts/MyToken.sol"; + +contract MyTokenTest is MyToken { + + address acc0; + address acc1; + address acc2; + address acc3; + address acc4; + + function beforeAll() public { + acc0 = TestsAccounts.getAccount(0); + acc1 = TestsAccounts.getAccount(1); + acc2 = TestsAccounts.getAccount(2); + acc3 = TestsAccounts.getAccount(3); + acc4 = TestsAccounts.getAccount(4); + } + + function testTokenInitialValues() public { + Assert.equal(name(), "MyToken", "token name did not match"); + Assert.equal(symbol(), "MTK", "token symbol did not match"); + Assert.equal(decimals(), 18, "token decimals did not match"); + Assert.equal(totalSupply(), 0, "token supply should be zero"); + } + + function testTokenMinting() public { + Assert.equal(balanceOf(acc0), 0, "token balance should be zero initially"); + mint(acc0, 10000); + Assert.equal(balanceOf(acc0), 10000, "token balance did not match"); + } + + function testTotalSupply() public { + Assert.equal(totalSupply(), 10000, "total supply did not match"); + } + + /// #sender: account-1 + function failTestTokenMintingWithWrongOwner() public { + Assert.equal(balanceOf(acc0), 0, "token balance should be zero initially"); + mint(acc0, 10000); + Assert.equal(balanceOf(acc0), 10000, "token balance did not match"); + } + + function failTestTokenMintingForZeroAddress() public { + mint(address(0), 10000); + } + + function testTokenTransfer() public { + Assert.equal(balanceOf(acc1), 0, "token balance should be zero initially"); + transfer(acc1, 500); + Assert.equal(balanceOf(acc0), 9500, "token balance did not match"); + Assert.equal(balanceOf(acc1), 500, "token balance did not match"); + } + + /// #sender: account-1 + function testTokenTransferToOtherAddress() public { + Assert.equal(balanceOf(acc1), 500, "acc1 token balance did not match"); + transfer(acc2, 100); + Assert.equal(balanceOf(acc1), 400, "acc1 token balance did not match"); + Assert.equal(balanceOf(acc2), 100, "acc2 token balance did not match"); + } + + function failTestTokenTransferToZeroAddress() public { + transfer(address(0), 100); + } + + /// #sender: account-2 + function failTestTokenTransferMoreThanBalance() public { + transfer(acc3, 110); + } + + function testTokenApprove() public { + Assert.equal(allowance(acc0, acc3), 0, "token allowance should be zero initially"); + approve(acc3, 500); + Assert.equal(allowance(acc0, acc3), 500, "token allowance did not match"); + } + + function failTestTokenApproveForZeroSpenderAddress() public { + approve(address(0), 500); + } + + /// #sender: account-3 + function testTokenTransferfrom() public { + Assert.equal(allowance(acc0, acc3), 500, "token allowance did not match"); + transferFrom(acc0, acc4, 400); + Assert.equal(balanceOf(acc4), 400, "acc4 token balance did not match"); + Assert.equal(allowance(acc0, acc3), 100, "token allowance did not match"); + } + + /// #sender: account-3 + function failTestTokenTransferfromForMoreThanAllowance() public { + transferFrom(acc0, acc4, 110); + } + + /// #sender: account-3 + function failTestTokenTransferfromForZeroToAddress() public { + transferFrom(acc0, address(0), 100); + } +} + diff --git a/libs/remix-ws-templates/src/templates/ozerc20/tests/MyToken_test.sol b/libs/remix-ws-templates/src/templates/ozerc20/tests/MyToken_test.sol index 0fb1d12117..bdf8f6e69a 100644 --- a/libs/remix-ws-templates/src/templates/ozerc20/tests/MyToken_test.sol +++ b/libs/remix-ws-templates/src/templates/ozerc20/tests/MyToken_test.sol @@ -4,15 +4,12 @@ pragma solidity >=0.7.0 <0.9.0; import "remix_tests.sol"; import "../contracts/MyToken.sol"; -contract MyTokenTest { +contract MyTokenTest is MyToken { - MyToken s; - function beforeAll () public { - s = new MyToken(); - } - - function testTokenNameAndSymbol () public { - Assert.equal(s.name(), "MyToken", "token name did not match"); - Assert.equal(s.symbol(), "MTK", "token symbol did not match"); + function testTokenInitialValues() public { + Assert.equal(name(), "MyToken", "token name did not match"); + Assert.equal(symbol(), "MTK", "token symbol did not match"); + Assert.equal(decimals(), 18, "token decimals did not match"); + Assert.equal(totalSupply(), 0, "token supply should be zero"); } } \ No newline at end of file diff --git a/package.json b/package.json index 1c4e31e6a3..c7c68afb70 100644 --- a/package.json +++ b/package.json @@ -114,12 +114,16 @@ "build-contracts": "find ./node_modules/@openzeppelin/contracts | grep -i '.sol' > libs/remix-ui/editor/src/lib/providers/completion/contracts/contracts.txt && find ./node_modules/@uniswap/v3-core/contracts | grep -i '.sol' >> libs/remix-ui/editor/src/lib/providers/completion/contracts/contracts.txt" }, "dependencies": { - "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@erebos/bzz-node": "^0.13.0", - "@ethereumjs/block": "^3.5.1", - "@ethereumjs/common": "^2.5.0", - "@ethereumjs/tx": "^3.3.2", - "@ethereumjs/vm": "^5.5.3", + "@ethereumjs/block": "^4.0.0", + "@ethereumjs/common": "^3.0.0", + "@ethereumjs/evm": "^1.0.0", + "@ethereumjs/statemanager": "^1.0.0", + "@ethereumjs/tx": "^4.0.0", + "@ethereumjs/util": "^8.0.0", + "@ethereumjs/vm": "^6.0.0", "@ethersphere/bee-js": "^3.2.0", "@isomorphic-git/lightning-fs": "^4.4.1", "@monaco-editor/react": "4.4.5", @@ -146,7 +150,6 @@ "deep-equal": "^1.0.1", "document-register-element": "1.13.1", "eslint-config-prettier": "^8.5.0", - "ethereumjs-util": "^7.0.10", "ethers": "^5.4.2", "ethjs-util": "^0.1.6", "express": "^4.18.2", @@ -331,7 +334,6 @@ "style-loader": "^3.3.1", "tap-spec": "^5.0.0", "tape": "^4.13.3", - "terser-webpack-plugin": "^4.2.3", "timers-browserify": "^2.0.12", "ts-jest": "^29.0.3", "ts-node": "10.9.1", diff --git a/yarn.lock b/yarn.lock index 59fc8297ee..846e5ef0c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -59,7 +59,12 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.0.tgz#ea269d7f78deb3a7826c39a4048eecda541ebdaa" integrity sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew== -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.19.3": +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.1.tgz#72d647b4ff6a4f82878d184613353af1dd0290f9" + integrity sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg== + +"@babel/compat-data@^7.19.3": version "7.19.3" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.3.tgz#707b939793f867f5a73b2666e6d9a3396eb03151" integrity sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw== @@ -161,6 +166,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.0.tgz#785596c06425e59334df2ccee63ab166b738419a" + integrity sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg== + dependencies: + "@babel/types" "^7.19.0" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + "@babel/generator@^7.19.3": version "7.19.3" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.3.tgz#d7f4d1300485b4547cb6f94b27d10d237b42bf59" @@ -235,7 +249,17 @@ browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0", "@babel/helper-compilation-targets@^7.19.3": +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.1.tgz#7f630911d83b408b76fe584831c98e5395d7a17c" + integrity sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg== + dependencies: + "@babel/compat-data" "^7.19.1" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.21.3" + semver "^6.3.0" + +"@babel/helper-compilation-targets@^7.19.3": version "7.19.3" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz#a10a04588125675d7c7ae299af86fa1b2ee038ca" integrity sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg== @@ -817,7 +841,12 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.6.tgz#8f194828193e8fa79166f34a4b4e52f3e769a314" integrity sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ== -"@babel/parser@^7.18.10", "@babel/parser@^7.19.3": +"@babel/parser@^7.18.10", "@babel/parser@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.1.tgz#6f6d6c2e621aad19a92544cc217ed13f1aac5b4c" + integrity sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A== + +"@babel/parser@^7.19.3": version "7.19.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.3.tgz#8dd36d17c53ff347f9e55c328710321b49479a9a" integrity sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ== @@ -879,7 +908,7 @@ "@babel/helper-create-class-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-class-properties@^7.18.6": +"@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== @@ -1616,16 +1645,7 @@ "@babel/helper-module-transforms" "7.0.0-beta.53" "@babel/helper-plugin-utils" "7.0.0-beta.53" -"@babel/plugin-transform-modules-amd@^7.10.4", "@babel/plugin-transform-modules-amd@^7.14.5": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz#09abd41e18dcf4fd479c598c1cef7bd39eb1337e" - integrity sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw== - dependencies: - "@babel/helper-module-transforms" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-amd@^7.18.6": +"@babel/plugin-transform-modules-amd@^7.10.4", "@babel/plugin-transform-modules-amd@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== @@ -1634,6 +1654,15 @@ "@babel/helper-plugin-utils" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-amd@^7.14.5": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz#09abd41e18dcf4fd479c598c1cef7bd39eb1337e" + integrity sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw== + dependencies: + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-commonjs@7.0.0-beta.53": version "7.0.0-beta.53" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0-beta.53.tgz#ebc3fba1c5a6c8743b909403ecd3e7e3681cafa5" @@ -1756,11 +1785,11 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-object-assign@^7.2.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.0.tgz#750c726397f1f6402fb1ceffe9d8ff3595c8a0df" - integrity sha512-TftKY6Hxo5Uf/EIoC3BKQyLvlH46tbtK4xub90vzi9+yS8z1+O/52YHyywCZvYeLPOvv//1j3BPokLuHTWPcbg== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.18.6.tgz#7830b4b6f83e1374a5afb9f6111bcfaea872cdd2" + integrity sha512-mQisZ3JfqWh2gVXvfqYCAAyRs6+7oev+myBsTwW5RnPhYXOTuCEw2oe3YgxlXMViXUS53lG8koulI7mJ+8JE+A== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-object-super@7.0.0-beta.53": version "7.0.0-beta.53" @@ -1899,19 +1928,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-runtime@^7.10.4": - version "7.15.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz#9d15b1e94e1c7f6344f65a8d573597d93c6cd886" - integrity sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw== - dependencies: - "@babel/helper-module-imports" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.5" - babel-plugin-polyfill-regenerator "^0.2.2" - semver "^6.3.0" - -"@babel/plugin-transform-runtime@^7.15.0": +"@babel/plugin-transform-runtime@^7.10.4", "@babel/plugin-transform-runtime@^7.15.0": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz#a3df2d7312eea624c7889a2dcd37fd1dfd25b2c6" integrity sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA== @@ -2406,14 +2423,14 @@ "@babel/plugin-transform-typescript" "^7.18.6" "@babel/register@^7.4.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.16.0.tgz#f5d2aa14df37cf7146b9759f7c53818360f24ec6" - integrity sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ== + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.18.9.tgz#1888b24bc28d5cc41c412feb015e9ff6b96e439c" + integrity sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" make-dir "^2.1.0" - pirates "^4.0.0" + pirates "^4.0.5" source-map-support "^0.5.16" "@babel/runtime-corejs3@^7.10.2": @@ -2527,7 +2544,23 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.19.3": +"@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.1.tgz#0fafe100a8c2a603b4718b1d9bf2568d1d193347" + integrity sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.0" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.19.1" + "@babel/types" "^7.19.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.19.3": version "7.19.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.3.tgz#3a3c5348d4988ba60884e8494b0592b2f15a04b4" integrity sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ== @@ -2576,7 +2609,16 @@ "@babel/helper-validator-identifier" "^7.15.7" to-fast-properties "^2.0.0" -"@babel/types@^7.18.10", "@babel/types@^7.18.4", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.19.3": +"@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600" + integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA== + dependencies: + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + +"@babel/types@^7.18.4", "@babel/types@^7.19.3": version "7.19.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.3.tgz#fc420e6bbe54880bce6779ffaf315f5e43ec9624" integrity sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw== @@ -2670,29 +2712,35 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.5.1", "@ethereumjs/block@^3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.0.tgz#5cf89ea748607597a3f8b038abc986e4ac0b05db" - integrity sha512-dqLo1LtsLG+Oelu5S5tWUDG0pah3QUwV5TJZy2cm19BXDr4ka/S9XBSgao0i09gTcuPlovlHgcs6d7EZ37urjQ== +"@ethereumjs/block@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-4.0.0.tgz#74659b0c96a62191fdac0cc155338162282fb7e5" + integrity sha512-OewaOEzcplspEeoDWyEKX7ENuXYUQMUsO18payHrPBC7kTGDcWr+qx+F6gMMC/pyJvS9l9LpLmMOS6ENIK62kA== dependencies: - "@ethereumjs/common" "^2.6.0" - "@ethereumjs/tx" "^3.4.0" - ethereumjs-util "^7.1.3" - merkle-patricia-tree "^4.2.2" + "@ethereumjs/common" "^3.0.0" + "@ethereumjs/rlp" "^4.0.0" + "@ethereumjs/trie" "^5.0.0" + "@ethereumjs/tx" "^4.0.0" + "@ethereumjs/util" "^8.0.0" + ethereum-cryptography "^1.1.2" -"@ethereumjs/blockchain@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.0.tgz#c07ed8a6a148ed0c5a112cec5bad6bdaa95ccc07" - integrity sha512-879YVmWbM8OUKLVj+OuEZ+sZFkQOnXYGeak5oi7O1hOjaRv//je+fK2axGP04cbttu7sPCp41zy7O6xw4cut8A== - dependencies: - "@ethereumjs/block" "^3.6.0" - "@ethereumjs/common" "^2.6.0" - "@ethereumjs/ethash" "^1.1.0" - debug "^2.2.0" - ethereumjs-util "^7.1.3" - level-mem "^5.0.1" +"@ethereumjs/blockchain@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-6.0.0.tgz#652e6d3929f5008c3258dad473c65d18444152f2" + integrity sha512-JdgY2jD4ymzcCbAcX4XVX1dTLoVqEIyaBVPVljYlPzJEdIoFa5JYpZheNlZGtP11d1OKhhyTqfqLuYThxI32Tw== + dependencies: + "@ethereumjs/block" "^4.0.0" + "@ethereumjs/common" "^3.0.0" + "@ethereumjs/ethash" "^2.0.0" + "@ethereumjs/rlp" "^4.0.0" + "@ethereumjs/trie" "^5.0.0" + "@ethereumjs/util" "^8.0.0" + abstract-level "^1.0.3" + debug "^4.3.3" + ethereum-cryptography "^1.1.2" + level "^8.0.0" lru-cache "^5.1.1" - semaphore-async-await "^1.5.1" + memory-level "^1.0.0" "@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.0": version "2.6.0" @@ -2702,18 +2750,69 @@ crc-32 "^1.2.0" ethereumjs-util "^7.1.3" -"@ethereumjs/ethash@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb" - integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== +"@ethereumjs/common@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-3.0.0.tgz#a8786536e2af71d01e5d3f1c3a0272bc935fd817" + integrity sha512-yHgMom5HFlAJIu8fmA1n0UvBnanhULfuNQAD+tT6ZR6sndLUz2Mc4eegF3Rby579lqJMAc/rpsToP7wA/i4R/w== dependencies: - "@ethereumjs/block" "^3.5.0" - "@types/levelup" "^4.3.0" - buffer-xor "^2.0.1" - ethereumjs-util "^7.1.1" - miller-rabin "^4.0.0" + "@ethereumjs/util" "^8.0.0" + crc-32 "^1.2.0" + +"@ethereumjs/ethash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-2.0.0.tgz#0fedc1e4172ef627092216e17c871befa93eb073" + integrity sha512-U4+G1UYDCeqGW59h9FtjxVPZcQc/+nptpAMjQfGIN2nA1ZXoxtZiyVBgW0ocyofIbpySnSNMQRcUq2iqJ/7qug== + dependencies: + "@ethereumjs/block" "^4.0.0" + "@ethereumjs/rlp" "^4.0.0" + "@ethereumjs/util" "^8.0.0" + abstract-level "^1.0.3" + bigint-crypto-utils "^3.0.23" + ethereum-cryptography "^1.1.2" + +"@ethereumjs/evm@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/evm/-/evm-1.0.0.tgz#bb9af34098eb383fd3abd3147a6b897696cc9651" + integrity sha512-jLUPnpYxMDYnmRuD8xKQWuTXcAiHtvWLJ99L7nNiVU31yShQuWckyQShxE7CGuNm5nm6X6yptSSzb1inb1Bd8w== + dependencies: + "@ethereumjs/common" "^3.0.0" + "@ethereumjs/util" "^8.0.0" + "@types/async-eventemitter" "^0.2.1" + async-eventemitter "^0.2.4" + debug "^4.3.3" + ethereum-cryptography "^1.1.2" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" -"@ethereumjs/tx@^3.3.2", "@ethereumjs/tx@^3.4.0": +"@ethereumjs/rlp@^4.0.0", "@ethereumjs/rlp@^4.0.0-beta.2": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.0.tgz#66719891bd727251a7f233f9ca80212d1994f8c8" + integrity sha512-LM4jS5n33bJN60fM5EC8VeyhUgga6/DjCPBV2vWjnfVtobqtOiNC4SQ1MRFqyBSmJGGdB533JZWewyvlcdJtkQ== + +"@ethereumjs/statemanager@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/statemanager/-/statemanager-1.0.0.tgz#ba0b1d6aefd09684e05be8aacc7bc65a0a4059e4" + integrity sha512-mOGXsq1LH4vKCfO+c2wPQQD67/Tm2bA4uuH4QadmPwVBm8z/21uvAITZJg3UGSEvnMWY873J4GumeADe/xAeEg== + dependencies: + "@ethereumjs/common" "^3.0.0" + "@ethereumjs/rlp" "^4.0.0" + "@ethereumjs/trie" "^5.0.0" + "@ethereumjs/util" "^8.0.0" + debug "^4.3.3" + ethereum-cryptography "^1.1.2" + functional-red-black-tree "^1.0.1" + +"@ethereumjs/trie@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/trie/-/trie-5.0.0.tgz#c98da2e09c082ae2f874e70bd59adf712f5d0d01" + integrity sha512-BiFv9hQZighlp4445kfG65X+tc8eEfpP32RMKzCELmSvChpwmtuL8Xuxy+aTYWQEMjY6s4gAVLX/J48SW7gwQg== + dependencies: + "@ethereumjs/rlp" "^4.0.0" + "@ethereumjs/util" "^8.0.0" + ethereum-cryptography "^1.1.2" + readable-stream "^3.6.0" + +"@ethereumjs/tx@^3.3.2": version "3.4.0" resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.4.0.tgz#7eb1947eefa55eb9cf05b3ca116fb7a3dbd0bce7" integrity sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw== @@ -2721,22 +2820,44 @@ "@ethereumjs/common" "^2.6.0" ethereumjs-util "^7.1.3" -"@ethereumjs/vm@^5.5.3": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.6.0.tgz#e0ca62af07de820143674c30b776b86c1983a464" - integrity sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ== +"@ethereumjs/tx@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-4.0.0.tgz#da284dd1d3407d910a055da99dc0d1c917097a8c" + integrity sha512-W3Fc61kAA3D6vJad2vsfh9ygdaMeScYpf49ephoo/0y+CP9IN+MMrqA6mx1X0Fr/jf52IuW4hDHE/rmgadBV6g== dependencies: - "@ethereumjs/block" "^3.6.0" - "@ethereumjs/blockchain" "^5.5.0" - "@ethereumjs/common" "^2.6.0" - "@ethereumjs/tx" "^3.4.0" + "@ethereumjs/common" "^3.0.0" + "@ethereumjs/rlp" "^4.0.0" + "@ethereumjs/util" "^8.0.0" + ethereum-cryptography "^1.1.2" + +"@ethereumjs/util@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.0.0.tgz#52363fe29113c0ee70c8e9df20bc713e00089720" + integrity sha512-Zz/Ovar0VU/CaYHLvigBTjG5PmkG0OzjvRjjoXRJbJcdWJoTCN2N4BYgoCBOZomKjaAT4ABpQ7wer6ZFOglvjg== + dependencies: + "@ethereumjs/rlp" "^4.0.0-beta.2" + ethereum-cryptography "^1.1.2" + +"@ethereumjs/vm@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-6.0.0.tgz#7d8335c7178c23eecf8136b88ff16515b6ee9d25" + integrity sha512-bFt9RSe+HKT+lgpL4+pHEWjn6l3N4f82cfFkSHaF4RTgSHeyGq/K4lbyXOFGE+r7QAwXM5SrRR1+g7kLhp0h7w== + dependencies: + "@ethereumjs/block" "^4.0.0" + "@ethereumjs/blockchain" "^6.0.0" + "@ethereumjs/common" "^3.0.0" + "@ethereumjs/evm" "^1.0.0" + "@ethereumjs/rlp" "^4.0.0" + "@ethereumjs/statemanager" "^1.0.0" + "@ethereumjs/trie" "^5.0.0" + "@ethereumjs/tx" "^4.0.0" + "@ethereumjs/util" "^8.0.0" + "@types/async-eventemitter" "^0.2.1" async-eventemitter "^0.2.4" - core-js-pure "^3.0.1" - debug "^2.2.0" - ethereumjs-util "^7.1.3" + debug "^4.3.3" + ethereum-cryptography "^1.1.2" functional-red-black-tree "^1.0.1" mcl-wasm "^0.7.1" - merkle-patricia-tree "^4.2.2" rustbn.js "~0.2.0" "@ethersphere/bee-js@^3.2.0": @@ -3423,11 +3544,6 @@ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz#ecda5712b61ac852c760d8b3c79c96adca5554e5" integrity sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg== -"@gar/promisify@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" - integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw== - "@humanwhocodes/config-array@^0.11.6": version "0.11.6" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.6.tgz#6a51d603a3aaf8d4cf45b42b3f2ac9318a4adc4b" @@ -4687,6 +4803,16 @@ pathval "1.1.1" type-detect "4.0.8" +"@noble/hashes@1.1.2", "@noble/hashes@~1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" + integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== + +"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" + integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -4713,22 +4839,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/fs@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.0.0.tgz#589612cfad3a6ea0feafcb901d29c63fd52db09f" - integrity sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - "@nrwl/cli@15.0.0", "@nrwl/cli@^15.0.0": version "15.0.0" resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-15.0.0.tgz#7b00d95a6502f83fdd84f8888fd1ba7a180cdd07" @@ -5334,6 +5444,28 @@ estree-walker "^2.0.1" picomatch "^2.2.2" +"@scure/base@~1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" + integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== + +"@scure/bip32@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.0.tgz#dea45875e7fbc720c2b4560325f1cf5d2246d95b" + integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== + dependencies: + "@noble/hashes" "~1.1.1" + "@noble/secp256k1" "~1.6.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.0.tgz#92f11d095bae025f166bef3defcc5bf4945d419a" + integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== + dependencies: + "@noble/hashes" "~1.1.1" + "@scure/base" "~1.1.0" + "@sinclair/typebox@^0.24.1": version "0.24.44" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.44.tgz#0a0aa3bf4a155a678418527342a3ee84bd8caa5c" @@ -5553,16 +5685,16 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== -"@types/abstract-leveldown@*": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-5.0.2.tgz#ee81917fe38f770e29eec8139b6f16ee4a8b0a5f" - integrity sha512-+jA1XXF3jsz+Z7FcuiNqgK53hTa/luglT2TyTpKPqoYbxVY+mCPF22Rm+q3KPBrMHJwNXFrTViHszBOfU4vftQ== - "@types/aria-query@^4.2.0": version "4.2.2" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== +"@types/async-eventemitter@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz#f8e6280e87e8c60b2b938624b0a3530fb3e24712" + integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== + "@types/axios@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@types/axios/-/axios-0.14.0.tgz#ec2300fbe7d7dddd7eb9d3abf87999964cafce46" @@ -5863,20 +5995,6 @@ dependencies: "@types/node" "*" -"@types/level-errors@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.0.tgz#15c1f4915a5ef763b51651b15e90f6dc081b96a8" - integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== - -"@types/levelup@^4.3.0": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" - integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== - dependencies: - "@types/abstract-leveldown" "*" - "@types/level-errors" "*" - "@types/node" "*" - "@types/lodash@^4.14.172": version "4.14.176" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.176.tgz#641150fc1cda36fbfa329de603bbb175d7ee20c0" @@ -6518,27 +6636,18 @@ abortcontroller-polyfill@^1.7.3: resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz#1b5b487bd6436b5b764fd52a612509702c3144b5" integrity sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q== -abstract-leveldown@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" - integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -abstract-leveldown@~6.2.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== +abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" + integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" @@ -6671,14 +6780,6 @@ agentkeepalive@^3.4.1: dependencies: humanize-ms "^1.2.1" -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -8233,6 +8334,18 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +bigint-crypto-utils@^3.0.23: + version "3.1.6" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.1.6.tgz#3a52a660423416856342d0d9981935fa9856f177" + integrity sha512-k5ljSLHx94jQTW3+18KEfxLJR8/XFBHqhfhEGF48qT8p/jL6EdiG7oNOiiIRGMFh2wEP8kaCXZbVd+5dYkngUg== + dependencies: + bigint-mod-arith "^3.1.0" + +bigint-mod-arith@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/bigint-mod-arith/-/bigint-mod-arith-3.1.1.tgz#127c504faf30d27ba010ac7b7d58708a68e3c20b" + integrity sha512-SzFqdncZKXq5uh3oLFZXmzaZEMDsA7ml9l53xKaVGO6/+y26xNwAaTQEg2R+D+d07YduLbKi0dni3YPsR51UDQ== + bignumber.js@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" @@ -8514,6 +8627,16 @@ brorand@^1.0.1, brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== +browser-level@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" + integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.1" + module-error "^1.0.2" + run-parallel-limit "^1.1.0" + browser-pack@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" @@ -8867,13 +8990,6 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== -buffer-xor@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289" - integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== - dependencies: - safe-buffer "^5.1.1" - buffer@^5.0.5, buffer@^5.4.3, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -8971,30 +9087,6 @@ cacache@^12.0.0, cacache@^12.0.3: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^15.0.5: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -9190,11 +9282,16 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001264, caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001394, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001407: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001264, caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001394, caniuse-lite@^1.0.30001407: version "1.0.30001426" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001426.tgz" integrity sha512-n7cosrHLl8AWt0wwZw/PJZgUg3lV0gk9LMI7ikGJwhyhgsd2Nb65vKvmSexCqq/J7rbH3mFG6yZZiPR5dLPW5A== +caniuse-lite@^1.0.30001400: + version "1.0.30001412" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001412.tgz#30f67d55a865da43e0aeec003f073ea8764d5d7c" + integrity sha512-+TeEIee1gS5bYOiuf+PS/kp2mrXic37Hl66VY6EAfxasIk5fELTktK2oOezYed12H8w7jt3s512PpulQidPjwA== + capital-case@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" @@ -9229,6 +9326,11 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== +catering@^2.1.0, catering@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" @@ -9424,11 +9526,6 @@ chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - chownr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" @@ -9508,6 +9605,17 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +classic-level@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.2.0.tgz#2d52bdec8e7a27f534e67fdeb890abef3e643c27" + integrity sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.0" + module-error "^1.0.1" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + classnames@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" @@ -9518,11 +9626,6 @@ clean-git-ref@^2.0.1: resolved "https://registry.yarnpkg.com/clean-git-ref/-/clean-git-ref-2.0.1.tgz#dcc0ca093b90e527e67adb5a5e55b1af6816dcd9" integrity sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw== -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" @@ -10249,11 +10352,6 @@ core-js-compat@^3.25.1: dependencies: browserslist "^4.21.4" -core-js-pure@^3.0.1: - version "3.18.2" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.18.2.tgz#d8cc11d4885ea919f3de776d45e720e4c769d406" - integrity sha512-4hMMLUlZhKJKOWbbGD1/VDUxGPEhEoN/T01k7bx271WiBKCvCfkgPzy0IeRS4PB50p6/N1q/SZL4B/TRsTE5bA== - core-js-pure@^3.19.0: version "3.20.0" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.20.0.tgz#7253feccf8bb05b72c153ddccdbe391ddbffbe03" @@ -10824,7 +10922,7 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.3.2, debug@^4.3.4: +debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -11005,14 +11103,6 @@ defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" @@ -11507,9 +11597,9 @@ electron-to-chromium@^1.4.17: integrity sha512-q3tB59Api3+DMbLnDPkW/UBHBO7KTGcF+rDCeb0GAGyqFj562s6y+c/2tDKTS/y5lbC+JOvT4MSUALJLPqlcSA== electron-to-chromium@^1.4.251: - version "1.4.268" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.268.tgz#5a902075f0209a628837e508a66d40ace04d54ab" - integrity sha512-PO90Bv++vEzdln+eA9qLg1IRnh0rKETus6QkTzcFm5P3Wg3EQBZud5dcnzkpYXuIKWBjKe5CO8zjz02cicvn1g== + version "1.4.264" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.264.tgz#2f68a062c38b7a04bf57f3e6954b868672fbdcd3" + integrity sha512-AZ6ZRkucHOQT8wke50MktxtmcWZr67kE17X/nAXFf62NIdMdgY6xfsaJD5Szoy84lnkuPWH+4tTNE3s2+bPCiw== elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" @@ -11574,16 +11664,6 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -encoding-down@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" - integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== - dependencies: - abstract-leveldown "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" - encoding@^0.1.11: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -11668,7 +11748,7 @@ err-code@^3.0.0: resolved "https://registry.yarnpkg.com/err-code/-/err-code-3.0.1.tgz#a444c7b992705f2b120ee320b09972eef331c920" integrity sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA== -errno@^0.1.1, errno@~0.1.1: +errno@^0.1.1: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== @@ -12213,6 +12293,16 @@ ethereum-cryptography@^0.1.3: secp256k1 "^4.0.1" setimmediate "^1.0.5" +ethereum-cryptography@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz#74f2ac0f0f5fe79f012c889b3b8446a9a6264e6d" + integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== + dependencies: + "@noble/hashes" "1.1.2" + "@noble/secp256k1" "1.6.3" + "@scure/bip32" "1.1.0" + "@scure/bip39" "1.1.0" + ethereumjs-util@6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" @@ -12226,7 +12316,7 @@ ethereumjs-util@6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.3: +ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz#b55d7b64dde3e3e45749e4c41288238edec32d23" integrity sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw== @@ -13348,13 +13438,6 @@ fs-minipass@^1.2.7: dependencies: minipass "^2.6.0" -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - fs-mkdirp-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" @@ -13462,7 +13545,7 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: +functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= @@ -14760,11 +14843,6 @@ image-size@~0.5.0: resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= -immediate@^3.2.3, immediate@~3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" - integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= - immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -15245,7 +15323,7 @@ is-buffer@^1.1.0, is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@^2.0.0: +is-buffer@^2.0.0, is-buffer@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== @@ -16842,15 +16920,6 @@ jest-worker@^25.5.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^26.5.0: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - jest-worker@^27.0.2, jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -16944,7 +17013,7 @@ js-sha3@^0.6.1: js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -17444,76 +17513,26 @@ less@3.12.2: native-request "^1.0.5" source-map "~0.6.0" -level-codec@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" - integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== - dependencies: - buffer "^5.6.0" - -level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - -level-errors@^2.0.0, level-errors@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" - integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== - dependencies: - errno "~0.1.1" - -level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - -level-mem@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" - integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== - dependencies: - level-packager "^5.0.3" - memdown "^5.0.0" - -level-packager@^5.0.3: - version "5.1.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" - integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== - dependencies: - encoding-down "^6.3.0" - levelup "^4.3.2" +level-supports@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== -level-supports@~1.0.0: +level-transcoder@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== dependencies: - xtend "^4.0.2" - -level-ws@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" - integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== - dependencies: - inherits "^2.0.3" - readable-stream "^3.1.0" - xtend "^4.0.1" + buffer "^6.0.3" + module-error "^1.0.1" -levelup@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== +level@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" + integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" + browser-level "^1.0.1" + classic-level "^1.2.0" leven@^3.1.0: version "3.1.0" @@ -18036,11 +18055,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -ltgt@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= - lz-string@^1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" @@ -18229,18 +18243,6 @@ mem@^4.0.0: mimic-fn "^2.0.0" p-is-promise "^2.0.0" -memdown@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" - integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== - dependencies: - abstract-leveldown "~6.2.1" - functional-red-black-tree "~1.0.1" - immediate "~3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.2.0" - memfs@^3.4.1, memfs@^3.4.3: version "3.4.7" resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.7.tgz#e5252ad2242a724f938cb937e3c4f7ceb1f70e5a" @@ -18253,6 +18255,15 @@ memoize-one@^5.1.1: resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== +memory-level@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" + integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== + dependencies: + abstract-level "^1.0.0" + functional-red-black-tree "^1.0.1" + module-error "^1.0.1" + memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -18347,19 +18358,6 @@ merge@^2.1.1: resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== -merkle-patricia-tree@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.2.tgz#6dec17855370172458244c2f42c989dd60b773a3" - integrity sha512-eqZYNTshcYx9aESkSPr71EqwsR/QmpnObDEV4iLxkt/x/IoLYZYjJvKY72voP/27Vy61iMOrfOG6jrn7ttXD+Q== - dependencies: - "@types/levelup" "^4.3.0" - ethereumjs-util "^7.1.2" - level-mem "^5.0.1" - level-ws "^2.0.0" - readable-stream "^3.6.0" - rlp "^2.2.4" - semaphore-async-await "^1.5.1" - methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -18610,27 +18608,6 @@ minimisted@^2.0.0: dependencies: minimist "^1.2.5" -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -18639,13 +18616,6 @@ minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" -minipass@^3.0.0, minipass@^3.1.1: - version "3.1.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732" - integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw== - dependencies: - yallist "^4.0.0" - minixhr@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/minixhr/-/minixhr-4.0.0.tgz#c0b7a36c436402650fdb3495bffd6fc3180075f3" @@ -18658,14 +18628,6 @@ minizlib@^1.3.3: dependencies: minipass "^2.9.0" -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -18739,7 +18701,7 @@ mkdirp@^0.5.6: dependencies: minimist "^1.2.6" -mkdirp@^1.0.3, mkdirp@^1.0.4, mkdirp@~1.0.4: +mkdirp@^1.0.4, mkdirp@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -18841,6 +18803,11 @@ module-deps@^6.2.3: through2 "^2.0.0" xtend "^4.0.0" +module-error@^1.0.1, module-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + mold-source-map@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/mold-source-map/-/mold-source-map-0.4.0.tgz#cf67e0b31c47ab9badb5c9c25651862127bb8317" @@ -19154,6 +19121,11 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + native-fetch@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/native-fetch/-/native-fetch-3.0.0.tgz#06ccdd70e79e171c365c75117959cf4fe14a09bb" @@ -20414,13 +20386,6 @@ p-map@^2.1.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - p-pipe@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" @@ -20921,14 +20886,14 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -pirates@^4.0.0, pirates@^4.0.1: +pirates@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== dependencies: node-modules-regexp "^1.0.0" -pirates@^4.0.4: +pirates@^4.0.4, pirates@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== @@ -21909,7 +21874,7 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -queue-microtask@^1.2.2: +queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== @@ -22403,7 +22368,7 @@ read@1, read@~1.0.1, read@~1.0.7: string_decoder "~1.0.0" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: +"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -23159,6 +23124,13 @@ run-async@^2.2.0: resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== +run-parallel-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -23385,11 +23357,6 @@ selfsigned@^2.1.1: dependencies: node-forge "^1" -semaphore-async-await@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" - integrity sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo= - semver-diff@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" @@ -23499,7 +23466,7 @@ sentence-case@^3.0.4: tslib "^2.0.3" upper-case-first "^2.0.2" -serialize-javascript@5.0.1, serialize-javascript@^5.0.1: +serialize-javascript@5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== @@ -23904,11 +23871,6 @@ sorted-union-stream@~2.1.3: from2 "^1.3.0" stream-iterate "^1.1.0" -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" @@ -23966,7 +23928,15 @@ source-map-support@0.5.19: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.16, source-map-support@~0.5.20: +source-map-support@^0.5.16: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@~0.5.20: version "0.5.20" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== @@ -23989,7 +23959,7 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3, source-map@~0.7.2: +source-map@^0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== @@ -24133,13 +24103,6 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -24809,18 +24772,6 @@ tar@^4.0.2, tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: safe-buffer "^5.2.1" yallist "^3.1.1" -tar@^6.0.2: - version "6.1.11" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" @@ -24853,21 +24804,6 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" - integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== - dependencies: - cacache "^15.0.5" - find-cache-dir "^3.3.1" - jest-worker "^26.5.0" - p-limit "^3.0.2" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" - source-map "^0.6.1" - terser "^5.3.4" - webpack-sources "^1.4.3" - terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.3: version "5.3.6" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" @@ -24889,15 +24825,6 @@ terser@^5.14.1: commander "^2.20.0" source-map-support "~0.5.20" -terser@^5.3.4: - version "5.9.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.9.0.tgz#47d6e629a522963240f2b55fcaa3c99083d2c351" - integrity sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ== - dependencies: - commander "^2.20.0" - source-map "~0.7.2" - source-map-support "~0.5.20" - test-exclude@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.1.0.tgz#6ba6b25179d2d38724824661323b73e03c0c1de1" @@ -25228,7 +25155,7 @@ trim-newlines@^3.0.0: trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + integrity sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw== trim@0.0.1: version "0.0.1" @@ -26576,14 +26503,6 @@ webpack-node-externals@^3.0.0: resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz#1a3407c158d547a9feb4229a9e3385b7b60c9917" integrity sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ== -webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - webpack-sources@^3.0.0, webpack-sources@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"