Commit 0ad9adbc authored by Liam Horne's avatar Liam Horne Committed by GitHub

Merge pull request #1207 from ethereum-optimism/develop

Merge develop into master
parents dc4bd538 e6151443
---
'@eth-optimism/contracts': patch
---
Add a factory contract we can whitelist for the community phase which will be used by the Gateway to create standard ERC20 tokens on L2
---
'@eth-optimism/batch-submitter': patch
---
Prevent batch submitter from submitting batches if low on ETH
---
'@eth-optimism/message-relayer': patch
---
Adds a new l2 to l1 message relaying utility within the message relayer package
---
'@eth-optimism/integration-tests': patch
---
Make expectApprox more readable by passing optional args as an object with well named keys
---
'@eth-optimism/l2geth': patch
---
Handle errors correctly in the RollupClient and retry in the SyncService when initially attempting to connect to the DTL
---
'@eth-optimism/contracts': patch
---
A small change to the L1 Messenger, which prevents an L2 to L1 call from send calling the CTC.
module.exports = { module.exports = {
"env": { root: true,
"browser": true, env: {
"es6": true browser: true,
es6: true,
}, },
"extends": [ ignorePatterns: ['dist', 'packages/contracts/hardhat'],
"prettier", extends: ['plugin:prettier/recommended'],
], parser: 'babel-eslint',
"ignorePatterns": ["dist/**/*.ts"], parserOptions: {
"parser": "@typescript-eslint/parser", es6: true,
"parserOptions": { ecmaVersion: 6,
"project": "tsconfig.json", sourceType: 'module',
"sourceType": "module"
}, },
"plugins": [ plugins: [
"eslint-plugin-import", 'eslint-plugin-import',
"eslint-plugin-unicorn", 'eslint-plugin-unicorn',
"eslint-plugin-jsdoc", 'eslint-plugin-jsdoc',
"eslint-plugin-prefer-arrow", 'eslint-plugin-prefer-arrow',
"eslint-plugin-react", 'eslint-plugin-react',
"@typescript-eslint", '@typescript-eslint',
], ],
"rules": { overrides: [
"@typescript-eslint/adjacent-overload-signatures": "error",
"@typescript-eslint/array-type": "off",
"@typescript-eslint/ban-types": "off",
"@typescript-eslint/consistent-type-assertions": "error",
"@typescript-eslint/dot-notation": "off",
"@typescript-eslint/indent": "off",
"@typescript-eslint/member-delimiter-style": [
"off",
{ {
"multiline": { files: ['**/*.ts'],
"delimiter": "none", parser: '@typescript-eslint/parser',
"requireLast": true parserOptions: {
project: 'tsconfig.json',
sourceType: 'module',
}, },
"singleline": { rules: {
"delimiter": "semi", '@typescript-eslint/adjacent-overload-signatures': 'error',
"requireLast": false '@typescript-eslint/array-type': 'off',
} '@typescript-eslint/ban-types': 'off',
} '@typescript-eslint/consistent-type-assertions': 'error',
], '@typescript-eslint/dot-notation': 'off',
"@typescript-eslint/member-ordering": "off", '@typescript-eslint/indent': 'off',
"@typescript-eslint/naming-convention": "off", '@typescript-eslint/member-delimiter-style': [
"@typescript-eslint/no-empty-function": "error", 'off',
"@typescript-eslint/no-empty-interface": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-misused-new": "error",
"@typescript-eslint/no-namespace": "error",
"@typescript-eslint/no-parameter-properties": "off",
"@typescript-eslint/no-shadow": [
"error",
{ {
"hoist": "all" multiline: {
} delimiter: 'none',
], requireLast: true,
"@typescript-eslint/no-this-alias": "error", },
"@typescript-eslint/no-unused-expressions": "off", singleline: {
"@typescript-eslint/no-use-before-define": "off", delimiter: 'semi',
"@typescript-eslint/no-var-requires": "error", requireLast: false,
"@typescript-eslint/prefer-for-of": "error", },
"@typescript-eslint/prefer-function-type": "error", },
"@typescript-eslint/prefer-namespace-keyword": "error",
"@typescript-eslint/quotes": "off",
"@typescript-eslint/semi": [
"off",
null
], ],
"@typescript-eslint/triple-slash-reference": [ '@typescript-eslint/member-ordering': 'off',
"error", '@typescript-eslint/naming-convention': 'off',
'@typescript-eslint/no-empty-function': 'error',
'@typescript-eslint/no-empty-interface': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-misused-new': 'error',
'@typescript-eslint/no-namespace': 'error',
'@typescript-eslint/no-parameter-properties': 'off',
'@typescript-eslint/no-shadow': [
'error',
{ {
"path": "always", hoist: 'all',
"types": "prefer-import", },
"lib": "always"
}
],
"@typescript-eslint/type-annotation-spacing": "off",
"@typescript-eslint/unified-signatures": "error",
"arrow-parens": [
"off",
"always"
],
"brace-style": [
"off",
"off"
],
"comma-dangle": "off",
"complexity": "off",
"constructor-super": "error",
"curly": "error",
"dot-notation": "off",
"eol-last": "off",
"eqeqeq": [
"error",
"smart"
], ],
"guard-for-in": "error", '@typescript-eslint/no-this-alias': 'error',
"id-blacklist": "off", '@typescript-eslint/no-unused-expressions': 'off',
"id-match": "off", '@typescript-eslint/no-use-before-define': 'off',
"import/no-extraneous-dependencies": [ '@typescript-eslint/no-var-requires': 'error',
"error" '@typescript-eslint/prefer-for-of': 'error',
'@typescript-eslint/prefer-function-type': 'error',
'@typescript-eslint/prefer-namespace-keyword': 'error',
'@typescript-eslint/quotes': 'off',
'@typescript-eslint/semi': ['off', null],
'@typescript-eslint/triple-slash-reference': [
'error',
{
path: 'always',
types: 'prefer-import',
lib: 'always',
},
], ],
"import/no-internal-modules": "off", '@typescript-eslint/type-annotation-spacing': 'off',
"import/order": "off", '@typescript-eslint/unified-signatures': 'error',
"indent": "off", },
"jsdoc/check-alignment": "error", },
"jsdoc/check-indentation": "error",
"jsdoc/newline-after-description": "error",
"linebreak-style": "off",
"max-classes-per-file": "off",
"max-len": "off",
"new-parens": "off",
"newline-per-chained-call": "off",
"no-bitwise": "off",
"no-caller": "error",
"no-cond-assign": "error",
"no-console": "off",
"no-debugger": "error",
"no-duplicate-case": "error",
"no-duplicate-imports": "error",
"no-empty": "error",
"no-eval": "error",
"no-extra-bind": "error",
"no-extra-semi": "off",
"no-fallthrough": "off",
"no-invalid-this": "off",
"no-irregular-whitespace": "off",
"no-multiple-empty-lines": "off",
"no-new-func": "error",
"no-new-wrappers": "error",
"no-redeclare": "error",
"no-return-await": "error",
"no-sequences": "error",
"no-sparse-arrays": "error",
"no-template-curly-in-string": "error",
"no-throw-literal": "error",
"no-trailing-spaces": "off",
"no-undef-init": "error",
"no-underscore-dangle": "off",
"no-unsafe-finally": "error",
"no-unused-expressions": "off",
"no-unused-labels": "error",
"no-use-before-define": "off",
"no-var": "error",
"object-shorthand": "error",
"one-var": [
"error",
"never"
], ],
"padded-blocks": [ rules: {
"off", 'prettier/prettier': 'warn',
'arrow-parens': ['off', 'always'],
'brace-style': ['off', 'off'],
'comma-dangle': 'off',
complexity: 'off',
'constructor-super': 'error',
curly: 'error',
'dot-notation': 'off',
'eol-last': 'off',
eqeqeq: ['error', 'smart'],
'guard-for-in': 'error',
'id-blacklist': 'off',
'id-match': 'off',
'import/no-extraneous-dependencies': ['error'],
'import/no-internal-modules': 'off',
'import/order': 'off',
indent: 'off',
'jsdoc/check-alignment': 'error',
'jsdoc/check-indentation': 'error',
'jsdoc/newline-after-description': 'error',
'linebreak-style': 'off',
'max-classes-per-file': 'off',
'max-len': 'off',
'new-parens': 'off',
'newline-per-chained-call': 'off',
'no-bitwise': 'off',
'no-caller': 'error',
'no-cond-assign': 'error',
'no-console': 'off',
'no-debugger': 'error',
'no-duplicate-case': 'error',
'no-duplicate-imports': 'error',
'no-empty': 'error',
'no-eval': 'error',
'no-extra-bind': 'error',
'no-extra-semi': 'off',
'no-fallthrough': 'off',
'no-invalid-this': 'off',
'no-irregular-whitespace': 'off',
'no-multiple-empty-lines': 'off',
'no-new-func': 'error',
'no-new-wrappers': 'error',
'no-redeclare': 'error',
'no-return-await': 'error',
'no-sequences': 'error',
'no-sparse-arrays': 'error',
'no-template-curly-in-string': 'error',
'no-throw-literal': 'error',
'no-trailing-spaces': 'off',
'no-undef-init': 'error',
'no-underscore-dangle': 'off',
'no-unsafe-finally': 'error',
'no-unused-expressions': 'off',
'no-unused-labels': 'error',
'no-use-before-define': 'off',
'no-var': 'error',
'object-shorthand': 'error',
'one-var': ['error', 'never'],
'padded-blocks': [
'off',
{ {
"blocks": "never" blocks: 'never',
}, },
{ {
"allowSingleLineBlocks": true allowSingleLineBlocks: true,
} },
], ],
"prefer-arrow/prefer-arrow-functions": "error", 'prefer-arrow/prefer-arrow-functions': 'error',
"prefer-const": "error", 'prefer-const': 'error',
"prefer-object-spread": "error", 'prefer-object-spread': 'error',
"quote-props": "off", 'quote-props': 'off',
"quotes": "off", quotes: 'off',
"radix": "error", radix: 'error',
"react/jsx-curly-spacing": "off", 'react/jsx-curly-spacing': 'off',
"react/jsx-equals-spacing": "off", 'react/jsx-equals-spacing': 'off',
"react/jsx-tag-spacing": [ 'react/jsx-tag-spacing': [
"off", 'off',
{ {
"afterOpening": "allow", afterOpening: 'allow',
"closingSlash": "allow" closingSlash: 'allow',
} },
],
"react/jsx-wrap-multilines": "off",
"semi": "off",
"space-before-blocks": "error",
"space-before-function-paren": "off",
"space-in-parens": [
"off",
"never"
], ],
"unicorn/prefer-ternary": "off", 'react/jsx-wrap-multilines': 'off',
"use-isnan": "error", semi: 'off',
"valid-typeof": "off" 'space-before-blocks': 'error',
} 'space-before-function-paren': 'off',
}; 'space-in-parens': ['off', 'never'],
'unicorn/prefer-ternary': 'off',
'use-isnan': 'error',
'valid-typeof': 'off',
},
}
...@@ -32,7 +32,7 @@ jobs: ...@@ -32,7 +32,7 @@ jobs:
- name: Install Go - name: Install Go
uses: actions/setup-go@v2 uses: actions/setup-go@v2
with: with:
go-version: 1.14.x go-version: 1.15.x
- name: Checkout code - name: Checkout code
uses: actions/checkout@v2 uses: actions/checkout@v2
...@@ -47,7 +47,7 @@ jobs: ...@@ -47,7 +47,7 @@ jobs:
- name: Install Go - name: Install Go
uses: actions/setup-go@v2 uses: actions/setup-go@v2
with: with:
go-version: 1.14.x go-version: 1.15.x
- name: Checkout code - name: Checkout code
uses: actions/checkout@v2 uses: actions/checkout@v2
......
...@@ -55,6 +55,7 @@ jobs: ...@@ -55,6 +55,7 @@ jobs:
run: cat packages/contracts/gas-report.txt run: cat packages/contracts/gas-report.txt
- name: Run codechecks - name: Run codechecks
if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
working-directory: ./packages/contracts working-directory: ./packages/contracts
run: yarn codechecks run: yarn codechecks
env: env:
......
#!/bin/sh #!/bin/sh
. "$(dirname "$0")/_/husky.sh" . "$(dirname "$0")/_/husky.sh"
yarn lint:check yarn lerna run --concurrency 1 --stream pre-commit --since HEAD --exclude-dependents
module.exports = {
"$schema": "http://json.schemastore.org/prettierrc",
"trailingComma": "es5",
"tabWidth": 2,
"semi": false,
"singleQuote": true,
"arrowParens": "always"
};
...@@ -3,6 +3,16 @@ ...@@ -3,6 +3,16 @@
"editor.defaultFormatter": "dbaeumer.vscode-eslint", "editor.defaultFormatter": "dbaeumer.vscode-eslint",
"editor.formatOnSave": true, "editor.formatOnSave": true,
}, },
"eslint.workingDirectories": [
{"directory": "packages/core-utils", "changeProcessCWD": true },
{"directory": "packages/common-ts", "changeProcessCWD": true },
{"directory": "packages/hardhat-ovm", "changeProcessCWD": true },
{"directory": "packages/smock", "changeProcessCWD": true },
{"directory": "packages/contracts", "changeProcessCWD": true },
{"directory": "packages/data-transport-layer", "changeProcessCWD": true },
{"directory": "packages/batch-submitter", "changeProcessCWD": true },
{"directory": "packages/message-relayer", "changeProcessCWD": true },
],
"eslint.nodePath": "./node_modules/eslint/bin/", "eslint.nodePath": "./node_modules/eslint/bin/",
"eslint.format.enable": true, "eslint.format.enable": true,
"editorconfig.generateAuto": false, "editorconfig.generateAuto": false,
......
...@@ -37,6 +37,29 @@ Extensive documentation is available [here](http://community.optimism.io/docs/). ...@@ -37,6 +37,29 @@ Extensive documentation is available [here](http://community.optimism.io/docs/).
* [`ops`](./ops): Contains Dockerfiles for containerizing each service involved in the protocol, * [`ops`](./ops): Contains Dockerfiles for containerizing each service involved in the protocol,
as well as a docker-compose file for bringing up local testnets easily as well as a docker-compose file for bringing up local testnets easily
## Contributing
Read through [CONTRIBUTING.md](./CONTRIBUTING.md) for a general overview of our contribution process.
### Good First Issues
You can find good first issues by filtering for the ["good first issue" tag on our issues page](https://github.com/ethereum-optimism/optimism/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) or alternatively by taking a look at our [Good First Issues project board](https://github.com/orgs/ethereum-optimism/projects/23).
If you'd like to tackle one of these issues, please leave a comment and [assign yourself to the issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/assigning-issues-and-pull-requests-to-other-github-users#assigning-an-individual-issue-or-pull-request).
This helps prevent two people accidentally working on the same task at the same time.
### Changesets
We use [changesets](https://github.com/atlassian/changesets) to manage releases of our various packages.
You *must* include a `changeset` file in your PR when making a change that would require a new package release.
Adding a `changeset` file is easy:
1. Navigate to the root of the monorepo.
2. Run `yarn changeset`. You'll be prompted to select packages to include in the changeset. Use the arrow keys to move the cursor up and down, hit the `spacebar` to select a package, and hit `enter` to confirm your selection. Select *all* packages that require a new release as a result of your PR.
4. Once you hit `enter` you'll be prompted to decide whether your selected packages need a `major`, `minor`, or `patch` release. We follow the [Semantic Versioning](https://semver.org/) scheme. Please avoid using `major` releases for any packages that are still in version `0.y.z`.
5. Commit your changeset and push it into your PR. The changeset bot will notice your changeset file and leave a little comment to this effect on GitHub.
6. Voilà, c'est fini!
## Development Quick Start ## Development Quick Start
### Dependencies ### Dependencies
......
module.exports = { module.exports = {
"extends": "../.eslintrc.js" extends: '../.eslintrc.js',
} }
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"lint": "yarn lint:fix && yarn lint:check", "lint": "yarn lint:fix && yarn lint:check",
"lint:fix": "prettier --config ./.prettierrc.json --write 'test/**/*.ts'", "lint:fix": "yarn lint:check --fix",
"lint:check": "eslint -c .eslintrc.js --ext .ts --format stylish .", "lint:check": "eslint .",
"build:integration": "./scripts/build.sh", "build:integration": "./scripts/build.sh",
"build:contracts": "hardhat compile", "build:contracts": "hardhat compile",
"build:contracts:ovm": "hardhat compile --network optimism", "build:contracts:ovm": "hardhat compile --network optimism",
...@@ -34,7 +34,9 @@ ...@@ -34,7 +34,9 @@
"chai-as-promised": "^7.1.1", "chai-as-promised": "^7.1.1",
"docker-compose": "^0.23.8", "docker-compose": "^0.23.8",
"envalid": "^7.1.0", "envalid": "^7.1.0",
"babel-eslint": "^10.1.0",
"eslint": "^7.27.0", "eslint": "^7.27.0",
"eslint-plugin-prettier": "^3.4.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-ban": "^1.5.2", "eslint-plugin-ban": "^1.5.2",
"eslint-plugin-import": "^2.23.4", "eslint-plugin-import": "^2.23.4",
...@@ -48,6 +50,7 @@ ...@@ -48,6 +50,7 @@
"hardhat-gas-reporter": "^1.0.4", "hardhat-gas-reporter": "^1.0.4",
"mocha": "^8.3.1", "mocha": "^8.3.1",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"shelljs": "^0.8.4" "shelljs": "^0.8.4",
"typescript": "^4.2.3"
} }
} }
...@@ -64,7 +64,8 @@ describe('Syncing a verifier', () => { ...@@ -64,7 +64,8 @@ describe('Syncing a verifier', () => {
}) })
it('should sync dummy transaction', async () => { it('should sync dummy transaction', async () => {
const totalElementsBefore = (await env.ctc.getTotalElements()) as BigNumber const totalElementsBefore =
(await env.ctc.getTotalElements()) as BigNumber
const tx = { const tx = {
to: '0x' + '1234'.repeat(10), to: '0x' + '1234'.repeat(10),
......
...@@ -133,9 +133,10 @@ describe('Basic L1<>L2 Communication', async () => { ...@@ -133,9 +133,10 @@ describe('Basic L1<>L2 Communication', async () => {
// This call is fine but will give a status of 0. // This call is fine but will give a status of 0.
const transaction = await env.l1Messenger.sendMessage( const transaction = await env.l1Messenger.sendMessage(
predeploys.Lib_AddressManager, predeploys.Lib_AddressManager,
getContractInterface( getContractInterface('Lib_AddressManager').encodeFunctionData(
'Lib_AddressManager' 'getAddress',
).encodeFunctionData('getAddress', ['whatever']), ['whatever']
),
5000000 5000000
) )
......
...@@ -42,8 +42,10 @@ describe('Fee Payment Integration Tests', async () => { ...@@ -42,8 +42,10 @@ describe('Fee Payment Integration Tests', async () => {
other, other,
utils.parseEther('0.5') utils.parseEther('0.5')
) )
const executionGas = await (env.ovmEth const executionGas = await (env.ovmEth.provider as any).send(
.provider as any).send('eth_estimateExecutionGas', [tx, true]) 'eth_estimateExecutionGas',
[tx, true]
)
const decoded = TxGasLimit.decode(gas) const decoded = TxGasLimit.decode(gas)
expect(BigNumber.from(executionGas)).deep.eq(decoded) expect(BigNumber.from(executionGas)).deep.eq(decoded)
}) })
......
...@@ -118,8 +118,10 @@ describe('Native ETH value integration tests', () => { ...@@ -118,8 +118,10 @@ describe('Native ETH value integration tests', () => {
'geth RPC does not match OVM_ETH.balanceOf' 'geth RPC does not match OVM_ETH.balanceOf'
) )
// query address(this).balance solidity via eth_call as final check // query address(this).balance solidity via eth_call as final check
const ovmAddressThisBalance0 = await ValueCalls0.callStatic.getAddressThisBalance() const ovmAddressThisBalance0 =
const ovmAddressThisBalance01 = await ValueCalls1.callStatic.getAddressThisBalance() await ValueCalls0.callStatic.getAddressThisBalance()
const ovmAddressThisBalance01 =
await ValueCalls1.callStatic.getAddressThisBalance()
expect(ovmAddressThisBalance0).to.deep.eq( expect(ovmAddressThisBalance0).to.deep.eq(
BigNumber.from(expectedBalances[0]), BigNumber.from(expectedBalances[0]),
'geth RPC does not match address(this).balance' 'geth RPC does not match address(this).balance'
...@@ -251,20 +253,16 @@ describe('Native ETH value integration tests', () => { ...@@ -251,20 +253,16 @@ describe('Native ETH value integration tests', () => {
const sendAmount = 10 const sendAmount = 10
const [ const [outerSuccess, outerReturndata] =
outerSuccess, await ValueCalls0.callStatic.sendWithData(
outerReturndata,
] = await ValueCalls0.callStatic.sendWithData(
ValueCalls1.address, ValueCalls1.address,
sendAmount, sendAmount,
ValueCalls1.interface.encodeFunctionData('delegateCallToCallValue', [ ValueCalls1.interface.encodeFunctionData('delegateCallToCallValue', [
ValueContext.address, ValueContext.address,
]) ])
) )
const [ const [innerSuccess, innerReturndata] =
innerSuccess, ValueCalls1.interface.decodeFunctionResult(
innerReturndata,
] = ValueCalls1.interface.decodeFunctionResult(
'delegateCallToCallValue', 'delegateCallToCallValue',
outerReturndata outerReturndata
) )
...@@ -286,10 +284,8 @@ describe('Native ETH value integration tests', () => { ...@@ -286,10 +284,8 @@ describe('Native ETH value integration tests', () => {
const ValueContext = await Factory__ValueContext.deploy() const ValueContext = await Factory__ValueContext.deploy()
await ValueContext.deployTransaction.wait() await ValueContext.deployTransaction.wait()
const [ const [delegatedSuccess, delegatedReturndata] =
delegatedSuccess, await ValueCalls0.callStatic.delegateCallToAddressThisBalance(
delegatedReturndata,
] = await ValueCalls0.callStatic.delegateCallToAddressThisBalance(
ValueContext.address ValueContext.address
) )
...@@ -298,10 +294,8 @@ describe('Native ETH value integration tests', () => { ...@@ -298,10 +294,8 @@ describe('Native ETH value integration tests', () => {
}) })
it('should have correct address(this).balance through ovmDELEGATECALLs to same account', async () => { it('should have correct address(this).balance through ovmDELEGATECALLs to same account', async () => {
const [ const [delegatedSuccess, delegatedReturndata] =
delegatedSuccess, await ValueCalls0.callStatic.delegateCallToAddressThisBalance(
delegatedReturndata,
] = await ValueCalls0.callStatic.delegateCallToAddressThisBalance(
ValueCalls0.address ValueCalls0.address
) )
...@@ -310,18 +304,15 @@ describe('Native ETH value integration tests', () => { ...@@ -310,18 +304,15 @@ describe('Native ETH value integration tests', () => {
}) })
it('should allow delegate calls which preserve msg.value even with no balance going into the inner call', async () => { it('should allow delegate calls which preserve msg.value even with no balance going into the inner call', async () => {
const Factory__SendETHAwayAndDelegateCall: ContractFactory = await ethers.getContractFactory( const Factory__SendETHAwayAndDelegateCall: ContractFactory =
'SendETHAwayAndDelegateCall', await ethers.getContractFactory('SendETHAwayAndDelegateCall', wallet)
wallet const SendETHAwayAndDelegateCall: Contract =
) await Factory__SendETHAwayAndDelegateCall.deploy()
const SendETHAwayAndDelegateCall: Contract = await Factory__SendETHAwayAndDelegateCall.deploy()
await SendETHAwayAndDelegateCall.deployTransaction.wait() await SendETHAwayAndDelegateCall.deployTransaction.wait()
const value = 17 const value = 17
const [ const [delegatedSuccess, delegatedReturndata] =
delegatedSuccess, await SendETHAwayAndDelegateCall.callStatic.emptySelfAndDelegateCall(
delegatedReturndata,
] = await SendETHAwayAndDelegateCall.callStatic.emptySelfAndDelegateCall(
ValueCalls0.address, ValueCalls0.address,
ValueCalls0.interface.encodeFunctionData('getCallValue'), ValueCalls0.interface.encodeFunctionData('getCallValue'),
{ {
...@@ -343,8 +334,10 @@ describe('Native ETH value integration tests', () => { ...@@ -343,8 +334,10 @@ describe('Native ETH value integration tests', () => {
getContractInterface('OVM_ExecutionManager', false), getContractInterface('OVM_ExecutionManager', false),
env.l1Wallet.provider env.l1Wallet.provider
) )
const CALL_WITH_VALUE_INTRINSIC_GAS_BIGNUM = await OVM_ExecutionManager.CALL_WITH_VALUE_INTRINSIC_GAS() const CALL_WITH_VALUE_INTRINSIC_GAS_BIGNUM =
CALL_WITH_VALUE_INTRINSIC_GAS = CALL_WITH_VALUE_INTRINSIC_GAS_BIGNUM.toNumber() await OVM_ExecutionManager.CALL_WITH_VALUE_INTRINSIC_GAS()
CALL_WITH_VALUE_INTRINSIC_GAS =
CALL_WITH_VALUE_INTRINSIC_GAS_BIGNUM.toNumber()
const Factory__ValueGasMeasurer = await ethers.getContractFactory( const Factory__ValueGasMeasurer = await ethers.getContractFactory(
'ValueGasMeasurer', 'ValueGasMeasurer',
...@@ -357,7 +350,8 @@ describe('Native ETH value integration tests', () => { ...@@ -357,7 +350,8 @@ describe('Native ETH value integration tests', () => {
it('a call with value to an empty account consumes <= the intrinsic gas including a buffer', async () => { it('a call with value to an empty account consumes <= the intrinsic gas including a buffer', async () => {
const value = 1 const value = 1
const gasLimit = 1_000_000 const gasLimit = 1_000_000
const minimalSendGas = await ValueGasMeasurer.callStatic.measureGasOfTransferingEthViaCall( const minimalSendGas =
await ValueGasMeasurer.callStatic.measureGasOfTransferingEthViaCall(
ethers.constants.AddressZero, ethers.constants.AddressZero,
value, value,
gasLimit, gasLimit,
...@@ -384,7 +378,8 @@ describe('Native ETH value integration tests', () => { ...@@ -384,7 +378,8 @@ describe('Native ETH value integration tests', () => {
const value = 1 const value = 1
const gasLimit = 1_000_000 const gasLimit = 1_000_000
// A revert, causing the ETH to be sent back, should consume the minimal possible gas for a nonzero ETH send // A revert, causing the ETH to be sent back, should consume the minimal possible gas for a nonzero ETH send
const minimalSendGas = await ValueGasMeasurer.callStatic.measureGasOfTransferingEthViaCall( const minimalSendGas =
await ValueGasMeasurer.callStatic.measureGasOfTransferingEthViaCall(
AutoRevert.address, AutoRevert.address,
value, value,
gasLimit, gasLimit,
...@@ -398,18 +393,15 @@ describe('Native ETH value integration tests', () => { ...@@ -398,18 +393,15 @@ describe('Native ETH value integration tests', () => {
}) })
it('a value call passing less than the intrinsic gas should appear to revert', async () => { it('a value call passing less than the intrinsic gas should appear to revert', async () => {
const Factory__PayableConstant: ContractFactory = await ethers.getContractFactory( const Factory__PayableConstant: ContractFactory =
'PayableConstant', await ethers.getContractFactory('PayableConstant', wallet)
wallet const PayableConstant: Contract =
) await Factory__PayableConstant.deploy()
const PayableConstant: Contract = await Factory__PayableConstant.deploy()
await PayableConstant.deployTransaction.wait() await PayableConstant.deployTransaction.wait()
const sendAmount = 15 const sendAmount = 15
const [ const [success, returndata] =
success, await ValueCalls0.callStatic.sendWithDataAndGas(
returndata,
] = await ValueCalls0.callStatic.sendWithDataAndGas(
PayableConstant.address, PayableConstant.address,
sendAmount, sendAmount,
PayableConstant.interface.encodeFunctionData('returnValue'), PayableConstant.interface.encodeFunctionData('returnValue'),
...@@ -424,19 +416,15 @@ describe('Native ETH value integration tests', () => { ...@@ -424,19 +416,15 @@ describe('Native ETH value integration tests', () => {
}) })
it('a value call which runs out of gas does not out-of-gas the parent', async () => { it('a value call which runs out of gas does not out-of-gas the parent', async () => {
const Factory__TestOOG: ContractFactory = await ethers.getContractFactory( const Factory__TestOOG: ContractFactory =
'TestOOG', await ethers.getContractFactory('TestOOG', wallet)
wallet
)
const TestOOG: Contract = await Factory__TestOOG.deploy() const TestOOG: Contract = await Factory__TestOOG.deploy()
await TestOOG.deployTransaction.wait() await TestOOG.deployTransaction.wait()
const sendAmount = 15 const sendAmount = 15
// Implicitly test that this call is not rejected // Implicitly test that this call is not rejected
const [ const [success, returndata] =
success, await ValueCalls0.callStatic.sendWithDataAndGas(
returndata,
] = await ValueCalls0.callStatic.sendWithDataAndGas(
TestOOG.address, TestOOG.address,
sendAmount, sendAmount,
TestOOG.interface.encodeFunctionData('runOutOfGas'), TestOOG.interface.encodeFunctionData('runOutOfGas'),
......
...@@ -57,7 +57,7 @@ describe('Native ETH Integration Tests', async () => { ...@@ -57,7 +57,7 @@ describe('Native ETH Integration Tests', async () => {
const addr = '0x' + '1234'.repeat(10) const addr = '0x' + '1234'.repeat(10)
const gas = await env.ovmEth.estimateGas.transfer(addr, amount) const gas = await env.ovmEth.estimateGas.transfer(addr, amount)
// Expect gas to be less than or equal to the target plus 1% // Expect gas to be less than or equal to the target plus 1%
expectApprox(gas, 6430020, 1) expectApprox(gas, 6430020, { upperPercentDeviation: 1 })
}) })
it('Should estimate gas for ETH withdraw', async () => { it('Should estimate gas for ETH withdraw', async () => {
...@@ -69,7 +69,7 @@ describe('Native ETH Integration Tests', async () => { ...@@ -69,7 +69,7 @@ describe('Native ETH Integration Tests', async () => {
'0xFFFF' '0xFFFF'
) )
// Expect gas to be less than or equal to the target plus 1% // Expect gas to be less than or equal to the target plus 1%
expectApprox(gas, 6700060, 1) expectApprox(gas, 6700060, { upperPercentDeviation: 1 })
}) })
}) })
...@@ -325,12 +325,8 @@ describe('Native ETH Integration Tests', async () => { ...@@ -325,12 +325,8 @@ describe('Native ETH Integration Tests', async () => {
expect(receipt.events.length).to.equal(4) expect(receipt.events.length).to.equal(4)
// The first transfer event is fee payment // The first transfer event is fee payment
const [ const [, firstTransferEvent, secondTransferEvent, depositEvent] =
, receipt.events
firstTransferEvent,
secondTransferEvent,
depositEvent,
] = receipt.events
expect(firstTransferEvent.event).to.equal('Transfer') expect(firstTransferEvent.event).to.equal('Transfer')
expect(firstTransferEvent.args.from).to.equal(env.l2Wallet.address) expect(firstTransferEvent.args.from).to.equal(env.l2Wallet.address)
......
...@@ -49,9 +49,8 @@ describe('OVM Context: Layer 2 EVM Context', () => { ...@@ -49,9 +49,8 @@ describe('OVM Context: Layer 2 EVM Context', () => {
'OVM_CanonicalTransactionChain' 'OVM_CanonicalTransactionChain'
) )
CanonicalTransactionChain = CanonicalTransactionChainFactory.connect( CanonicalTransactionChain =
l1Wallet CanonicalTransactionChainFactory.connect(l1Wallet).attach(ctcAddress)
).attach(ctcAddress)
const OVMMulticallFactory = await ethers.getContractFactory( const OVMMulticallFactory = await ethers.getContractFactory(
'OVMMulticall', 'OVMMulticall',
......
...@@ -208,10 +208,8 @@ describe('Basic RPC tests', () => { ...@@ -208,10 +208,8 @@ describe('Basic RPC tests', () => {
it('should allow eth_calls with nonzero value', async () => { it('should allow eth_calls with nonzero value', async () => {
// Deploy a contract to check msg.value of the call // Deploy a contract to check msg.value of the call
const Factory__ValueContext: ContractFactory = await ethers.getContractFactory( const Factory__ValueContext: ContractFactory =
'ValueContext', await ethers.getContractFactory('ValueContext', wallet)
wallet
)
const ValueContext: Contract = await Factory__ValueContext.deploy() const ValueContext: Contract = await Factory__ValueContext.deploy()
await ValueContext.deployTransaction.wait() await ValueContext.deployTransaction.wait()
...@@ -378,7 +376,7 @@ describe('Basic RPC tests', () => { ...@@ -378,7 +376,7 @@ describe('Basic RPC tests', () => {
value: 0, value: 0,
}) })
// Expect gas to be less than or equal to the target plus 1% // Expect gas to be less than or equal to the target plus 1%
expectApprox(estimate, 5920012, 1) expectApprox(estimate, 5920012, { upperPercentDeviation: 1 })
}) })
it('should return a gas estimate that grows with the size of data', async () => { it('should return a gas estimate that grows with the size of data', async () => {
...@@ -429,12 +427,12 @@ describe('Basic RPC tests', () => { ...@@ -429,12 +427,12 @@ describe('Basic RPC tests', () => {
describe('rollup_gasPrices', () => { describe('rollup_gasPrices', () => {
it('should return the L1 and L2 gas prices', async () => { it('should return the L1 and L2 gas prices', async () => {
const result = await provider.send('rollup_gasPrices', []); const result = await provider.send('rollup_gasPrices', [])
const l1GasPrice = await env.l1Wallet.provider.getGasPrice() const l1GasPrice = await env.l1Wallet.provider.getGasPrice()
const l2GasPrice = await env.gasPriceOracle.gasPrice() const l2GasPrice = await env.gasPriceOracle.gasPrice()
expect(BigNumber.from(result.l1GasPrice)).to.deep.eq(l1GasPrice) expect(BigNumber.from(result.l1GasPrice)).to.deep.eq(l1GasPrice)
expect((BigNumber.from(result.l2GasPrice))).to.deep.eq(l2GasPrice) expect(BigNumber.from(result.l2GasPrice)).to.deep.eq(l2GasPrice)
}) })
}) })
}) })
const { DockerComposeNetwork } = require("./shared/docker-compose") const { DockerComposeNetwork } = require('./shared/docker-compose')
before(async () => { before(async () => {
if (!process.env.NO_NETWORK) { if (!process.env.NO_NETWORK) {
......
...@@ -142,35 +142,39 @@ export const DEFAULT_TRANSACTION = { ...@@ -142,35 +142,39 @@ export const DEFAULT_TRANSACTION = {
value: 0, value: 0,
} }
interface percentDeviationRange {
upperPercentDeviation: number
lowerPercentDeviation?: number
}
export const expectApprox = ( export const expectApprox = (
actual: BigNumber | number, actual: BigNumber | number,
target: BigNumber | number, target: BigNumber | number,
upperDeviation: number, { upperPercentDeviation, lowerPercentDeviation = 100 }: percentDeviationRange
lowerDeviation: number = 100
) => { ) => {
actual = BigNumber.from(actual) actual = BigNumber.from(actual)
target = BigNumber.from(target) target = BigNumber.from(target)
const validDeviations = const validDeviations =
upperDeviation >= 0 && upperPercentDeviation >= 0 &&
upperDeviation <= 100 && upperPercentDeviation <= 100 &&
lowerDeviation >= 0 && lowerPercentDeviation >= 0 &&
lowerDeviation <= 100 lowerPercentDeviation <= 100
if (!validDeviations) { if (!validDeviations) {
throw new Error( throw new Error(
'Upper and lower deviation percentage arguments should be between 0 and 100' 'Upper and lower deviation percentage arguments should be between 0 and 100'
) )
} }
const upper = target.mul(100 + upperDeviation).div(100) const upper = target.mul(100 + upperPercentDeviation).div(100)
const lower = target.mul(100 - lowerDeviation).div(100) const lower = target.mul(100 - lowerPercentDeviation).div(100)
expect( expect(
actual.lte(upper), actual.lte(upper),
`Actual value is more than ${upperDeviation}% greater than target` `Actual value is more than ${upperPercentDeviation}% greater than target`
).to.be.true ).to.be.true
expect( expect(
actual.gte(lower), actual.gte(lower),
`Actual value is more than ${lowerDeviation}% less than target` `Actual value is more than ${lowerPercentDeviation}% less than target`
).to.be.true ).to.be.true
} }
......
...@@ -24,6 +24,10 @@ const ( ...@@ -24,6 +24,10 @@ const (
// found. It applies to transactions, queue elements and batches // found. It applies to transactions, queue elements and batches
var errElementNotFound = errors.New("element not found") var errElementNotFound = errors.New("element not found")
// errHttpError represents the error case of when the remote server
// returns a 400 or greater error
var errHTTPError = errors.New("http error")
// Batch represents the data structure that is submitted with // Batch represents the data structure that is submitted with
// a series of transactions to layer one // a series of transactions to layer one
type Batch struct { type Batch struct {
...@@ -154,6 +158,15 @@ func NewClient(url string, chainID *big.Int) *Client { ...@@ -154,6 +158,15 @@ func NewClient(url string, chainID *big.Int) *Client {
client := resty.New() client := resty.New()
client.SetHostURL(url) client.SetHostURL(url)
client.SetHeader("User-Agent", "sequencer") client.SetHeader("User-Agent", "sequencer")
client.OnAfterResponse(func(c *resty.Client, r *resty.Response) error {
statusCode := r.StatusCode()
if statusCode >= 400 {
method := r.Request.Method
url := r.Request.URL
return fmt.Errorf("%d cannot %s %s: %w", statusCode, method, url, errHTTPError)
}
return nil
})
signer := types.NewEIP155Signer(chainID) signer := types.NewEIP155Signer(chainID)
return &Client{ return &Client{
......
package rollup package rollup
import ( import (
"errors"
"fmt" "fmt"
"math/big" "math/big"
"testing" "testing"
...@@ -8,8 +9,9 @@ import ( ...@@ -8,8 +9,9 @@ import (
"github.com/jarcoal/httpmock" "github.com/jarcoal/httpmock"
) )
const url = "http://localhost:9999"
func TestRollupClientGetL1GasPrice(t *testing.T) { func TestRollupClientGetL1GasPrice(t *testing.T) {
url := "http://localhost:9999"
endpoint := fmt.Sprintf("%s/eth/gasprice", url) endpoint := fmt.Sprintf("%s/eth/gasprice", url)
// url/chain-id does not matter, we'll mock the responses // url/chain-id does not matter, we'll mock the responses
client := NewClient(url, big.NewInt(1)) client := NewClient(url, big.NewInt(1))
...@@ -41,3 +43,28 @@ func TestRollupClientGetL1GasPrice(t *testing.T) { ...@@ -41,3 +43,28 @@ func TestRollupClientGetL1GasPrice(t *testing.T) {
t.Fatal("gasPrice is not parsed properly in the client") t.Fatal("gasPrice is not parsed properly in the client")
} }
} }
func TestRollupClientCannotConnect(t *testing.T) {
endpoint := fmt.Sprintf("%s/eth/context/latest", url)
client := NewClient(url, big.NewInt(1))
httpmock.ActivateNonDefault(client.client.GetClient())
response, _ := httpmock.NewJsonResponder(
400,
map[string]interface{}{},
)
httpmock.RegisterResponder(
"GET",
endpoint,
response,
)
context, err := client.GetLatestEthContext()
if context != nil {
t.Fatal("returned value is not nil")
}
if !errors.Is(err, errHTTPError) {
t.Fatalf("Incorrect error returned: %s", err)
}
}
...@@ -128,22 +128,29 @@ func NewSyncService(ctx context.Context, cfg Config, txpool *core.TxPool, bc *co ...@@ -128,22 +128,29 @@ func NewSyncService(ctx context.Context, cfg Config, txpool *core.TxPool, bc *co
// requirement of the remote server being up. // requirement of the remote server being up.
if service.enable { if service.enable {
// Ensure that the rollup client can connect to a remote server // Ensure that the rollup client can connect to a remote server
// before starting. // before starting. Retry until it can connect.
tEnsure := time.NewTicker(10 * time.Second)
for ; true; <-tEnsure.C {
err := service.ensureClient() err := service.ensureClient()
if err != nil { if err != nil {
return nil, fmt.Errorf("Rollup client unable to connect: %w", err) log.Info("Cannot connect to upstream service", "msg", err)
} else {
log.Info("Connected to upstream service")
tEnsure.Stop()
break
}
} }
// Wait until the remote service is done syncing // Wait until the remote service is done syncing
t := time.NewTicker(10 * time.Second) tStatus := time.NewTicker(10 * time.Second)
for ; true; <-t.C { for ; true; <-tStatus.C {
status, err := service.client.SyncStatus(service.backend) status, err := service.client.SyncStatus(service.backend)
if err != nil { if err != nil {
log.Error("Cannot get sync status") log.Error("Cannot get sync status")
continue continue
} }
if !status.Syncing { if !status.Syncing {
t.Stop() tStatus.Stop()
break break
} }
log.Info("Still syncing", "index", status.CurrentTransactionIndex, "tip", status.HighestKnownTransactionIndex) log.Info("Still syncing", "index", status.CurrentTransactionIndex, "tip", status.HighestKnownTransactionIndex)
...@@ -153,7 +160,7 @@ func NewSyncService(ctx context.Context, cfg Config, txpool *core.TxPool, bc *co ...@@ -153,7 +160,7 @@ func NewSyncService(ctx context.Context, cfg Config, txpool *core.TxPool, bc *co
// it happens before the RPC endpoints open up // it happens before the RPC endpoints open up
// Only do it if the sync service is enabled so that this // Only do it if the sync service is enabled so that this
// can be ran without needing to have a configured RollupClient. // can be ran without needing to have a configured RollupClient.
err = service.initializeLatestL1(cfg.CanonicalTransactionChainDeployHeight) err := service.initializeLatestL1(cfg.CanonicalTransactionChainDeployHeight)
if err != nil { if err != nil {
return nil, fmt.Errorf("Cannot initialize latest L1 data: %w", err) return nil, fmt.Errorf("Cannot initialize latest L1 data: %w", err)
} }
......
# Build Geth in a stock Go builder container # Build Geth in a stock Go builder container
FROM golang:1.15-alpine as builder FROM golang:1.15-alpine3.13 as builder
RUN apk add --no-cache make gcc musl-dev linux-headers git RUN apk add --no-cache make gcc musl-dev linux-headers git
...@@ -7,7 +7,7 @@ ADD ./l2geth /go-ethereum ...@@ -7,7 +7,7 @@ ADD ./l2geth /go-ethereum
RUN cd /go-ethereum && make geth RUN cd /go-ethereum && make geth
# Pull Geth into a second stage deploy alpine container # Pull Geth into a second stage deploy alpine container
FROM alpine:latest FROM alpine:3.13
RUN apk add --no-cache ca-certificates jq curl RUN apk add --no-cache ca-certificates jq curl
COPY --from=builder /go-ethereum/build/bin/geth /usr/local/bin/ COPY --from=builder /go-ethereum/build/bin/geth /usr/local/bin/
......
...@@ -16,9 +16,23 @@ ...@@ -16,9 +16,23 @@
}, },
"private": true, "private": true,
"devDependencies": { "devDependencies": {
"@typescript-eslint/eslint-plugin": "^4.26.0",
"@typescript-eslint/parser": "^4.26.0",
"babel-eslint": "^10.1.0",
"eslint": "^7.27.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-ban": "^1.5.2",
"eslint-plugin-import": "^2.23.4",
"eslint-plugin-jsdoc": "^35.1.2",
"eslint-plugin-prefer-arrow": "^1.2.3",
"eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-react": "^7.24.0",
"eslint-plugin-unicorn": "^32.0.1",
"husky": "^6.0.0", "husky": "^6.0.0",
"lerna": "^4.0.0", "lerna": "^4.0.0",
"patch-package": "^6.4.7" "patch-package": "^6.4.7",
"prettier": "^2.3.1",
"typescript": "^4.2.3"
}, },
"scripts": { "scripts": {
"clean": "yarn lerna run clean", "clean": "yarn lerna run clean",
......
module.exports = { module.exports = {
"extends": "../../.eslintrc.js" extends: '../../.eslintrc.js',
} }
module.exports = {
...require('../../.prettierrc.js'),
};
\ No newline at end of file
../../.prettierrc.json
\ No newline at end of file
#!/usr/bin/env node #!/usr/bin/env node
const batchSubmitter = require("../dist/src/exec/run-batch-submitter") const batchSubmitter = require('../dist/src/exec/run-batch-submitter')
batchSubmitter.run() batchSubmitter.run()
...@@ -13,8 +13,9 @@ ...@@ -13,8 +13,9 @@
"build": "tsc -p ./tsconfig.build.json", "build": "tsc -p ./tsconfig.build.json",
"clean": "rimraf cache/ dist/ ./tsconfig.build.tsbuildinfo", "clean": "rimraf cache/ dist/ ./tsconfig.build.tsbuildinfo",
"lint": "yarn lint:fix && yarn lint:check", "lint": "yarn lint:fix && yarn lint:check",
"lint:fix": "prettier --config .prettierrc.json --write \"hardhat.config.ts\" \"{src,exec,test}/**/*.ts\"", "pre-commit": "lint-staged",
"lint:check": "eslint -c .eslintrc.js --ext .ts --format stylish .", "lint:fix": "yarn lint:check --fix",
"lint:check": "eslint .",
"test": "hardhat test --show-stack-traces" "test": "hardhat test --show-stack-traces"
}, },
"keywords": [ "keywords": [
...@@ -60,7 +61,9 @@ ...@@ -60,7 +61,9 @@
"@typescript-eslint/eslint-plugin": "^4.26.0", "@typescript-eslint/eslint-plugin": "^4.26.0",
"@typescript-eslint/parser": "^4.26.0", "@typescript-eslint/parser": "^4.26.0",
"chai": "^4.2.0", "chai": "^4.2.0",
"babel-eslint": "^10.1.0",
"eslint": "^7.27.0", "eslint": "^7.27.0",
"eslint-plugin-prettier": "^3.4.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-ban": "^1.5.2", "eslint-plugin-ban": "^1.5.2",
"eslint-plugin-import": "^2.23.4", "eslint-plugin-import": "^2.23.4",
...@@ -73,6 +76,7 @@ ...@@ -73,6 +76,7 @@
"hardhat": "^2.2.1", "hardhat": "^2.2.1",
"mocha": "^6.1.4", "mocha": "^6.1.4",
"prettier": "^2.2.1", "prettier": "^2.2.1",
"lint-staged": "11.0.0",
"rimraf": "^2.6.3", "rimraf": "^2.6.3",
"sinon": "^9.2.4", "sinon": "^9.2.4",
"sinon-chai": "^3.5.0", "sinon-chai": "^3.5.0",
......
...@@ -3,11 +3,11 @@ import { Contract, Signer, utils, providers } from 'ethers' ...@@ -3,11 +3,11 @@ import { Contract, Signer, utils, providers } from 'ethers'
import { TransactionReceipt } from '@ethersproject/abstract-provider' import { TransactionReceipt } from '@ethersproject/abstract-provider'
import { Gauge, Histogram, Counter } from 'prom-client' import { Gauge, Histogram, Counter } from 'prom-client'
import * as ynatm from '@eth-optimism/ynatm' import * as ynatm from '@eth-optimism/ynatm'
import { RollupInfo } from '@eth-optimism/core-utils' import { RollupInfo, sleep } from '@eth-optimism/core-utils'
import { Logger, Metrics } from '@eth-optimism/common-ts' import { Logger, Metrics } from '@eth-optimism/common-ts'
import { getContractFactory } from 'old-contracts' import { getContractFactory } from 'old-contracts'
export interface Range { export interface BlockRange {
start: number start: number
end: number end: number
} }
...@@ -65,7 +65,7 @@ export abstract class BatchSubmitter { ...@@ -65,7 +65,7 @@ export abstract class BatchSubmitter {
endBlock: number endBlock: number
): Promise<TransactionReceipt> ): Promise<TransactionReceipt>
public abstract _onSync(): Promise<TransactionReceipt> public abstract _onSync(): Promise<TransactionReceipt>
public abstract _getBatchStartAndEnd(): Promise<Range> public abstract _getBatchStartAndEnd(): Promise<BlockRange>
public abstract _updateChainInfo(): Promise<void> public abstract _updateChainInfo(): Promise<void>
public async submitNextBatch(): Promise<TransactionReceipt> { public async submitNextBatch(): Promise<TransactionReceipt> {
...@@ -73,7 +73,11 @@ export abstract class BatchSubmitter { ...@@ -73,7 +73,11 @@ export abstract class BatchSubmitter {
this.l2ChainId = await this._getL2ChainId() this.l2ChainId = await this._getL2ChainId()
} }
await this._updateChainInfo() await this._updateChainInfo()
await this._checkBalance()
if (!(await this._hasEnoughETHToCoverGasCosts())) {
await sleep(this.resubmissionTimeout)
return
}
this.logger.info('Readying to submit next batch...', { this.logger.info('Readying to submit next batch...', {
l2ChainId: this.l2ChainId, l2ChainId: this.l2ChainId,
...@@ -94,7 +98,7 @@ export abstract class BatchSubmitter { ...@@ -94,7 +98,7 @@ export abstract class BatchSubmitter {
return this._submitBatch(range.start, range.end) return this._submitBatch(range.start, range.end)
} }
protected async _checkBalance(): Promise<void> { protected async _hasEnoughETHToCoverGasCosts(): Promise<boolean> {
const address = await this.signer.getAddress() const address = await this.signer.getAddress()
const balance = await this.signer.getBalance() const balance = await this.signer.getBalance()
const ether = utils.formatEther(balance) const ether = utils.formatEther(balance)
...@@ -104,6 +108,7 @@ export abstract class BatchSubmitter { ...@@ -104,6 +108,7 @@ export abstract class BatchSubmitter {
address, address,
ether, ether,
}) })
this.metrics.batchSubmitterETHBalance.set(num) this.metrics.batchSubmitterETHBalance.set(num)
if (num < this.minBalanceEther) { if (num < this.minBalanceEther) {
...@@ -111,7 +116,10 @@ export abstract class BatchSubmitter { ...@@ -111,7 +116,10 @@ export abstract class BatchSubmitter {
current: num, current: num,
safeBalance: this.minBalanceEther, safeBalance: this.minBalanceEther,
}) })
return false
} }
return true
} }
protected async _getRollupInfo(): Promise<RollupInfo> { protected async _getRollupInfo(): Promise<RollupInfo> {
......
...@@ -12,7 +12,7 @@ import { ...@@ -12,7 +12,7 @@ import {
import { Logger, Metrics } from '@eth-optimism/common-ts' import { Logger, Metrics } from '@eth-optimism/common-ts'
/* Internal Imports */ /* Internal Imports */
import { Range, BatchSubmitter } from '.' import { BlockRange, BatchSubmitter } from '.'
export class StateBatchSubmitter extends BatchSubmitter { export class StateBatchSubmitter extends BatchSubmitter {
// TODO: Change this so that we calculate start = scc.totalElements() and end = ctc.totalElements()! // TODO: Change this so that we calculate start = scc.totalElements() and end = ctc.totalElements()!
...@@ -116,7 +116,7 @@ export class StateBatchSubmitter extends BatchSubmitter { ...@@ -116,7 +116,7 @@ export class StateBatchSubmitter extends BatchSubmitter {
return return
} }
public async _getBatchStartAndEnd(): Promise<Range> { public async _getBatchStartAndEnd(): Promise<BlockRange> {
this.logger.info('Getting batch start and end for state batch submitter...') this.logger.info('Getting batch start and end for state batch submitter...')
const startBlock: number = const startBlock: number =
(await this.chainContract.getTotalElements()).toNumber() + (await this.chainContract.getTotalElements()).toNumber() +
......
...@@ -21,7 +21,7 @@ import { ...@@ -21,7 +21,7 @@ import {
AppendSequencerBatchParams, AppendSequencerBatchParams,
} from '../transaction-chain-contract' } from '../transaction-chain-contract'
import { Range, BatchSubmitter } from '.' import { BlockRange, BatchSubmitter } from '.'
export interface AutoFixBatchOptions { export interface AutoFixBatchOptions {
fixDoublePlayedDeposits: boolean fixDoublePlayedDeposits: boolean
...@@ -127,7 +127,8 @@ export class TransactionBatchSubmitter extends BatchSubmitter { ...@@ -127,7 +127,8 @@ export class TransactionBatchSubmitter extends BatchSubmitter {
} }
public async _onSync(): Promise<TransactionReceipt> { public async _onSync(): Promise<TransactionReceipt> {
const pendingQueueElements = await this.chainContract.getNumPendingQueueElements() const pendingQueueElements =
await this.chainContract.getNumPendingQueueElements()
this.logger.debug('Got number of pending queue elements', { this.logger.debug('Got number of pending queue elements', {
pendingQueueElements, pendingQueueElements,
}) })
...@@ -173,7 +174,7 @@ export class TransactionBatchSubmitter extends BatchSubmitter { ...@@ -173,7 +174,7 @@ export class TransactionBatchSubmitter extends BatchSubmitter {
return return
} }
public async _getBatchStartAndEnd(): Promise<Range> { public async _getBatchStartAndEnd(): Promise<BlockRange> {
this.logger.info( this.logger.info(
'Getting batch start and end for transaction batch submitter...' 'Getting batch start and end for transaction batch submitter...'
) )
...@@ -228,10 +229,8 @@ export class TransactionBatchSubmitter extends BatchSubmitter { ...@@ -228,10 +229,8 @@ export class TransactionBatchSubmitter extends BatchSubmitter {
return return
} }
const [ const [batchParams, wasBatchTruncated] =
batchParams, await this._generateSequencerBatchParams(startBlock, endBlock)
wasBatchTruncated,
] = await this._generateSequencerBatchParams(startBlock, endBlock)
const batchSizeInBytes = encodeAppendSequencerBatch(batchParams).length / 2 const batchSizeInBytes = encodeAppendSequencerBatch(batchParams).length / 2
this.logger.debug('Sequencer batch generated', { this.logger.debug('Sequencer batch generated', {
batchSizeInBytes, batchSizeInBytes,
...@@ -390,11 +389,8 @@ export class TransactionBatchSubmitter extends BatchSubmitter { ...@@ -390,11 +389,8 @@ export class TransactionBatchSubmitter extends BatchSubmitter {
} }
let isEqual = true let isEqual = true
const [ const [queueEleHash, timestamp, blockNumber] =
queueEleHash, await this.chainContract.getQueueElement(queueIndex)
timestamp,
blockNumber,
] = await this.chainContract.getQueueElement(queueIndex)
// TODO: Verify queue element hash equality. The queue element hash can be computed with: // TODO: Verify queue element hash equality. The queue element hash can be computed with:
// keccak256( abi.encode( msg.sender, _target, _gasLimit, _data)) // keccak256( abi.encode( msg.sender, _target, _gasLimit, _data))
...@@ -458,19 +454,18 @@ export class TransactionBatchSubmitter extends BatchSubmitter { ...@@ -458,19 +454,18 @@ export class TransactionBatchSubmitter extends BatchSubmitter {
for (const ele of b) { for (const ele of b) {
// Look for skipped deposits // Look for skipped deposits
while (true) { while (true) {
const pendingQueueElements = await this.chainContract.getNumPendingQueueElements() const pendingQueueElements =
const nextRemoteQueueElements = await this.chainContract.getNextQueueIndex() await this.chainContract.getNumPendingQueueElements()
const nextRemoteQueueElements =
await this.chainContract.getNextQueueIndex()
const totalQueueElements = const totalQueueElements =
pendingQueueElements + nextRemoteQueueElements pendingQueueElements + nextRemoteQueueElements
// No more queue elements so we clearly haven't skipped anything // No more queue elements so we clearly haven't skipped anything
if (nextQueueIndex >= totalQueueElements) { if (nextQueueIndex >= totalQueueElements) {
break break
} }
const [ const [queueEleHash, timestamp, blockNumber] =
queueEleHash, await this.chainContract.getQueueElement(nextQueueIndex)
timestamp,
blockNumber,
] = await this.chainContract.getQueueElement(nextQueueIndex)
if (timestamp < ele.timestamp || blockNumber < ele.blockNumber) { if (timestamp < ele.timestamp || blockNumber < ele.blockNumber) {
this.logger.warn('Fixing skipped deposit', { this.logger.warn('Fixing skipped deposit', {
...@@ -506,10 +501,8 @@ export class TransactionBatchSubmitter extends BatchSubmitter { ...@@ -506,10 +501,8 @@ export class TransactionBatchSubmitter extends BatchSubmitter {
const fixMonotonicity = async (b: Batch): Promise<Batch> => { const fixMonotonicity = async (b: Batch): Promise<Batch> => {
this.logger.debug('Fixing monotonicity...') this.logger.debug('Fixing monotonicity...')
// The earliest allowed timestamp/blockNumber is the last timestamp submitted on chain. // The earliest allowed timestamp/blockNumber is the last timestamp submitted on chain.
const { const { lastTimestamp, lastBlockNumber } =
lastTimestamp, await this._getLastTimestampAndBlockNumber()
lastBlockNumber,
} = await this._getLastTimestampAndBlockNumber()
let earliestTimestamp = lastTimestamp let earliestTimestamp = lastTimestamp
let earliestBlockNumber = lastBlockNumber let earliestBlockNumber = lastBlockNumber
this.logger.debug('Determined earliest timestamp and blockNumber', { this.logger.debug('Determined earliest timestamp and blockNumber', {
...@@ -525,16 +518,15 @@ export class TransactionBatchSubmitter extends BatchSubmitter { ...@@ -525,16 +518,15 @@ export class TransactionBatchSubmitter extends BatchSubmitter {
// updateLatestTimestampAndBlockNumber is a helper which updates // updateLatestTimestampAndBlockNumber is a helper which updates
// the latest timestamp and block number based on the pending queue elements. // the latest timestamp and block number based on the pending queue elements.
const updateLatestTimestampAndBlockNumber = async () => { const updateLatestTimestampAndBlockNumber = async () => {
const pendingQueueElements = await this.chainContract.getNumPendingQueueElements() const pendingQueueElements =
const nextRemoteQueueElements = await this.chainContract.getNextQueueIndex() await this.chainContract.getNumPendingQueueElements()
const nextRemoteQueueElements =
await this.chainContract.getNextQueueIndex()
const totalQueueElements = const totalQueueElements =
pendingQueueElements + nextRemoteQueueElements pendingQueueElements + nextRemoteQueueElements
if (nextQueueIndex < totalQueueElements) { if (nextQueueIndex < totalQueueElements) {
const [ const [queueEleHash, queueTimestamp, queueBlockNumber] =
queueEleHash, await this.chainContract.getQueueElement(nextQueueIndex)
queueTimestamp,
queueBlockNumber,
] = await this.chainContract.getQueueElement(nextQueueIndex)
latestTimestamp = queueTimestamp latestTimestamp = queueTimestamp
latestBlockNumber = queueBlockNumber latestBlockNumber = queueBlockNumber
} else { } else {
...@@ -652,11 +644,8 @@ export class TransactionBatchSubmitter extends BatchSubmitter { ...@@ -652,11 +644,8 @@ export class TransactionBatchSubmitter extends BatchSubmitter {
queueIndex: number, queueIndex: number,
queueElement: BatchElement queueElement: BatchElement
): Promise<BatchElement> { ): Promise<BatchElement> {
const [ const [queueEleHash, timestamp, blockNumber] =
queueEleHash, await this.chainContract.getQueueElement(queueIndex)
timestamp,
blockNumber,
] = await this.chainContract.getQueueElement(queueIndex)
if ( if (
timestamp > queueElement.timestamp && timestamp > queueElement.timestamp &&
......
...@@ -152,7 +152,8 @@ describe('BatchSubmitter', () => { ...@@ -152,7 +152,8 @@ describe('BatchSubmitter', () => {
let OVM_StateCommitmentChain: Contract let OVM_StateCommitmentChain: Contract
let l2Provider: MockchainProvider let l2Provider: MockchainProvider
beforeEach(async () => { beforeEach(async () => {
const unwrapped_OVM_CanonicalTransactionChain = await Factory__OVM_CanonicalTransactionChain.deploy( const unwrapped_OVM_CanonicalTransactionChain =
await Factory__OVM_CanonicalTransactionChain.deploy(
AddressManager.address, AddressManager.address,
FORCE_INCLUSION_PERIOD_SECONDS FORCE_INCLUSION_PERIOD_SECONDS
) )
...@@ -169,7 +170,8 @@ describe('BatchSubmitter', () => { ...@@ -169,7 +170,8 @@ describe('BatchSubmitter', () => {
sequencer sequencer
) )
const unwrapped_OVM_StateCommitmentChain = await Factory__OVM_StateCommitmentChain.deploy( const unwrapped_OVM_StateCommitmentChain =
await Factory__OVM_StateCommitmentChain.deploy(
AddressManager.address, AddressManager.address,
0, // fraudProofWindowSeconds 0, // fraudProofWindowSeconds
0 // sequencerPublishWindowSeconds 0 // sequencerPublishWindowSeconds
......
...@@ -4,4 +4,3 @@ ...@@ -4,4 +4,3 @@
"resolveJsonModule": true "resolveJsonModule": true
} }
} }
\ No newline at end of file
module.exports = { module.exports = {
"extends": "../../.eslintrc.js" extends: '../../.eslintrc.js',
} }
module.exports = {
...require('../../.prettierrc.js'),
};
\ No newline at end of file
../../.prettierrc.json
\ No newline at end of file
...@@ -12,9 +12,10 @@ ...@@ -12,9 +12,10 @@
"all": "yarn clean && yarn build && yarn test && yarn lint:fix && yarn lint", "all": "yarn clean && yarn build && yarn test && yarn lint:fix && yarn lint",
"build": "tsc -p tsconfig.build.json", "build": "tsc -p tsconfig.build.json",
"clean": "rimraf dist/ ./tsconfig.build.tsbuildinfo", "clean": "rimraf dist/ ./tsconfig.build.tsbuildinfo",
"lint:check": "eslint .",
"lint:fix": "yarn lint:check --fix",
"lint": "yarn lint:fix && yarn lint:check", "lint": "yarn lint:fix && yarn lint:check",
"lint:fix": "prettier --config .prettierrc.json --write '{src,test}/**/*.ts'", "pre-commit": "lint-staged",
"lint:check": "eslint -c .eslintrc.js --ext .ts --format stylish .",
"test": "ts-mocha test/*.spec.ts" "test": "ts-mocha test/*.spec.ts"
}, },
"devDependencies": { "devDependencies": {
...@@ -27,7 +28,9 @@ ...@@ -27,7 +28,9 @@
"@typescript-eslint/eslint-plugin": "^4.26.0", "@typescript-eslint/eslint-plugin": "^4.26.0",
"@typescript-eslint/parser": "^4.26.0", "@typescript-eslint/parser": "^4.26.0",
"chai": "^4.3.4", "chai": "^4.3.4",
"babel-eslint": "^10.1.0",
"eslint": "^7.27.0", "eslint": "^7.27.0",
"eslint-plugin-prettier": "^3.4.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-ban": "^1.5.2", "eslint-plugin-ban": "^1.5.2",
"eslint-plugin-import": "^2.23.4", "eslint-plugin-import": "^2.23.4",
......
...@@ -23,8 +23,8 @@ export class BaseService<T> { ...@@ -23,8 +23,8 @@ export class BaseService<T> {
protected options: T protected options: T
protected logger: Logger protected logger: Logger
protected metrics: Metrics protected metrics: Metrics
protected initialized: boolean = false protected initialized = false
protected running: boolean = false protected running = false
constructor( constructor(
name: string, name: string,
......
module.exports = { module.exports = {
"extends": "../../.eslintrc.js", extends: '../../.eslintrc.js',
"parserOptions": {
"project": "tsconfig.json",
"sourceType": "module"
}
} }
module.exports = {
...require('../../.prettierrc.js'),
};
\ No newline at end of file
../../.prettierrc.json
\ No newline at end of file
...@@ -31,7 +31,10 @@ const parseEnv = () => { ...@@ -31,7 +31,10 @@ const parseEnv = () => {
return { return {
l1BlockTimeSeconds: ensure('BLOCK_TIME_SECONDS', 'number'), l1BlockTimeSeconds: ensure('BLOCK_TIME_SECONDS', 'number'),
ctcForceInclusionPeriodSeconds: ensure('FORCE_INCLUSION_PERIOD_SECONDS', 'number'), ctcForceInclusionPeriodSeconds: ensure(
'FORCE_INCLUSION_PERIOD_SECONDS',
'number'
),
ctcMaxTransactionGasLimit: ensure('MAX_TRANSACTION_GAS_LIMIT', 'number'), ctcMaxTransactionGasLimit: ensure('MAX_TRANSACTION_GAS_LIMIT', 'number'),
emMinTransactionGasLimit: ensure('MIN_TRANSACTION_GAS_LIMIT', 'number'), emMinTransactionGasLimit: ensure('MIN_TRANSACTION_GAS_LIMIT', 'number'),
emMaxtransactionGasLimit: ensure('MAX_TRANSACTION_GAS_LIMIT', 'number'), emMaxtransactionGasLimit: ensure('MAX_TRANSACTION_GAS_LIMIT', 'number'),
...@@ -39,7 +42,10 @@ const parseEnv = () => { ...@@ -39,7 +42,10 @@ const parseEnv = () => {
emSecondsPerEpoch: ensure('ECONDS_PER_EPOCH', 'number'), emSecondsPerEpoch: ensure('ECONDS_PER_EPOCH', 'number'),
emOvmChainId: ensure('CHAIN_ID', 'number'), emOvmChainId: ensure('CHAIN_ID', 'number'),
sccFraudProofWindow: ensure('FRAUD_PROOF_WINDOW_SECONDS', 'number'), sccFraudProofWindow: ensure('FRAUD_PROOF_WINDOW_SECONDS', 'number'),
sccSequencerPublishWindow: ensure('SEQUENCER_PUBLISH_WINDOW_SECONDS', 'number'), sccSequencerPublishWindow: ensure(
'SEQUENCER_PUBLISH_WINDOW_SECONDS',
'number'
),
} }
} }
...@@ -68,19 +74,25 @@ const main = async () => { ...@@ -68,19 +74,25 @@ const main = async () => {
// update our CI so this is no longer necessary. But I'm adding it for backwards compat so we can // update our CI so this is no longer necessary. But I'm adding it for backwards compat so we can
// get the hardhat-deploy stuff merged. Woot. // get the hardhat-deploy stuff merged. Woot.
const nicknames = { const nicknames = {
'Lib_AddressManager': 'AddressManager', Lib_AddressManager: 'AddressManager',
'mockOVM_BondManager': 'OVM_BondManager' mockOVM_BondManager: 'OVM_BondManager',
} }
const contracts: any = dirtree( const contracts: any = dirtree(
path.resolve(__dirname, `../deployments/custom`) path.resolve(__dirname, `../deployments/custom`)
).children.filter((child) => { )
.children.filter((child) => {
return child.extension === '.json' return child.extension === '.json'
}).reduce((contractsAccumulator, child) => { })
.reduce((contractsAccumulator, child) => {
const contractName = child.name.replace('.json', '') const contractName = child.name.replace('.json', '')
// eslint-disable-next-line @typescript-eslint/no-var-requires // eslint-disable-next-line @typescript-eslint/no-var-requires
const artifact = require(path.resolve(__dirname, `../deployments/custom/${child.name}`)) const artifact = require(path.resolve(
contractsAccumulator[nicknames[contractName] || contractName] = artifact.address __dirname,
`../deployments/custom/${child.name}`
))
contractsAccumulator[nicknames[contractName] || contractName] =
artifact.address
return contractsAccumulator return contractsAccumulator
}, {}) }, {})
...@@ -88,7 +100,7 @@ const main = async () => { ...@@ -88,7 +100,7 @@ const main = async () => {
contracts.Deployer = await deployer.getAddress() contracts.Deployer = await deployer.getAddress()
const addresses = JSON.stringify(contracts, null, 2) const addresses = JSON.stringify(contracts, null, 2)
const dumpsPath = path.resolve(__dirname, "../dist/dumps") const dumpsPath = path.resolve(__dirname, '../dist/dumps')
if (!fs.existsSync(dumpsPath)) { if (!fs.existsSync(dumpsPath)) {
fs.mkdirSync(dumpsPath) fs.mkdirSync(dumpsPath)
} }
......
...@@ -5,7 +5,8 @@ import * as mkdirp from 'mkdirp' ...@@ -5,7 +5,8 @@ import * as mkdirp from 'mkdirp'
const env = process.env const env = process.env
const CHAIN_ID = env.CHAIN_ID || '420' const CHAIN_ID = env.CHAIN_ID || '420'
const GAS_PRICE_ORACLE_OWNER = env.GAS_PRICE_ORACLE_OWNER || '0x' + 'FF'.repeat(20) const GAS_PRICE_ORACLE_OWNER =
env.GAS_PRICE_ORACLE_OWNER || '0x' + 'FF'.repeat(20)
/* Internal Imports */ /* Internal Imports */
import { makeStateDump } from '../src/state-dump/make-dump' import { makeStateDump } from '../src/state-dump/make-dump'
...@@ -22,7 +23,7 @@ import { RollupDeployConfig } from '../src/contract-deployment' ...@@ -22,7 +23,7 @@ import { RollupDeployConfig } from '../src/contract-deployment'
gasPriceOracleConfig: { gasPriceOracleConfig: {
owner: GAS_PRICE_ORACLE_OWNER, owner: GAS_PRICE_ORACLE_OWNER,
initialGasPrice: 0, initialGasPrice: 0,
} },
} }
const dump = await makeStateDump(config as RollupDeployConfig) const dump = await makeStateDump(config as RollupDeployConfig)
......
...@@ -252,6 +252,11 @@ contract OVM_L1CrossDomainMessenger is ...@@ -252,6 +252,11 @@ contract OVM_L1CrossDomainMessenger is
"Provided message has been blocked." "Provided message has been blocked."
); );
require(
_target != resolve("OVM_CanonicalTransactionChain"),
"Cannot send L2->L1 messages to L1 system contracts."
);
xDomainMsgSender = _sender; xDomainMsgSender = _sender;
(bool success, ) = _target.call(_message); (bool success, ) = _target.call(_message);
xDomainMsgSender = DEFAULT_XDOMAIN_SENDER; xDomainMsgSender = DEFAULT_XDOMAIN_SENDER;
......
// SPDX-License-Identifier: MIT
pragma solidity >0.5.0 <0.8.0;
pragma experimental ABIEncoderV2;
/* Contract Imports */
import { L2StandardERC20 } from "../../../libraries/standards/L2StandardERC20.sol";
import { Lib_PredeployAddresses } from "../../../libraries/constants/Lib_PredeployAddresses.sol";
/**
* @title OVM_L2StandardTokenFactory
* @dev Factory contract for creating standard L2 token representations of L1 ERC20s
* compatible with and working on the standard bridge.
* Compiler used: optimistic-solc
* Runtime target: OVM
*/
contract OVM_L2StandardTokenFactory {
event StandardL2TokenCreated(address indexed _l1Token, address indexed _l2Token);
/**
* @dev Creates an instance of the standard ERC20 token on L2.
* @param _l1Token Address of the corresponding L1 token.
* @param _name ERC20 name.
* @param _symbol ERC20 symbol.
*/
function createStandardL2Token(
address _l1Token,
string memory _name,
string memory _symbol
)
external
{
require (_l1Token != address(0), "Must provide L1 token address");
L2StandardERC20 l2Token = new L2StandardERC20(
Lib_PredeployAddresses.L2_STANDARD_BRIDGE,
_l1Token,
_name,
_symbol
);
emit StandardL2TokenCreated(_l1Token, address(l2Token));
}
}
...@@ -10,6 +10,7 @@ contract L2StandardERC20 is IL2StandardERC20, ERC20 { ...@@ -10,6 +10,7 @@ contract L2StandardERC20 is IL2StandardERC20, ERC20 {
address public l2Bridge; address public l2Bridge;
/** /**
* @param _l2Bridge Address of the L2 standard bridge.
* @param _l1Token Address of the corresponding L1 token. * @param _l1Token Address of the corresponding L1 token.
* @param _name ERC20 name. * @param _name ERC20 name.
* @param _symbol ERC20 symbol. * @param _symbol ERC20 symbol.
......
/* Imports: External */
import { DeployFunction } from 'hardhat-deploy/dist/types'
/* Imports: Internal */
import { getContractDefinition } from '../src'
const deployFn: DeployFunction = async (hre: any) => {
const { deployments, getNamedAccounts } = hre
const { deploy } = deployments
const { deployer } = await getNamedAccounts()
const l2TokenFactory = getContractDefinition('OVM_L2StandardTokenFactory', true)
await deploy('OVM_L2StandardTokenFactory', {
contract: l2TokenFactory,
args: [],
from: deployer,
log: true,
});
}
deployFn.tags = ['OVM_L2StandardTokenFactory']
export default deployFn
...@@ -38,7 +38,8 @@ const deployFn: DeployFunction = async (hre) => { ...@@ -38,7 +38,8 @@ const deployFn: DeployFunction = async (hre) => {
await Proxy__OVM_L1CrossDomainMessenger.initialize(Lib_AddressManager.address) await Proxy__OVM_L1CrossDomainMessenger.initialize(Lib_AddressManager.address)
const libAddressManager = await Proxy__OVM_L1CrossDomainMessenger.libAddressManager() const libAddressManager =
await Proxy__OVM_L1CrossDomainMessenger.libAddressManager()
if (libAddressManager !== Lib_AddressManager.address) { if (libAddressManager !== Lib_AddressManager.address) {
throw new Error( throw new Error(
`\n**FATAL ERROR. THIS SHOULD NEVER HAPPEN. CHECK YOUR DEPLOYMENT.**:\n` + `\n**FATAL ERROR. THIS SHOULD NEVER HAPPEN. CHECK YOUR DEPLOYMENT.**:\n` +
......
...@@ -65,7 +65,8 @@ const deployFn: DeployFunction = async (hre) => { ...@@ -65,7 +65,8 @@ const deployFn: DeployFunction = async (hre) => {
hre.ethers.utils.hexZeroPad(l1MessengerAddress, 32) hre.ethers.utils.hexZeroPad(l1MessengerAddress, 32)
) )
// Verify that the slot was set correctly // Verify that the slot was set correctly
const l1MessengerStored = await Proxy__WithBridgeInterface.callStatic.messenger() const l1MessengerStored =
await Proxy__WithBridgeInterface.callStatic.messenger()
console.log('l1MessengerStored:', l1MessengerStored) console.log('l1MessengerStored:', l1MessengerStored)
if (l1MessengerStored !== l1MessengerAddress) { if (l1MessengerStored !== l1MessengerAddress) {
throw new Error( throw new Error(
...@@ -79,7 +80,8 @@ const deployFn: DeployFunction = async (hre) => { ...@@ -79,7 +80,8 @@ const deployFn: DeployFunction = async (hre) => {
hre.ethers.utils.hexZeroPad(predeploys.OVM_L2StandardBridge, 32) hre.ethers.utils.hexZeroPad(predeploys.OVM_L2StandardBridge, 32)
) )
// Verify that the slot was set correctly // Verify that the slot was set correctly
const l2TokenBridgeStored = await Proxy__WithBridgeInterface.callStatic.l2TokenBridge() const l2TokenBridgeStored =
await Proxy__WithBridgeInterface.callStatic.l2TokenBridge()
console.log('l2TokenBridgeStored:', l2TokenBridgeStored) console.log('l2TokenBridgeStored:', l2TokenBridgeStored)
if (l2TokenBridgeStored !== predeploys.OVM_L2StandardBridge) { if (l2TokenBridgeStored !== predeploys.OVM_L2StandardBridge) {
throw new Error( throw new Error(
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
| OVM_ECDSAContractAccount: | `0x4200000000000000000000000000000000000003` | | OVM_ECDSAContractAccount: | `0x4200000000000000000000000000000000000003` |
| OVM_SequencerEntrypoint: | `0x4200000000000000000000000000000000000005` | | OVM_SequencerEntrypoint: | `0x4200000000000000000000000000000000000005` |
| Lib_AddressManager: | `0x4200000000000000000000000000000000000008` | | Lib_AddressManager: | `0x4200000000000000000000000000000000000008` |
| OVM_SequencerFeeVault: | `0x4200000000000000000000000000000000000011` |
| ERC1820Registry: | `0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24` | | ERC1820Registry: | `0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24` |
--- ---
...@@ -65,8 +66,8 @@ Implementation addresses. DO NOT use these addresses directly. ...@@ -65,8 +66,8 @@ Implementation addresses. DO NOT use these addresses directly.
Use their proxied counterparts seen above. Use their proxied counterparts seen above.
OVM_L1CrossDomainMessenger: OVM_L1CrossDomainMessenger:
- 0x16393737D09d2722AD13DcA3cA8C3DB957699F1D - 0xbfba066b5cA610Fe70AdCE45FcB622F945891bb0
- https://etherscan.io/address/0x16393737D09d2722AD13DcA3cA8C3DB957699F1D - https://etherscan.io/address/0xbfba066b5cA610Fe70AdCE45FcB622F945891bb0)
OVM_L1ETHGateway: OVM_L1ETHGateway:
- 0x40c9067ec8087EcF101FC10d2673636955b81A32 - 0x40c9067ec8087EcF101FC10d2673636955b81A32
...@@ -99,8 +100,8 @@ Implementation addresses. DO NOT use these addresses directly. ...@@ -99,8 +100,8 @@ Implementation addresses. DO NOT use these addresses directly.
Use their proxied counterparts seen above. Use their proxied counterparts seen above.
OVM_L1CrossDomainMessenger: OVM_L1CrossDomainMessenger:
- 0xa172330C2E6Ec2bF04662Bb9b67ae857910b7f7f - 0x333d2674E2D7e1e7327dc076030ce9615183709C
- https://kovan.etherscan.io/address/0xa172330C2E6Ec2bF04662Bb9b67ae857910b7f7f) - https://kovan.etherscan.io/address/0x333d2674E2D7e1e7327dc076030ce9615183709C)
OVM_L1StandardBridge: OVM_L1StandardBridge:
- 0x8293ab0dc701a1387031a13786276f1baa3fcd4e - 0x8293ab0dc701a1387031a13786276f1baa3fcd4e
- https://kovan.etherscan.io/address/0x8293ab0dc701a1387031a13786276f1baa3fcd4e) - https://kovan.etherscan.io/address/0x8293ab0dc701a1387031a13786276f1baa3fcd4e)
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -35,11 +35,8 @@ ...@@ -35,11 +35,8 @@
"test:slither": "slither .", "test:slither": "slither .",
"pretest:slither": "rm -f @openzeppelin && rm -f @ens && rm -f hardhat && ln -s ../../node_modules/@openzeppelin @openzeppelin && ln -s ../../node_modules/@ens @ens && ln -s ../../node_modules/hardhat hardhat", "pretest:slither": "rm -f @openzeppelin && rm -f @ens && rm -f hardhat && ln -s ../../node_modules/@openzeppelin @openzeppelin && ln -s ../../node_modules/@ens @ens && ln -s ../../node_modules/hardhat hardhat",
"posttest:slither": "rm -f @openzeppelin && rm -f @ens && rm -f hardhat", "posttest:slither": "rm -f @openzeppelin && rm -f @ens && rm -f hardhat",
"lint": "yarn lint:fix && yarn lint:check", "lint:check": "eslint .",
"lint:fix": "yarn run lint:fix:typescript", "lint:fix": "yarn lint:check --fix",
"lint:fix:typescript": "prettier --config .prettierrc.json --write \"hardhat.config.ts\" \"{src,test,deploy}/**/*.ts\"",
"lint:check": "yarn run lint:typescript",
"lint:typescript": "eslint -c .eslintrc.js --ext .ts --format stylish .",
"clean": "rm -rf ./dist ./artifacts ./artifacts-ovm ./cache ./cache-ovm ./tsconfig.build.tsbuildinfo", "clean": "rm -rf ./dist ./artifacts ./artifacts-ovm ./cache ./cache-ovm ./tsconfig.build.tsbuildinfo",
"deploy": "ts-node \"./bin/deploy.ts\" && yarn generate-markdown", "deploy": "ts-node \"./bin/deploy.ts\" && yarn generate-markdown",
"serve": "./bin/serve_dump.sh", "serve": "./bin/serve_dump.sh",
...@@ -47,7 +44,8 @@ ...@@ -47,7 +44,8 @@
"postpublish": "rimraf OVM iOVM libraries mockOVM", "postpublish": "rimraf OVM iOVM libraries mockOVM",
"prepack": "yarn prepublishOnly", "prepack": "yarn prepublishOnly",
"postpack": "yarn postpublish", "postpack": "yarn postpublish",
"generate-markdown": "node \"./scripts/generate-markdown.js\"" "generate-markdown": "node \"./scripts/generate-markdown.js\"",
"pre-commit": "lint-staged"
}, },
"dependencies": { "dependencies": {
"@eth-optimism/core-utils": "^0.4.6", "@eth-optimism/core-utils": "^0.4.6",
...@@ -82,7 +80,9 @@ ...@@ -82,7 +80,9 @@
"copyfiles": "^2.3.0", "copyfiles": "^2.3.0",
"directory-tree": "^2.2.7", "directory-tree": "^2.2.7",
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"babel-eslint": "^10.1.0",
"eslint": "^7.27.0", "eslint": "^7.27.0",
"eslint-plugin-prettier": "^3.4.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-ban": "^1.5.2", "eslint-plugin-ban": "^1.5.2",
"eslint-plugin-import": "^2.23.4", "eslint-plugin-import": "^2.23.4",
...@@ -102,11 +102,13 @@ ...@@ -102,11 +102,13 @@
"mkdirp": "^1.0.4", "mkdirp": "^1.0.4",
"mocha": "^8.3.0", "mocha": "^8.3.0",
"prettier": "^2.2.1", "prettier": "^2.2.1",
"lint-staged": "11.0.0",
"random-bytes-seed": "^1.0.3", "random-bytes-seed": "^1.0.3",
"rlp": "^2.2.6", "rlp": "^2.2.6",
"solidity-coverage": "^0.7.16", "solidity-coverage": "^0.7.16",
"ts-generator": "0.0.8", "ts-generator": "0.0.8",
"ts-node": "^9.1.1", "ts-node": "^9.1.1",
"typescript": "^4.2.3",
"typechain": "2.0.0", "typechain": "2.0.0",
"yargs": "^16.2.0" "yargs": "^16.2.0"
}, },
......
...@@ -34,8 +34,8 @@ const argv = yargs(hideBin(process.argv)).argv ...@@ -34,8 +34,8 @@ const argv = yargs(hideBin(process.argv)).argv
for (const name of Object.keys(addresses)) { for (const name of Object.keys(addresses)) {
if (addresses[name] !== ethers.constants.AddressZero) { if (addresses[name] !== ethers.constants.AddressZero) {
table.push({ table.push({
name: name, name,
address: addresses[name] address: addresses[name],
}) })
} }
} }
......
...@@ -77,10 +77,10 @@ const networks = { ...@@ -77,10 +77,10 @@ const networks = {
proxiedContracts = [] proxiedContracts = []
for (let i = 0; i < contracts.length; i++) { for (let i = 0; i < contracts.length; i++) {
if (contracts[i] == 'OVM_L1CrossDomainMessenger') { if (contracts[i] === 'OVM_L1CrossDomainMessenger') {
proxiedContracts.push(contracts.splice(i, 1)[0]) proxiedContracts.push(contracts.splice(i, 1)[0])
} }
if (contracts[i] == 'OVM_L1ETHGateway') { if (contracts[i] === 'OVM_L1ETHGateway') {
proxiedContracts.push(contracts.splice(i, 1)[0]) proxiedContracts.push(contracts.splice(i, 1)[0])
} }
} }
......
...@@ -6,7 +6,7 @@ const { hideBin } = require('yargs/helpers') ...@@ -6,7 +6,7 @@ const { hideBin } = require('yargs/helpers')
const argv = yargs(hideBin(process.argv)).argv const argv = yargs(hideBin(process.argv)).argv
const nicknames = { const nicknames = {
'mockOVM_BondManager': 'OVM_BondManager' mockOVM_BondManager: 'OVM_BondManager',
} }
;(async () => { ;(async () => {
...@@ -27,9 +27,11 @@ const nicknames = { ...@@ -27,9 +27,11 @@ const nicknames = {
throw new Error(`unable to get a reference to Lib_AddressManager`) throw new Error(`unable to get a reference to Lib_AddressManager`)
} }
const contracts = dirtree(`./deployments/${argv.network}`).children.filter((child) => { const contracts = dirtree(`./deployments/${argv.network}`)
.children.filter((child) => {
return child.extension === '.json' return child.extension === '.json'
}).map((child) => { })
.map((child) => {
return child.name.replace('.json', '') return child.name.replace('.json', '')
}) })
...@@ -37,7 +39,9 @@ const nicknames = { ...@@ -37,7 +39,9 @@ const nicknames = {
const deployment = require(`../deployments/${argv.network}/${contract}.json`) const deployment = require(`../deployments/${argv.network}/${contract}.json`)
if (contract !== 'Lib_AddressManager') { if (contract !== 'Lib_AddressManager') {
const address = await Lib_AddressManager.getAddress(nicknames[contract] || contract) const address = await Lib_AddressManager.getAddress(
nicknames[contract] || contract
)
if (address !== deployment.address) { if (address !== deployment.address) {
console.log(`✖ ${contract} (ADDRESS MISMATCH DETECTED)`) console.log(`✖ ${contract} (ADDRESS MISMATCH DETECTED)`)
continue continue
......
...@@ -189,8 +189,10 @@ export const makeStateDump = async (cfg: RollupDeployConfig): Promise<any> => { ...@@ -189,8 +189,10 @@ export const makeStateDump = async (cfg: RollupDeployConfig): Promise<any> => {
const contract = deploymentResult.contracts[name] const contract = deploymentResult.contracts[name]
let code: string let code: string
if (ovmCompiled.includes(name)) { if (ovmCompiled.includes(name)) {
const ovmDeployedBytecode = getContractDefinition(name, true) const ovmDeployedBytecode = getContractDefinition(
.deployedBytecode name,
true
).deployedBytecode
// TODO remove: deployedBytecode is missing the find and replace in solidity // TODO remove: deployedBytecode is missing the find and replace in solidity
code = ovmDeployedBytecode code = ovmDeployedBytecode
.split( .split(
......
...@@ -197,7 +197,9 @@ describe('OVM_L2StandardBridge', () => { ...@@ -197,7 +197,9 @@ describe('OVM_L2StandardBridge', () => {
let SmoddedL2Token: ModifiableContract let SmoddedL2Token: ModifiableContract
beforeEach(async () => { beforeEach(async () => {
// Deploy a smodded gateway so we can give some balances to withdraw // Deploy a smodded gateway so we can give some balances to withdraw
SmoddedL2Token = await (await smoddit('L2StandardERC20', alice)).deploy( SmoddedL2Token = await (
await smoddit('L2StandardERC20', alice)
).deploy(
OVM_L2StandardBridge.address, OVM_L2StandardBridge.address,
DUMMY_L1TOKEN_ADDRESS, DUMMY_L1TOKEN_ADDRESS,
'L2Token', 'L2Token',
......
import { expect } from '../../../../setup'
/* External Imports */
import { ethers } from 'hardhat'
import { Signer, ContractFactory, Contract } from 'ethers'
import { smoddit } from '@eth-optimism/smock'
import { getContractInterface } from '@eth-optimism/contracts'
/* Internal Imports */
import { predeploys } from '../../../../../src'
describe('OVM_L2StandardTokenFactory', () => {
let signer: Signer
let Factory__L1ERC20: ContractFactory
let L1ERC20: Contract
let OVM_L2StandardTokenFactory: Contract
before(async () => {
;[signer] = await ethers.getSigners()
// deploy an ERC20 contract on L1
Factory__L1ERC20 = await smoddit(
'@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20'
)
L1ERC20 = await Factory__L1ERC20.deploy('L1ERC20', 'ERC')
OVM_L2StandardTokenFactory = await (
await ethers.getContractFactory('OVM_L2StandardTokenFactory')
).deploy()
})
describe('Standard token factory', () => {
it('should be able to create a standard token', async () => {
const tx = await OVM_L2StandardTokenFactory.createStandardL2Token(
L1ERC20.address,
'L2ERC20',
'ERC'
)
const receipt = await tx.wait()
const [tokenCreatedEvent] = receipt.events
// Expect there to be an event emmited for the standard token creation
expect(tokenCreatedEvent.event).to.be.eq('StandardL2TokenCreated')
// Get the L2 token address from the emmited event and check it was created correctly
const l2TokenAddress = tokenCreatedEvent.args._l2Token
const l2Token = new Contract(
l2TokenAddress,
getContractInterface('L2StandardERC20'),
signer
)
expect(await l2Token.l2Bridge()).to.equal(predeploys.OVM_L2StandardBridge)
expect(await l2Token.l1Token()).to.equal(L1ERC20.address)
expect(await l2Token.name()).to.equal('L2ERC20')
expect(await l2Token.symbol()).to.equal('ERC')
})
it('should not be able to create a standard token with a 0 address for l1 token', async () => {
await expect(
OVM_L2StandardTokenFactory.createStandardL2Token(
ethers.constants.AddressZero,
'L2ERC20',
'ERC'
)
).to.be.revertedWith('Must provide L1 token address')
})
})
})
...@@ -93,7 +93,8 @@ describe('OVM_L1CrossDomainMessenger', () => { ...@@ -93,7 +93,8 @@ describe('OVM_L1CrossDomainMessenger', () => {
Factory__OVM_L1CrossDomainMessenger = await ethers.getContractFactory( Factory__OVM_L1CrossDomainMessenger = await ethers.getContractFactory(
'OVM_L1CrossDomainMessenger' 'OVM_L1CrossDomainMessenger'
) )
OVM_CanonicalTransactionChain = await Factory__OVM_CanonicalTransactionChain.deploy( OVM_CanonicalTransactionChain =
await Factory__OVM_CanonicalTransactionChain.deploy(
AddressManager.address, AddressManager.address,
FORCE_INCLUSION_PERIOD_SECONDS, FORCE_INCLUSION_PERIOD_SECONDS,
FORCE_INCLUSION_PERIOD_BLOCKS, FORCE_INCLUSION_PERIOD_BLOCKS,
...@@ -127,7 +128,8 @@ describe('OVM_L1CrossDomainMessenger', () => { ...@@ -127,7 +128,8 @@ describe('OVM_L1CrossDomainMessenger', () => {
let OVM_L1CrossDomainMessenger: Contract let OVM_L1CrossDomainMessenger: Contract
beforeEach(async () => { beforeEach(async () => {
const xDomainMessengerImpl = await Factory__OVM_L1CrossDomainMessenger.deploy() const xDomainMessengerImpl =
await Factory__OVM_L1CrossDomainMessenger.deploy()
// We use an upgradable proxy for the XDomainMessenger--deploy & set up the proxy. // We use an upgradable proxy for the XDomainMessenger--deploy & set up the proxy.
OVM_L1CrossDomainMessenger = await deployProxyXDomainMessenger( OVM_L1CrossDomainMessenger = await deployProxyXDomainMessenger(
AddressManager, AddressManager,
...@@ -255,25 +257,25 @@ describe('OVM_L1CrossDomainMessenger', () => { ...@@ -255,25 +257,25 @@ describe('OVM_L1CrossDomainMessenger', () => {
}) })
}) })
describe('relayMessage', () => { const generateMockRelayMessageProof = async (
let target: string target: string,
let message: string sender: string,
let sender: string message: string,
let proof: any messageNonce: number = 0
let calldata: string ): Promise<{
before(async () => { calldata: string
target = Mock__TargetContract.address proof: any
message = Mock__TargetContract.interface.encodeFunctionData('setTarget', [ }> => {
NON_ZERO_ADDRESS, const calldata = encodeXDomainCalldata(
]) target,
sender = await signer.getAddress() sender,
message,
calldata = encodeXDomainCalldata(target, sender, message, 0) messageNonce
)
const storageKey = keccak256( const storageKey = keccak256(
keccak256( keccak256(calldata + remove0x(Mock__OVM_L2CrossDomainMessenger.address)) +
calldata + remove0x(Mock__OVM_L2CrossDomainMessenger.address) '00'.repeat(32)
) + '00'.repeat(32)
) )
const storageGenerator = await TrieTestGenerator.fromNodes({ const storageGenerator = await TrieTestGenerator.fromNodes({
nodes: [ nodes: [
...@@ -298,19 +300,44 @@ describe('OVM_L1CrossDomainMessenger', () => { ...@@ -298,19 +300,44 @@ describe('OVM_L1CrossDomainMessenger', () => {
secure: true, secure: true,
}) })
proof = { const proof = {
stateRoot: toHexString(generator._trie.root), stateRoot: toHexString(generator._trie.root),
stateRootBatchHeader: DUMMY_BATCH_HEADERS[0], stateRootBatchHeader: DUMMY_BATCH_HEADERS[0],
stateRootProof: DUMMY_BATCH_PROOFS[0], stateRootProof: DUMMY_BATCH_PROOFS[0],
stateTrieWitness: ( stateTrieWitness: (
await generator.makeAccountProofTest( await generator.makeAccountProofTest(predeploys.OVM_L2ToL1MessagePasser)
predeploys.OVM_L2ToL1MessagePasser
)
).accountTrieWitness, ).accountTrieWitness,
storageTrieWitness: ( storageTrieWitness: (
await storageGenerator.makeInclusionProofTest(storageKey) await storageGenerator.makeInclusionProofTest(storageKey)
).proof, ).proof,
} }
return {
calldata,
proof,
}
}
describe('relayMessage', () => {
let target: string
let sender: string
let message: string
let proof: any
let calldata: string
before(async () => {
target = Mock__TargetContract.address
message = Mock__TargetContract.interface.encodeFunctionData('setTarget', [
NON_ZERO_ADDRESS,
])
sender = await signer.getAddress()
const mockProof = await generateMockRelayMessageProof(
target,
sender,
message
)
proof = mockProof.proof
calldata = mockProof.calldata
}) })
beforeEach(async () => { beforeEach(async () => {
...@@ -346,6 +373,26 @@ describe('OVM_L1CrossDomainMessenger', () => { ...@@ -346,6 +373,26 @@ describe('OVM_L1CrossDomainMessenger', () => {
).to.be.revertedWith('Provided message could not be verified.') ).to.be.revertedWith('Provided message could not be verified.')
}) })
it('should revert if attempting to relay a message sent to an L1 system contract', async () => {
const maliciousProof = await generateMockRelayMessageProof(
OVM_CanonicalTransactionChain.address,
sender,
message
)
await expect(
OVM_L1CrossDomainMessenger.relayMessage(
OVM_CanonicalTransactionChain.address,
sender,
message,
0,
maliciousProof.proof
)
).to.be.revertedWith(
'Cannot send L2->L1 messages to L1 system contracts.'
)
})
it('should revert if provided an invalid state root proof', async () => { it('should revert if provided an invalid state root proof', async () => {
Mock__OVM_StateCommitmentChain.smocked.verifyStateCommitment.will.return.with( Mock__OVM_StateCommitmentChain.smocked.verifyStateCommitment.will.return.with(
false false
...@@ -469,9 +516,8 @@ describe('OVM_L1CrossDomainMessenger', () => { ...@@ -469,9 +516,8 @@ describe('OVM_L1CrossDomainMessenger', () => {
describe('blockMessage and allowMessage', () => { describe('blockMessage and allowMessage', () => {
it('should revert if called by an account other than the owner', async () => { it('should revert if called by an account other than the owner', async () => {
const OVM_L1CrossDomainMessenger2 = OVM_L1CrossDomainMessenger.connect( const OVM_L1CrossDomainMessenger2 =
signer2 OVM_L1CrossDomainMessenger.connect(signer2)
)
await expect( await expect(
OVM_L1CrossDomainMessenger2.blockMessage(keccak256(calldata)) OVM_L1CrossDomainMessenger2.blockMessage(keccak256(calldata))
).to.be.revertedWith('Ownable: caller is not the owner') ).to.be.revertedWith('Ownable: caller is not the owner')
......
...@@ -71,9 +71,8 @@ describe('OVM_L2CrossDomainMessenger', () => { ...@@ -71,9 +71,8 @@ describe('OVM_L2CrossDomainMessenger', () => {
let OVM_L2CrossDomainMessenger: Contract let OVM_L2CrossDomainMessenger: Contract
beforeEach(async () => { beforeEach(async () => {
OVM_L2CrossDomainMessenger = await Factory__OVM_L2CrossDomainMessenger.deploy( OVM_L2CrossDomainMessenger =
AddressManager.address await Factory__OVM_L2CrossDomainMessenger.deploy(AddressManager.address)
)
}) })
describe('sendMessage', () => { describe('sendMessage', () => {
...@@ -183,7 +182,9 @@ describe('OVM_L2CrossDomainMessenger', () => { ...@@ -183,7 +182,9 @@ describe('OVM_L2CrossDomainMessenger', () => {
// There should be no 'relayedMessage' event logged in the receipt. // There should be no 'relayedMessage' event logged in the receipt.
const logs = ( const logs = (
await Mock__OVM_L2ToL1MessagePasser.provider.getTransactionReceipt( await Mock__OVM_L2ToL1MessagePasser.provider.getTransactionReceipt(
(await resProm).hash (
await resProm
).hash
) )
).logs ).logs
expect(logs).to.deep.equal([]) expect(logs).to.deep.equal([])
...@@ -204,7 +205,8 @@ describe('OVM_L2CrossDomainMessenger', () => { ...@@ -204,7 +205,8 @@ describe('OVM_L2CrossDomainMessenger', () => {
Mock__OVM_L1CrossDomainMessenger.address Mock__OVM_L1CrossDomainMessenger.address
) )
const reentrantMessage = OVM_L2CrossDomainMessenger.interface.encodeFunctionData( const reentrantMessage =
OVM_L2CrossDomainMessenger.interface.encodeFunctionData(
'relayMessage', 'relayMessage',
[target, sender, message, 1] [target, sender, message, 1]
) )
......
...@@ -98,7 +98,8 @@ describe('[GAS BENCHMARK] OVM_CanonicalTransactionChain', () => { ...@@ -98,7 +98,8 @@ describe('[GAS BENCHMARK] OVM_CanonicalTransactionChain', () => {
let OVM_CanonicalTransactionChain: Contract let OVM_CanonicalTransactionChain: Contract
beforeEach(async () => { beforeEach(async () => {
OVM_CanonicalTransactionChain = await Factory__OVM_CanonicalTransactionChain.deploy( OVM_CanonicalTransactionChain =
await Factory__OVM_CanonicalTransactionChain.deploy(
AddressManager.address, AddressManager.address,
FORCE_INCLUSION_PERIOD_SECONDS, FORCE_INCLUSION_PERIOD_SECONDS,
FORCE_INCLUSION_PERIOD_BLOCKS, FORCE_INCLUSION_PERIOD_BLOCKS,
...@@ -132,9 +133,8 @@ describe('[GAS BENCHMARK] OVM_CanonicalTransactionChain', () => { ...@@ -132,9 +133,8 @@ describe('[GAS BENCHMARK] OVM_CanonicalTransactionChain', () => {
describe('appendSequencerBatch [ @skip-on-coverage ]', () => { describe('appendSequencerBatch [ @skip-on-coverage ]', () => {
beforeEach(() => { beforeEach(() => {
OVM_CanonicalTransactionChain = OVM_CanonicalTransactionChain.connect( OVM_CanonicalTransactionChain =
sequencer OVM_CanonicalTransactionChain.connect(sequencer)
)
}) })
it('200 transactions in a single context', async () => { it('200 transactions in a single context', async () => {
......
...@@ -147,7 +147,8 @@ describe('OVM_CanonicalTransactionChain', () => { ...@@ -147,7 +147,8 @@ describe('OVM_CanonicalTransactionChain', () => {
let OVM_CanonicalTransactionChain: Contract let OVM_CanonicalTransactionChain: Contract
beforeEach(async () => { beforeEach(async () => {
OVM_CanonicalTransactionChain = await Factory__OVM_CanonicalTransactionChain.deploy( OVM_CanonicalTransactionChain =
await Factory__OVM_CanonicalTransactionChain.deploy(
AddressManager.address, AddressManager.address,
FORCE_INCLUSION_PERIOD_SECONDS, FORCE_INCLUSION_PERIOD_SECONDS,
FORCE_INCLUSION_PERIOD_BLOCKS, FORCE_INCLUSION_PERIOD_BLOCKS,
...@@ -184,7 +185,8 @@ describe('OVM_CanonicalTransactionChain', () => { ...@@ -184,7 +185,8 @@ describe('OVM_CanonicalTransactionChain', () => {
const gasLimit = 500_000 const gasLimit = 500_000
it('should revert when trying to input more data than the max data size', async () => { it('should revert when trying to input more data than the max data size', async () => {
const MAX_ROLLUP_TX_SIZE = await OVM_CanonicalTransactionChain.MAX_ROLLUP_TX_SIZE() const MAX_ROLLUP_TX_SIZE =
await OVM_CanonicalTransactionChain.MAX_ROLLUP_TX_SIZE()
const data = '0x' + '12'.repeat(MAX_ROLLUP_TX_SIZE + 1) const data = '0x' + '12'.repeat(MAX_ROLLUP_TX_SIZE + 1)
await expect( await expect(
...@@ -207,7 +209,8 @@ describe('OVM_CanonicalTransactionChain', () => { ...@@ -207,7 +209,8 @@ describe('OVM_CanonicalTransactionChain', () => {
}) })
it('should revert if gas limit parameter is not at least MIN_ROLLUP_TX_GAS', async () => { it('should revert if gas limit parameter is not at least MIN_ROLLUP_TX_GAS', async () => {
const MIN_ROLLUP_TX_GAS = await OVM_CanonicalTransactionChain.MIN_ROLLUP_TX_GAS() const MIN_ROLLUP_TX_GAS =
await OVM_CanonicalTransactionChain.MIN_ROLLUP_TX_GAS()
const customGasLimit = MIN_ROLLUP_TX_GAS / 2 const customGasLimit = MIN_ROLLUP_TX_GAS / 2
const data = '0x' + '12'.repeat(1234) const data = '0x' + '12'.repeat(1234)
...@@ -217,7 +220,8 @@ describe('OVM_CanonicalTransactionChain', () => { ...@@ -217,7 +220,8 @@ describe('OVM_CanonicalTransactionChain', () => {
}) })
it('should revert if transaction gas limit does not cover rollup burn', async () => { it('should revert if transaction gas limit does not cover rollup burn', async () => {
const L2_GAS_DISCOUNT_DIVISOR = await OVM_CanonicalTransactionChain.L2_GAS_DISCOUNT_DIVISOR() const L2_GAS_DISCOUNT_DIVISOR =
await OVM_CanonicalTransactionChain.L2_GAS_DISCOUNT_DIVISOR()
const data = '0x' + '12'.repeat(1234) const data = '0x' + '12'.repeat(1234)
await expect( await expect(
...@@ -663,9 +667,8 @@ describe('OVM_CanonicalTransactionChain', () => { ...@@ -663,9 +667,8 @@ describe('OVM_CanonicalTransactionChain', () => {
describe('appendSequencerBatch', () => { describe('appendSequencerBatch', () => {
beforeEach(() => { beforeEach(() => {
OVM_CanonicalTransactionChain = OVM_CanonicalTransactionChain.connect( OVM_CanonicalTransactionChain =
sequencer OVM_CanonicalTransactionChain.connect(sequencer)
)
}) })
it('should revert if expected start does not match current total batches', async () => { it('should revert if expected start does not match current total batches', async () => {
...@@ -757,7 +760,8 @@ describe('OVM_CanonicalTransactionChain', () => { ...@@ -757,7 +760,8 @@ describe('OVM_CanonicalTransactionChain', () => {
}) })
it('should revert when trying to input more data than the max data size', async () => { it('should revert when trying to input more data than the max data size', async () => {
const MAX_ROLLUP_TX_SIZE = await OVM_CanonicalTransactionChain.MAX_ROLLUP_TX_SIZE() const MAX_ROLLUP_TX_SIZE =
await OVM_CanonicalTransactionChain.MAX_ROLLUP_TX_SIZE()
const data = '0x' + '12'.repeat(MAX_ROLLUP_TX_SIZE + 1) const data = '0x' + '12'.repeat(MAX_ROLLUP_TX_SIZE + 1)
const timestamp = await getEthTime(ethers.provider) const timestamp = await getEthTime(ethers.provider)
...@@ -965,9 +969,8 @@ describe('OVM_CanonicalTransactionChain', () => { ...@@ -965,9 +969,8 @@ describe('OVM_CanonicalTransactionChain', () => {
gasLimit, gasLimit,
data data
) )
queueElements[ queueElements[i] =
i await OVM_CanonicalTransactionChain.getQueueElement(i)
] = await OVM_CanonicalTransactionChain.getQueueElement(i)
// this is a valid context for this TX // this is a valid context for this TX
validContexts[i] = { validContexts[i] = {
numSequencedTransactions: 1, numSequencedTransactions: 1,
......
...@@ -170,7 +170,8 @@ describe('OVM_StateCommitmentChain', () => { ...@@ -170,7 +170,8 @@ describe('OVM_StateCommitmentChain', () => {
describe('when outside sequencer publish window', () => { describe('when outside sequencer publish window', () => {
beforeEach(async () => { beforeEach(async () => {
const SEQUENCER_PUBLISH_WINDOW = await OVM_StateCommitmentChain.SEQUENCER_PUBLISH_WINDOW() const SEQUENCER_PUBLISH_WINDOW =
await OVM_StateCommitmentChain.SEQUENCER_PUBLISH_WINDOW()
await increaseEthTime( await increaseEthTime(
ethers.provider, ethers.provider,
SEQUENCER_PUBLISH_WINDOW.toNumber() + 1 SEQUENCER_PUBLISH_WINDOW.toNumber() + 1
......
...@@ -68,9 +68,9 @@ describe('OVM_ExecutionManager gas consumption', () => { ...@@ -68,9 +68,9 @@ describe('OVM_ExecutionManager gas consumption', () => {
// deploy the state manager and mock it for the state transitioner // deploy the state manager and mock it for the state transitioner
MOCK__STATE_MANAGER = await smockit( MOCK__STATE_MANAGER = await smockit(
await (await ethers.getContractFactory('OVM_StateManager')).deploy( await (
NON_ZERO_ADDRESS await ethers.getContractFactory('OVM_StateManager')
) ).deploy(NON_ZERO_ADDRESS)
) )
// Setup the SM to satisfy all the checks executed during EM.run() // Setup the SM to satisfy all the checks executed during EM.run()
......
...@@ -51,8 +51,7 @@ const test_nuisanceGas: TestDefinition = { ...@@ -51,8 +51,7 @@ const test_nuisanceGas: TestDefinition = {
}, },
subTests: [ subTests: [
{ {
name: name: 'ovmCALL consumes nuisance gas of CODESIZE * NUISANCE_GAS_PER_CONTRACT_BYTE',
'ovmCALL consumes nuisance gas of CODESIZE * NUISANCE_GAS_PER_CONTRACT_BYTE',
postState: { postState: {
ExecutionManager: { ExecutionManager: {
messageRecord: { messageRecord: {
...@@ -88,8 +87,7 @@ const test_nuisanceGas: TestDefinition = { ...@@ -88,8 +87,7 @@ const test_nuisanceGas: TestDefinition = {
], ],
}, },
{ {
name: name: 'ovmCALL consumes nuisance gas of CODESIZE * NUISANCE_GAS_PER_CONTRACT_BYTE twice for two unique ovmCALLS',
'ovmCALL consumes nuisance gas of CODESIZE * NUISANCE_GAS_PER_CONTRACT_BYTE twice for two unique ovmCALLS',
postState: { postState: {
ExecutionManager: { ExecutionManager: {
messageRecord: { messageRecord: {
...@@ -140,8 +138,7 @@ const test_nuisanceGas: TestDefinition = { ...@@ -140,8 +138,7 @@ const test_nuisanceGas: TestDefinition = {
], ],
}, },
{ {
name: name: 'ovmCALL consumes all allotted nuisance gas if code contract throws unknown exception',
'ovmCALL consumes all allotted nuisance gas if code contract throws unknown exception',
postState: { postState: {
ExecutionManager: { ExecutionManager: {
messageRecord: { messageRecord: {
...@@ -178,8 +175,7 @@ const test_nuisanceGas: TestDefinition = { ...@@ -178,8 +175,7 @@ const test_nuisanceGas: TestDefinition = {
], ],
}, },
{ {
name: name: 'ovmCREATE consumes all allotted nuisance gas if creation code throws data-less exception',
'ovmCREATE consumes all allotted nuisance gas if creation code throws data-less exception',
parameters: [ parameters: [
{ {
name: 'give 1/2 gas to ovmCALL => ovmCREATE, evmINVALID', name: 'give 1/2 gas to ovmCALL => ovmCREATE, evmINVALID',
......
...@@ -90,8 +90,7 @@ const test_ovmCALL: TestDefinition = { ...@@ -90,8 +90,7 @@ const test_ovmCALL: TestDefinition = {
], ],
}, },
{ {
name: name: 'ovmCALL(ADDRESS_1) => ovmSSTORE + ovmSLOAD, ovmCALL(ADDRESS_1) => ovmSLOAD',
'ovmCALL(ADDRESS_1) => ovmSSTORE + ovmSLOAD, ovmCALL(ADDRESS_1) => ovmSLOAD',
steps: [ steps: [
{ {
functionName: 'ovmCALL', functionName: 'ovmCALL',
...@@ -140,8 +139,7 @@ const test_ovmCALL: TestDefinition = { ...@@ -140,8 +139,7 @@ const test_ovmCALL: TestDefinition = {
], ],
}, },
{ {
name: name: 'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmADDRESS + ovmCALLER',
'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmADDRESS + ovmCALLER',
steps: [ steps: [
{ {
functionName: 'ovmCALL', functionName: 'ovmCALL',
......
...@@ -401,8 +401,7 @@ const test_ovmCREATE: TestDefinition = { ...@@ -401,8 +401,7 @@ const test_ovmCREATE: TestDefinition = {
], ],
}, },
{ {
name: name: 'ovmCREATE => ovmSSTORE, ovmCALL(CREATED) => ovmSLOAD(EXIST) + ovmSLOAD(NONEXIST)',
'ovmCREATE => ovmSSTORE, ovmCALL(CREATED) => ovmSLOAD(EXIST) + ovmSLOAD(NONEXIST)',
steps: [ steps: [
{ {
functionName: 'ovmCREATE', functionName: 'ovmCREATE',
...@@ -450,8 +449,7 @@ const test_ovmCREATE: TestDefinition = { ...@@ -450,8 +449,7 @@ const test_ovmCREATE: TestDefinition = {
], ],
}, },
{ {
name: name: 'ovmCREATE => ovmCALL(ADDRESS_1) => ovmSSTORE, ovmCALL(ADDRESS_1) => ovmSLOAD',
'ovmCREATE => ovmCALL(ADDRESS_1) => ovmSSTORE, ovmCALL(ADDRESS_1) => ovmSLOAD',
steps: [ steps: [
{ {
functionName: 'ovmCREATE', functionName: 'ovmCREATE',
...@@ -503,8 +501,7 @@ const test_ovmCREATE: TestDefinition = { ...@@ -503,8 +501,7 @@ const test_ovmCREATE: TestDefinition = {
{ {
// TODO: appears to be failing due to a smoddit issue // TODO: appears to be failing due to a smoddit issue
skip: true, skip: true,
name: name: 'ovmCREATE => (ovmCALL(ADDRESS_2) => ovmSSTORE) + ovmREVERT, ovmCALL(ADDRESS_2) => ovmSLOAD',
'ovmCREATE => (ovmCALL(ADDRESS_2) => ovmSSTORE) + ovmREVERT, ovmCALL(ADDRESS_2) => ovmSLOAD',
steps: [ steps: [
{ {
functionName: 'ovmCREATE', functionName: 'ovmCREATE',
...@@ -775,7 +772,8 @@ const test_ovmCREATE: TestDefinition = { ...@@ -775,7 +772,8 @@ const test_ovmCREATE: TestDefinition = {
contractStorage: { contractStorage: {
[predeploys.OVM_DeployerWhitelist]: { [predeploys.OVM_DeployerWhitelist]: {
// initialized? true, allowArbitraryDeployment? false // initialized? true, allowArbitraryDeployment? false
'0x0000000000000000000000000000000000000000000000000000000000000000': getStorageXOR( '0x0000000000000000000000000000000000000000000000000000000000000000':
getStorageXOR(
'0x0000000000000000000000000000000000000000000000000000000000000001' '0x0000000000000000000000000000000000000000000000000000000000000001'
), ),
// non-whitelisted deployer is whitelisted? false // non-whitelisted deployer is whitelisted? false
...@@ -905,7 +903,8 @@ const test_ovmCREATE: TestDefinition = { ...@@ -905,7 +903,8 @@ const test_ovmCREATE: TestDefinition = {
contractStorage: { contractStorage: {
[predeploys.OVM_DeployerWhitelist]: { [predeploys.OVM_DeployerWhitelist]: {
// initialized? true, allowArbitraryDeployment? true // initialized? true, allowArbitraryDeployment? true
'0x0000000000000000000000000000000000000000000000000000000000000000': getStorageXOR( '0x0000000000000000000000000000000000000000000000000000000000000000':
getStorageXOR(
'0x0000000000000000000000000000000000000000000000000000000000000101' '0x0000000000000000000000000000000000000000000000000000000000000101'
), ),
// non-whitelisted deployer is whitelisted? false // non-whitelisted deployer is whitelisted? false
...@@ -946,7 +945,8 @@ const test_ovmCREATE: TestDefinition = { ...@@ -946,7 +945,8 @@ const test_ovmCREATE: TestDefinition = {
subSteps: [], subSteps: [],
}, },
expectedReturnStatus: true, expectedReturnStatus: true,
expectedReturnValue: CREATED_BY_NON_WHITELISTED_DEPLOYER, expectedReturnValue:
CREATED_BY_NON_WHITELISTED_DEPLOYER,
}, },
], ],
}, },
......
...@@ -54,10 +54,8 @@ const test_ovmCREATEEOA: TestDefinition = { ...@@ -54,10 +54,8 @@ const test_ovmCREATEEOA: TestDefinition = {
_messageHash: _messageHash:
'0x92d658d25f963af824e9d4bd533c165773d4a694a67d88135d119d5bca97c001', '0x92d658d25f963af824e9d4bd533c165773d4a694a67d88135d119d5bca97c001',
_v: 1, _v: 1,
_r: _r: '0x73757c671fae2c3fb6825766c724b7715720bda4b309d3612f2c623364556967',
'0x73757c671fae2c3fb6825766c724b7715720bda4b309d3612f2c623364556967', _s: '0x2fc9b7222783390b9f10e22e92a52871beaff2613193d6e2dbf18d0e2d2eb8ff',
_s:
'0x2fc9b7222783390b9f10e22e92a52871beaff2613193d6e2dbf18d0e2d2eb8ff',
}, },
expectedReturnStatus: true, expectedReturnStatus: true,
expectedReturnValue: undefined, expectedReturnValue: undefined,
......
...@@ -87,8 +87,7 @@ const test_ovmDELEGATECALL: TestDefinition = { ...@@ -87,8 +87,7 @@ const test_ovmDELEGATECALL: TestDefinition = {
], ],
}, },
{ {
name: name: 'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmCALLER',
'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmCALLER',
steps: [ steps: [
{ {
functionName: 'ovmCALL', functionName: 'ovmCALL',
...@@ -127,8 +126,7 @@ const test_ovmDELEGATECALL: TestDefinition = { ...@@ -127,8 +126,7 @@ const test_ovmDELEGATECALL: TestDefinition = {
], ],
}, },
{ {
name: name: 'ovmCALL(ADDRESS_1) => (ovmDELEGATECALL(ADDRESS_2) => ovmSSTORE) + ovmSLOAD',
'ovmCALL(ADDRESS_1) => (ovmDELEGATECALL(ADDRESS_2) => ovmSSTORE) + ovmSLOAD',
steps: [ steps: [
{ {
functionName: 'ovmCALL', functionName: 'ovmCALL',
...@@ -202,8 +200,7 @@ const test_ovmDELEGATECALL: TestDefinition = { ...@@ -202,8 +200,7 @@ const test_ovmDELEGATECALL: TestDefinition = {
], ],
}, },
{ {
name: name: 'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmDELEGATECALL(ADDRESS_4) => ovmCALLER',
'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmDELEGATECALL(ADDRESS_4) => ovmCALLER',
steps: [ steps: [
{ {
functionName: 'ovmCALL', functionName: 'ovmCALL',
...@@ -252,8 +249,7 @@ const test_ovmDELEGATECALL: TestDefinition = { ...@@ -252,8 +249,7 @@ const test_ovmDELEGATECALL: TestDefinition = {
], ],
}, },
{ {
name: name: 'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmDELEGATECALL(ADDRESS_4) => ovmADDRESS',
'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmDELEGATECALL(ADDRESS_4) => ovmADDRESS',
steps: [ steps: [
{ {
functionName: 'ovmCALL', functionName: 'ovmCALL',
...@@ -302,8 +298,7 @@ const test_ovmDELEGATECALL: TestDefinition = { ...@@ -302,8 +298,7 @@ const test_ovmDELEGATECALL: TestDefinition = {
], ],
}, },
{ {
name: name: 'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmDELEGATECALL(ADDRESS_4) => ovmCREATE',
'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmDELEGATECALL(ADDRESS_4) => ovmCREATE',
steps: [ steps: [
{ {
functionName: 'ovmCALL', functionName: 'ovmCALL',
......
...@@ -192,8 +192,7 @@ const test_ovmSTATICCALL: TestDefinition = { ...@@ -192,8 +192,7 @@ const test_ovmSTATICCALL: TestDefinition = {
], ],
}, },
{ {
name: name: 'ovmCALL(ADDRESS_1) => ovmSTATICCALL(ADDRESS_2) => ovmCALL(ADDRESS_3) => ovmSSTORE',
'ovmCALL(ADDRESS_1) => ovmSTATICCALL(ADDRESS_2) => ovmCALL(ADDRESS_3) => ovmSSTORE',
steps: [ steps: [
{ {
functionName: 'ovmCALL', functionName: 'ovmCALL',
...@@ -240,8 +239,7 @@ const test_ovmSTATICCALL: TestDefinition = { ...@@ -240,8 +239,7 @@ const test_ovmSTATICCALL: TestDefinition = {
], ],
}, },
{ {
name: name: 'ovmCALL(ADDRESS_1) => ovmSTATICCALL(ADDRESS_2) => ovmCALL(ADDRESS_3) => ovmSLOAD',
'ovmCALL(ADDRESS_1) => ovmSTATICCALL(ADDRESS_2) => ovmCALL(ADDRESS_3) => ovmSLOAD',
steps: [ steps: [
{ {
functionName: 'ovmCALL', functionName: 'ovmCALL',
...@@ -284,8 +282,7 @@ const test_ovmSTATICCALL: TestDefinition = { ...@@ -284,8 +282,7 @@ const test_ovmSTATICCALL: TestDefinition = {
], ],
}, },
{ {
name: name: 'ovmCALL(ADDRESS_1) => ovmSTATICCALL(ADDRESS_2) => ovmCALL(ADDRESS_3) => ovmCREATE',
'ovmCALL(ADDRESS_1) => ovmSTATICCALL(ADDRESS_2) => ovmCALL(ADDRESS_3) => ovmCREATE',
steps: [ steps: [
{ {
functionName: 'ovmCALL', functionName: 'ovmCALL',
......
...@@ -67,10 +67,9 @@ describe('OVM_BondManager', () => { ...@@ -67,10 +67,9 @@ describe('OVM_BondManager', () => {
token = await (await deployer.getContractFactory('TestERC20')).deploy() token = await (await deployer.getContractFactory('TestERC20')).deploy()
await token.mint(sender, ethers.utils.parseEther('100')) await token.mint(sender, ethers.utils.parseEther('100'))
bondManager = await (await smoddit('OVM_BondManager')).deploy( bondManager = await (
token.address, await smoddit('OVM_BondManager')
manager.address ).deploy(token.address, manager.address)
)
await manager.setAddress('OVM_BondManager', bondManager.address) await manager.setAddress('OVM_BondManager', bondManager.address)
await fraudVerifier.setBondManager(bondManager.address) await fraudVerifier.setBondManager(bondManager.address)
}) })
......
...@@ -35,9 +35,8 @@ describe('OVM_StateTransitionerFactory', () => { ...@@ -35,9 +35,8 @@ describe('OVM_StateTransitionerFactory', () => {
let OVM_StateTransitionerFactory: Contract let OVM_StateTransitionerFactory: Contract
let Mock__OVM_StateManagerFactory: MockContract let Mock__OVM_StateManagerFactory: MockContract
beforeEach(async () => { beforeEach(async () => {
OVM_StateTransitionerFactory = await Factory__OVM_StateTransitionerFactory.deploy( OVM_StateTransitionerFactory =
AddressManager.address await Factory__OVM_StateTransitionerFactory.deploy(AddressManager.address)
)
Mock__OVM_StateManagerFactory = await smockit('OVM_StateManagerFactory') Mock__OVM_StateManagerFactory = await smockit('OVM_StateManagerFactory')
Mock__OVM_StateManagerFactory.smocked.create.will.return.with( Mock__OVM_StateManagerFactory.smocked.create.will.return.with(
......
...@@ -44,7 +44,8 @@ describe('Lib_RLPWriter', () => { ...@@ -44,7 +44,8 @@ describe('Lib_RLPWriter', () => {
const randomAddress = '0x1234123412341234123412341234123412341234' const randomAddress = '0x1234123412341234123412341234123412341234'
const rlpEncodedRandomAddress = const rlpEncodedRandomAddress =
'0x941234123412341234123412341234123412341234' '0x941234123412341234123412341234123412341234'
const encoded = await Lib_RLPWriter.callStatic.writeAddressWithTaintedMemory( const encoded =
await Lib_RLPWriter.callStatic.writeAddressWithTaintedMemory(
randomAddress randomAddress
) )
expect(encoded).to.eq(rlpEncodedRandomAddress) expect(encoded).to.eq(rlpEncodedRandomAddress)
......
...@@ -10,20 +10,7 @@ import { fromHexString, toHexString } from '@eth-optimism/core-utils' ...@@ -10,20 +10,7 @@ import { fromHexString, toHexString } from '@eth-optimism/core-utils'
import { NON_NULL_BYTES32 } from '../../../helpers' import { NON_NULL_BYTES32 } from '../../../helpers'
const NODE_COUNTS = [ const NODE_COUNTS = [
2, 2, 3, 7, 9, 13, 63, 64, 123, 128, 129, 255, 1021, 1023, 1024,
3,
7,
9,
13,
63,
64,
123,
128,
129,
255,
1021,
1023,
1024,
] ]
const hash = (el: Buffer | string): Buffer => { const hash = (el: Buffer | string): Buffer => {
......
...@@ -6,7 +6,8 @@ export const encodeXDomainCalldata = ( ...@@ -6,7 +6,8 @@ export const encodeXDomainCalldata = (
message: string, message: string,
messageNonce: number messageNonce: number
): string => { ): string => {
return getContractInterface( return getContractInterface('OVM_L2CrossDomainMessenger').encodeFunctionData(
'OVM_L2CrossDomainMessenger' 'relayMessage',
).encodeFunctionData('relayMessage', [target, sender, message, messageNonce]) [target, sender, message, messageNonce]
)
} }
...@@ -16,7 +16,8 @@ export class GasMeasurement { ...@@ -16,7 +16,8 @@ export class GasMeasurement {
methodName: string, methodName: string,
methodArgs: Array<any> = [] methodArgs: Array<any> = []
): Promise<number> { ): Promise<number> {
const gasCost: number = await this.GasMeasurementContract.callStatic.measureCallGas( const gasCost: number =
await this.GasMeasurementContract.callStatic.measureCallGas(
targetContract.address, targetContract.address,
targetContract.interface.encodeFunctionData(methodName, methodArgs) targetContract.interface.encodeFunctionData(methodName, methodArgs)
) )
......
...@@ -83,7 +83,8 @@ export class ExecutionManagerTestRunner { ...@@ -83,7 +83,8 @@ export class ExecutionManagerTestRunner {
}, },
contractStorage: { contractStorage: {
[predeploys.OVM_DeployerWhitelist]: { [predeploys.OVM_DeployerWhitelist]: {
'0x0000000000000000000000000000000000000000000000000000000000000000': { '0x0000000000000000000000000000000000000000000000000000000000000000':
{
getStorageXOR: true, getStorageXOR: true,
value: ethers.constants.HashZero, value: ethers.constants.HashZero,
}, },
...@@ -91,7 +92,8 @@ export class ExecutionManagerTestRunner { ...@@ -91,7 +92,8 @@ export class ExecutionManagerTestRunner {
}, },
verifiedContractStorage: { verifiedContractStorage: {
[predeploys.OVM_DeployerWhitelist]: { [predeploys.OVM_DeployerWhitelist]: {
'0x0000000000000000000000000000000000000000000000000000000000000000': true, '0x0000000000000000000000000000000000000000000000000000000000000000':
true,
}, },
}, },
}, },
...@@ -275,9 +277,8 @@ export class ExecutionManagerTestRunner { ...@@ -275,9 +277,8 @@ export class ExecutionManagerTestRunner {
await ethers.getContractFactory('Helper_TestRunner') await ethers.getContractFactory('Helper_TestRunner')
).deploy() ).deploy()
this.contracts.Factory__Helper_TestRunner_CREATE = await ethers.getContractFactory( this.contracts.Factory__Helper_TestRunner_CREATE =
'Helper_TestRunner_CREATE' await ethers.getContractFactory('Helper_TestRunner_CREATE')
)
this.snapshot = await ethers.provider.send('evm_snapshot', []) this.snapshot = await ethers.provider.send('evm_snapshot', [])
} }
......
module.exports = { module.exports = {
"extends": "../../.eslintrc.js" extends: '../../.eslintrc.js',
} }
module.exports = {
...require('../../.prettierrc.js'),
};
\ No newline at end of file
../../.prettierrc.json
\ No newline at end of file
...@@ -14,8 +14,9 @@ ...@@ -14,8 +14,9 @@
"build": "tsc -p tsconfig.build.json", "build": "tsc -p tsconfig.build.json",
"clean": "rimraf dist/ ./tsconfig.build.tsbuildinfo", "clean": "rimraf dist/ ./tsconfig.build.tsbuildinfo",
"lint": "yarn lint:fix && yarn lint:check", "lint": "yarn lint:fix && yarn lint:check",
"lint:fix": "prettier --config .prettierrc.json --write '{src,test}/**/*.ts'", "lint:check": "eslint .",
"lint:check": "eslint -c .eslintrc.js --ext .ts --format stylish .", "lint:fix": "yarn lint:check --fix",
"pre-commit": "lint-staged",
"test": "ts-mocha test/**/*.spec.ts" "test": "ts-mocha test/**/*.spec.ts"
}, },
"devDependencies": { "devDependencies": {
...@@ -26,7 +27,9 @@ ...@@ -26,7 +27,9 @@
"@typescript-eslint/eslint-plugin": "^4.26.0", "@typescript-eslint/eslint-plugin": "^4.26.0",
"@typescript-eslint/parser": "^4.26.0", "@typescript-eslint/parser": "^4.26.0",
"chai": "^4.3.0", "chai": "^4.3.0",
"babel-eslint": "^10.1.0",
"eslint": "^7.27.0", "eslint": "^7.27.0",
"eslint-plugin-prettier": "^3.4.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-ban": "^1.5.2", "eslint-plugin-ban": "^1.5.2",
"eslint-plugin-import": "^2.23.4", "eslint-plugin-import": "^2.23.4",
...@@ -36,6 +39,7 @@ ...@@ -36,6 +39,7 @@
"eslint-plugin-unicorn": "^32.0.1", "eslint-plugin-unicorn": "^32.0.1",
"mocha": "^8.3.0", "mocha": "^8.3.0",
"prettier": "^2.2.1", "prettier": "^2.2.1",
"lint-staged": "11.0.0",
"ts-mocha": "^8.0.0", "ts-mocha": "^8.0.0",
"typescript": "^4.2.3" "typescript": "^4.2.3"
}, },
......
...@@ -16,13 +16,13 @@ export interface WatcherOptions { ...@@ -16,13 +16,13 @@ export interface WatcherOptions {
export class Watcher { export class Watcher {
public l1: Layer public l1: Layer
public l2: Layer public l2: Layer
public pollInterval: number = 3000 public pollInterval = 3000
public NUM_BLOCKS_TO_FETCH: number = 10_000_000 public NUM_BLOCKS_TO_FETCH = 10_000_000
constructor(opts: WatcherOptions) { constructor(opts: WatcherOptions) {
this.l1 = opts.l1 this.l1 = opts.l1
this.l2 = opts.l2 this.l2 = opts.l2
if(opts.pollInterval) { if (opts.pollInterval) {
this.pollInterval = opts.pollInterval this.pollInterval = opts.pollInterval
} }
} }
...@@ -36,14 +36,14 @@ export class Watcher { ...@@ -36,14 +36,14 @@ export class Watcher {
public async getL1TransactionReceipt( public async getL1TransactionReceipt(
l2ToL1MsgHash: string, l2ToL1MsgHash: string,
pollForPending: boolean = true pollForPending = true
): Promise<TransactionReceipt> { ): Promise<TransactionReceipt> {
return this.getTransactionReceipt(this.l1, l2ToL1MsgHash, pollForPending) return this.getTransactionReceipt(this.l1, l2ToL1MsgHash, pollForPending)
} }
public async getL2TransactionReceipt( public async getL2TransactionReceipt(
l1ToL2MsgHash: string, l1ToL2MsgHash: string,
pollForPending: boolean = true pollForPending = true
): Promise<TransactionReceipt> { ): Promise<TransactionReceipt> {
return this.getTransactionReceipt(this.l2, l1ToL2MsgHash, pollForPending) return this.getTransactionReceipt(this.l2, l1ToL2MsgHash, pollForPending)
} }
...@@ -76,7 +76,7 @@ export class Watcher { ...@@ -76,7 +76,7 @@ export class Watcher {
public async getTransactionReceipt( public async getTransactionReceipt(
layer: Layer, layer: Layer,
msgHash: string, msgHash: string,
pollForPending: boolean = true pollForPending = true
): Promise<TransactionReceipt> { ): Promise<TransactionReceipt> {
let matches: ethers.providers.Log[] = [] let matches: ethers.providers.Log[] = []
...@@ -87,12 +87,12 @@ export class Watcher { ...@@ -87,12 +87,12 @@ export class Watcher {
const successFilter: ethers.providers.Filter = { const successFilter: ethers.providers.Filter = {
address: layer.messengerAddress, address: layer.messengerAddress,
topics: [ethers.utils.id(`RelayedMessage(bytes32)`)], topics: [ethers.utils.id(`RelayedMessage(bytes32)`)],
fromBlock: startingBlock fromBlock: startingBlock,
} }
const failureFilter: ethers.providers.Filter = { const failureFilter: ethers.providers.Filter = {
address: layer.messengerAddress, address: layer.messengerAddress,
topics: [ethers.utils.id(`FailedRelayedMessage(bytes32)`)], topics: [ethers.utils.id(`FailedRelayedMessage(bytes32)`)],
fromBlock: startingBlock fromBlock: startingBlock,
} }
const successLogs = await layer.provider.getLogs(successFilter) const successLogs = await layer.provider.getLogs(successFilter)
const failureLogs = await layer.provider.getLogs(failureFilter) const failureLogs = await layer.provider.getLogs(failureFilter)
...@@ -105,7 +105,7 @@ export class Watcher { ...@@ -105,7 +105,7 @@ export class Watcher {
} }
// pause awhile before trying again // pause awhile before trying again
await new Promise(r => setTimeout(r, this.pollInterval)) await new Promise((r) => setTimeout(r, this.pollInterval))
} }
// Message was relayed in the past // Message was relayed in the past
......
module.exports = { module.exports = {
"extends": "../../.eslintrc.js" extends: '../../.eslintrc.js',
} }
module.exports = {
...require('../../.prettierrc.js'),
};
\ No newline at end of file
../../.prettierrc.json
\ No newline at end of file
...@@ -13,12 +13,13 @@ ...@@ -13,12 +13,13 @@
"clean": "rimraf ./dist ./tsconfig.build.tsbuildinfo", "clean": "rimraf ./dist ./tsconfig.build.tsbuildinfo",
"clean:db": "rimraf ./db", "clean:db": "rimraf ./db",
"lint": "yarn run lint:fix && yarn run lint:check", "lint": "yarn run lint:fix && yarn run lint:check",
"lint:fix": "prettier --config .prettierrc.json --write \"{src,exec,test}/**/*.ts\"", "lint:fix": "yarn lint:check --fix",
"lint:check": "eslint -c .eslintrc.js --ext .ts --format stylish .", "lint:check": "eslint .",
"start": "ts-node ./src/services/run.ts", "start": "ts-node ./src/services/run.ts",
"start:local": "ts-node ./src/services/run.ts | pino-pretty", "start:local": "ts-node ./src/services/run.ts | pino-pretty",
"test": "hardhat --config test/config/hardhat.config.ts test", "test": "hardhat --config test/config/hardhat.config.ts test",
"build": "tsc -p tsconfig.build.json" "build": "tsc -p tsconfig.build.json",
"pre-commit": "lint-staged"
}, },
"dependencies": { "dependencies": {
"@eth-optimism/common-ts": "^0.1.4", "@eth-optimism/common-ts": "^0.1.4",
...@@ -57,7 +58,9 @@ ...@@ -57,7 +58,9 @@
"@typescript-eslint/parser": "^4.26.0", "@typescript-eslint/parser": "^4.26.0",
"chai": "^4.3.4", "chai": "^4.3.4",
"chai-as-promised": "^7.1.1", "chai-as-promised": "^7.1.1",
"babel-eslint": "^10.1.0",
"eslint": "^7.27.0", "eslint": "^7.27.0",
"eslint-plugin-prettier": "^3.4.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-ban": "^1.5.2", "eslint-plugin-ban": "^1.5.2",
"eslint-plugin-import": "^2.23.4", "eslint-plugin-import": "^2.23.4",
...@@ -69,6 +72,7 @@ ...@@ -69,6 +72,7 @@
"mocha": "^8.3.2", "mocha": "^8.3.2",
"pino-pretty": "^4.7.1", "pino-pretty": "^4.7.1",
"prettier": "^2.2.1", "prettier": "^2.2.1",
"lint-staged": "11.0.0",
"prom-client": "^13.1.0", "prom-client": "^13.1.0",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"ts-node": "^9.1.1", "ts-node": "^9.1.1",
......
...@@ -46,7 +46,7 @@ const registerMetrics = ({ ...@@ -46,7 +46,7 @@ const registerMetrics = ({
name: 'data_transport_layer_l1_unhandled_error_count', name: 'data_transport_layer_l1_unhandled_error_count',
help: 'Number of times recovered from unhandled errors', help: 'Number of times recovered from unhandled errors',
registers: [registry], registers: [registry],
}) }),
}) })
export interface L1IngestionServiceOptions export interface L1IngestionServiceOptions
...@@ -168,7 +168,8 @@ export class L1IngestionService extends BaseService<L1IngestionServiceOptions> { ...@@ -168,7 +168,8 @@ export class L1IngestionService extends BaseService<L1IngestionServiceOptions> {
// Store the total number of submitted transactions so the server can tell clients if we're // Store the total number of submitted transactions so the server can tell clients if we're
// done syncing or not // done syncing or not
const totalElements = await this.state.contracts.OVM_CanonicalTransactionChain.getTotalElements() const totalElements =
await this.state.contracts.OVM_CanonicalTransactionChain.getTotalElements()
if (totalElements > 0) { if (totalElements > 0) {
await this.state.db.putHighestL2BlockNumber(totalElements - 1) await this.state.db.putHighestL2BlockNumber(totalElements - 1)
} }
...@@ -246,9 +247,14 @@ export class L1IngestionService extends BaseService<L1IngestionServiceOptions> { ...@@ -246,9 +247,14 @@ export class L1IngestionService extends BaseService<L1IngestionServiceOptions> {
// Different functions for getting the last good element depending on the event type. // Different functions for getting the last good element depending on the event type.
const handlers = { const handlers = {
SequencerBatchAppended: this.state.db.getLatestTransactionBatch.bind(this.state.db), SequencerBatchAppended:
StateBatchAppended: this.state.db.getLatestStateRootBatch.bind(this.state.db), this.state.db.getLatestTransactionBatch.bind(this.state.db),
TransactionEnqueued: this.state.db.getLatestEnqueue.bind(this.state.db), StateBatchAppended: this.state.db.getLatestStateRootBatch.bind(
this.state.db
),
TransactionEnqueued: this.state.db.getLatestEnqueue.bind(
this.state.db
),
} }
// Find the last good element and reset the highest synced L1 block to go back to the // Find the last good element and reset the highest synced L1 block to go back to the
...@@ -325,8 +331,11 @@ export class L1IngestionService extends BaseService<L1IngestionServiceOptions> { ...@@ -325,8 +331,11 @@ export class L1IngestionService extends BaseService<L1IngestionServiceOptions> {
// We need to figure out how to make this work without Infura. Mark and I think that infura is // We need to figure out how to make this work without Infura. Mark and I think that infura is
// doing some indexing of events beyond Geth's native capabilities, meaning some event logic // doing some indexing of events beyond Geth's native capabilities, meaning some event logic
// will only work on Infura and not on a local geth instance. Not great. // will only work on Infura and not on a local geth instance. Not great.
const addressSetEvents = await this.state.contracts.Lib_AddressManager.queryFilter( const addressSetEvents =
this.state.contracts.Lib_AddressManager.filters.AddressSet(contractName), await this.state.contracts.Lib_AddressManager.queryFilter(
this.state.contracts.Lib_AddressManager.filters.AddressSet(
contractName
),
fromL1Block, fromL1Block,
toL1Block toL1Block
) )
......
...@@ -229,7 +229,8 @@ export class L1TransportServer extends BaseService<L1TransportServerOptions> { ...@@ -229,7 +229,8 @@ export class L1TransportServer extends BaseService<L1TransportServerOptions> {
highestL2BlockNumber = await this.state.db.getHighestL2BlockNumber() highestL2BlockNumber = await this.state.db.getHighestL2BlockNumber()
break break
case 'l2': case 'l2':
currentL2Block = await this.state.db.getLatestUnconfirmedTransaction() currentL2Block =
await this.state.db.getLatestUnconfirmedTransaction()
highestL2BlockNumber = highestL2BlockNumber =
(await this.state.db.getHighestSyncedUnconfirmedBlock()) - 1 (await this.state.db.getHighestSyncedUnconfirmedBlock()) - 1
break break
...@@ -472,7 +473,8 @@ export class L1TransportServer extends BaseService<L1TransportServerOptions> { ...@@ -472,7 +473,8 @@ export class L1TransportServer extends BaseService<L1TransportServerOptions> {
} }
} }
const transactions = await this.state.db.getFullTransactionsByIndexRange( const transactions =
await this.state.db.getFullTransactionsByIndexRange(
BigNumber.from(batch.prevTotalElements).toNumber(), BigNumber.from(batch.prevTotalElements).toNumber(),
BigNumber.from(batch.prevTotalElements).toNumber() + BigNumber.from(batch.prevTotalElements).toNumber() +
BigNumber.from(batch.size).toNumber() BigNumber.from(batch.size).toNumber()
...@@ -500,7 +502,8 @@ export class L1TransportServer extends BaseService<L1TransportServerOptions> { ...@@ -500,7 +502,8 @@ export class L1TransportServer extends BaseService<L1TransportServerOptions> {
} }
} }
const transactions = await this.state.db.getFullTransactionsByIndexRange( const transactions =
await this.state.db.getFullTransactionsByIndexRange(
BigNumber.from(batch.prevTotalElements).toNumber(), BigNumber.from(batch.prevTotalElements).toNumber(),
BigNumber.from(batch.prevTotalElements).toNumber() + BigNumber.from(batch.prevTotalElements).toNumber() +
BigNumber.from(batch.size).toNumber() BigNumber.from(batch.size).toNumber()
......
...@@ -30,8 +30,7 @@ export const l2Block = { ...@@ -30,8 +30,7 @@ export const l2Block = {
from: '0x5c7c6d069ba232718f37c27a9549b547c359e31c', from: '0x5c7c6d069ba232718f37c27a9549b547c359e31c',
gas: '0x89543f', gas: '0x89543f',
gasPrice: '0x0', gasPrice: '0x0',
hash: hash: '0x36f562ff7cfab052de0bae8b244d07a6587068b2070921fec10b228e014a893a',
'0x36f562ff7cfab052de0bae8b244d07a6587068b2070921fec10b228e014a893a',
input: '0xaf086c7e', input: '0xaf086c7e',
nonce: '0x14', nonce: '0x14',
to: '0x8700daec35af8ff88c16bdf0418774cb3d7599b4', to: '0x8700daec35af8ff88c16bdf0418774cb3d7599b4',
...@@ -73,8 +72,7 @@ export const blocksOnL2 = [ ...@@ -73,8 +72,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000088b4b479761b16775f7f694153a94c9627baf1343d62e5990493cee6dd420a08784c42319c815d6d48da67158bf663aa14dc0e0297677a62f8665f57e55c7fc601', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000088b4b479761b16775f7f694153a94c9627baf1343d62e5990493cee6dd420a08784c42319c815d6d48da67158bf663aa14dc0e0297677a62f8665f57e55c7fc601',
transactions: [ transactions: [
{ {
hash: hash: '0x49fc6f3f0c9290202f477cf13a7249ec5a663b16cba331baf3d124e50627ec7a',
'0x49fc6f3f0c9290202f477cf13a7249ec5a663b16cba331baf3d124e50627ec7a',
blockHash: blockHash:
'0x68023303de0238e86409a0f22b4bac8b61a21048dc07c0b4248b1458fe9dd983', '0x68023303de0238e86409a0f22b4bac8b61a21048dc07c0b4248b1458fe9dd983',
blockNumber: 73678, blockNumber: 73678,
...@@ -110,8 +108,7 @@ export const blocksOnL2 = [ ...@@ -110,8 +108,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000007a37d1a9cb72cde3de0a047472cfef3d217cd85bb313129c88f441744a8123f535d319ae095fa5976af44f83bb32e2d4e910fe17b2066b78bac394b4cef24a500', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000007a37d1a9cb72cde3de0a047472cfef3d217cd85bb313129c88f441744a8123f535d319ae095fa5976af44f83bb32e2d4e910fe17b2066b78bac394b4cef24a500',
transactions: [ transactions: [
{ {
hash: hash: '0x9ffc4108faec8b44781e68c64c59546d3862d5ab0ee2337868fc0808acfb018e',
'0x9ffc4108faec8b44781e68c64c59546d3862d5ab0ee2337868fc0808acfb018e',
blockHash: blockHash:
'0x91b7407da8e2dcba6b093771efe842becddc2c728689429d0f399621eb9e3431', '0x91b7407da8e2dcba6b093771efe842becddc2c728689429d0f399621eb9e3431',
blockNumber: 73679, blockNumber: 73679,
...@@ -123,8 +120,7 @@ export const blocksOnL2 = [ ...@@ -123,8 +120,7 @@ export const blocksOnL2 = [
to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64', to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 24258, nonce: 24258,
data: data: '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e49750000000000000000000000000000000000000000000000000000000000000001534e58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000013ee5cec085b38000',
'0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e49750000000000000000000000000000000000000000000000000000000000000001534e58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000013ee5cec085b38000',
r: '0xeabe2f5db7a62275de799b9aee03f55f01743563bbee17e722cd2efb0b1fbc1a', r: '0xeabe2f5db7a62275de799b9aee03f55f01743563bbee17e722cd2efb0b1fbc1a',
s: '0x246ba5723b499d41bd46f7c20c5eab5216e7b5adac96043c2d671de2b4758820', s: '0x246ba5723b499d41bd46f7c20c5eab5216e7b5adac96043c2d671de2b4758820',
v: 55, v: 55,
...@@ -148,8 +144,7 @@ export const blocksOnL2 = [ ...@@ -148,8 +144,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000cef0ac2dc68816a76c28704b97abd4b4b04ad6b3facc55e276d449c997005dd40fac04ef358a61f89bcf19e1213d22329bb034e599581c3cb40381329505f28700', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000cef0ac2dc68816a76c28704b97abd4b4b04ad6b3facc55e276d449c997005dd40fac04ef358a61f89bcf19e1213d22329bb034e599581c3cb40381329505f28700',
transactions: [ transactions: [
{ {
hash: hash: '0x9f6228cae03e5c83014f9f711b554f7dea4de0079c7d75c18f04c2bb0e24c897',
'0x9f6228cae03e5c83014f9f711b554f7dea4de0079c7d75c18f04c2bb0e24c897',
blockHash: blockHash:
'0xace843bfc78bc930a5c4955c9ac6336b60b020e497368520c4b1ec3e6102fdc4', '0xace843bfc78bc930a5c4955c9ac6336b60b020e497368520c4b1ec3e6102fdc4',
blockNumber: 73680, blockNumber: 73680,
...@@ -185,8 +180,7 @@ export const blocksOnL2 = [ ...@@ -185,8 +180,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000398bf370d00d4fa2454c54b437c280063d1e9ecff2d1c82ddcf8ce5c164cbdce06905ab23dc9084f1af4555bc7e47b09e7d15ed18d9429efa20d6a7fea0b7c4e01', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000398bf370d00d4fa2454c54b437c280063d1e9ecff2d1c82ddcf8ce5c164cbdce06905ab23dc9084f1af4555bc7e47b09e7d15ed18d9429efa20d6a7fea0b7c4e01',
transactions: [ transactions: [
{ {
hash: hash: '0xf9d0a11892260e21652690362f2bc29a2839f7627e34e15d3400709c94eef796',
'0xf9d0a11892260e21652690362f2bc29a2839f7627e34e15d3400709c94eef796',
blockHash: blockHash:
'0x001afa52f3333732a71311a964ba6487954489df7c6bffab6fde77b67d5a453d', '0x001afa52f3333732a71311a964ba6487954489df7c6bffab6fde77b67d5a453d',
blockNumber: 73681, blockNumber: 73681,
...@@ -222,8 +216,7 @@ export const blocksOnL2 = [ ...@@ -222,8 +216,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000051fe45f8fcde6a23a4eacee467c0106bceedb33bdb6878ad87ddea51bc81945131fe36361070e4d5fb40fc8f26215cb8aa71e24de8f373f06f2688132b3bdcc401', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000051fe45f8fcde6a23a4eacee467c0106bceedb33bdb6878ad87ddea51bc81945131fe36361070e4d5fb40fc8f26215cb8aa71e24de8f373f06f2688132b3bdcc401',
transactions: [ transactions: [
{ {
hash: hash: '0xef6e9e9d95d5b77dda3f26b453e321ed16692188447768b9f035717e11a3dd17',
'0xef6e9e9d95d5b77dda3f26b453e321ed16692188447768b9f035717e11a3dd17',
blockHash: blockHash:
'0xe0afa2a810396e4d10464760db8e16deba432b134993538ccc9891f4270427b7', '0xe0afa2a810396e4d10464760db8e16deba432b134993538ccc9891f4270427b7',
blockNumber: 73682, blockNumber: 73682,
...@@ -235,8 +228,7 @@ export const blocksOnL2 = [ ...@@ -235,8 +228,7 @@ export const blocksOnL2 = [
to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64', to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 24259, nonce: 24259,
data: data: '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e49d40000000000000000000000000000000000000000000000000000000000000001534e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000141371c5e03310000',
'0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e49d40000000000000000000000000000000000000000000000000000000000000001534e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000141371c5e03310000',
r: '0x8d4e5a4defd67ce253e0232e10a592857b6d04b0be36abe1fe4cefa24987df12', r: '0x8d4e5a4defd67ce253e0232e10a592857b6d04b0be36abe1fe4cefa24987df12',
s: '0x4b96b5840e08d70c536c1a49e28d767289c388b6cfade572989e74a4f28b3666', s: '0x4b96b5840e08d70c536c1a49e28d767289c388b6cfade572989e74a4f28b3666',
v: 55, v: 55,
...@@ -260,8 +252,7 @@ export const blocksOnL2 = [ ...@@ -260,8 +252,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000d44d1f8d8e10795813aa29eecc9fdd6510b1bfe41dfbdedc282de846a204d89259e85cb7125b99ce4eb7a4c4d27e955be4bba0f3b7bf74f62cad78f9904f58db00', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000d44d1f8d8e10795813aa29eecc9fdd6510b1bfe41dfbdedc282de846a204d89259e85cb7125b99ce4eb7a4c4d27e955be4bba0f3b7bf74f62cad78f9904f58db00',
transactions: [ transactions: [
{ {
hash: hash: '0x6e15c6b6305f5c275af6199d9361b3366dbe4c35163ffa2daf9f7efe0d9c135f',
'0x6e15c6b6305f5c275af6199d9361b3366dbe4c35163ffa2daf9f7efe0d9c135f',
blockHash: blockHash:
'0xaffdf748d0430b898ea75dd17326a1f68025b3689b173a9bf56bee30f537a1e4', '0xaffdf748d0430b898ea75dd17326a1f68025b3689b173a9bf56bee30f537a1e4',
blockNumber: 73683, blockNumber: 73683,
...@@ -297,8 +288,7 @@ export const blocksOnL2 = [ ...@@ -297,8 +288,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000cf5b6fbc249bddbc22c690d02a0070f385196b2c1e884a06dd501d9f4f563a1537ed70a69b7bc59d386f26b2649c11d670c39a087fc5fdcb1f7615287b953cef00', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000cf5b6fbc249bddbc22c690d02a0070f385196b2c1e884a06dd501d9f4f563a1537ed70a69b7bc59d386f26b2649c11d670c39a087fc5fdcb1f7615287b953cef00',
transactions: [ transactions: [
{ {
hash: hash: '0x8af76247f7a24ca13fd3256ccb591b2d3a1fceb0d4a4f190ab618460847c9cd7',
'0x8af76247f7a24ca13fd3256ccb591b2d3a1fceb0d4a4f190ab618460847c9cd7',
blockHash: blockHash:
'0xdfb87044d5d122e1405c6cdfa664f3e8e7cf6251b60d5b3e111c1410eb60a5b8', '0xdfb87044d5d122e1405c6cdfa664f3e8e7cf6251b60d5b3e111c1410eb60a5b8',
blockNumber: 73684, blockNumber: 73684,
...@@ -334,8 +324,7 @@ export const blocksOnL2 = [ ...@@ -334,8 +324,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000063ac1e35567c4b2092f0d8d26b7e71c3762a7eda2b48b489df55b1ade1eceadf6ceee276534f205ad9073e15c89c0808877c1421e4766e9d363b3c895fe2967001', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000063ac1e35567c4b2092f0d8d26b7e71c3762a7eda2b48b489df55b1ade1eceadf6ceee276534f205ad9073e15c89c0808877c1421e4766e9d363b3c895fe2967001',
transactions: [ transactions: [
{ {
hash: hash: '0x4319bb56f1745d2493c3b9355be051c4f1fe6eb2dec7700d1120f45681dfcc49',
'0x4319bb56f1745d2493c3b9355be051c4f1fe6eb2dec7700d1120f45681dfcc49',
blockHash: blockHash:
'0x4326c91d83f895f17c7b0eb2733ed1066d22b980cbb701c17f4ae6865622bd30', '0x4326c91d83f895f17c7b0eb2733ed1066d22b980cbb701c17f4ae6865622bd30',
blockNumber: 73685, blockNumber: 73685,
...@@ -371,8 +360,7 @@ export const blocksOnL2 = [ ...@@ -371,8 +360,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000063d3e259d0ca893fbf84d1d410f3a0e0519f07e92ac678ebef13b647312ac50460688b2978c8361bd7ed10971da377b14bfce15689e02e08a90f9893118373df01', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000063d3e259d0ca893fbf84d1d410f3a0e0519f07e92ac678ebef13b647312ac50460688b2978c8361bd7ed10971da377b14bfce15689e02e08a90f9893118373df01',
transactions: [ transactions: [
{ {
hash: hash: '0xe11361ef73f50942cc8d2d72ed48dd0d9f835e665becfa4a23de248c5b45dcec',
'0xe11361ef73f50942cc8d2d72ed48dd0d9f835e665becfa4a23de248c5b45dcec',
blockHash: blockHash:
'0x5740335e1987214985902828cb0e9b5f3cae7ce72605a3ce3f94bbf8dbb4a47a', '0x5740335e1987214985902828cb0e9b5f3cae7ce72605a3ce3f94bbf8dbb4a47a',
blockNumber: 73686, blockNumber: 73686,
...@@ -408,8 +396,7 @@ export const blocksOnL2 = [ ...@@ -408,8 +396,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000003bd14f97e370f17aac8580961f7a268b620f79adcd93097071e4e6ff3bfe74fe5a1efa86d485916fcdcc9f21abcf8d1ebf9d5d5e7f478450dae95ce916891e2a00', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000003bd14f97e370f17aac8580961f7a268b620f79adcd93097071e4e6ff3bfe74fe5a1efa86d485916fcdcc9f21abcf8d1ebf9d5d5e7f478450dae95ce916891e2a00',
transactions: [ transactions: [
{ {
hash: hash: '0xfc82b93bf7b2ce20d6098cf6323a87302239f409aefde426367f34f3cb902394',
'0xfc82b93bf7b2ce20d6098cf6323a87302239f409aefde426367f34f3cb902394',
blockHash: blockHash:
'0xe7b33fec42b73de9decf8ecda717720860740f3f78999f75394dee2d833a06a0', '0xe7b33fec42b73de9decf8ecda717720860740f3f78999f75394dee2d833a06a0',
blockNumber: 73687, blockNumber: 73687,
...@@ -445,8 +432,7 @@ export const blocksOnL2 = [ ...@@ -445,8 +432,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000063e3f1cefd147957d83e02c6b531e64527b378c6edbcedd83311a11f4f4c6a925ab7307fbb98e3688d5517a0e599a88603e5a0ef2daec7b0a2ff22365e23ac0a01', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000063e3f1cefd147957d83e02c6b531e64527b378c6edbcedd83311a11f4f4c6a925ab7307fbb98e3688d5517a0e599a88603e5a0ef2daec7b0a2ff22365e23ac0a01',
transactions: [ transactions: [
{ {
hash: hash: '0x1576160357144d0ce49923bb4c7dad181a80bcd5fd4a621c0dc3a48c2112a8e9',
'0x1576160357144d0ce49923bb4c7dad181a80bcd5fd4a621c0dc3a48c2112a8e9',
blockHash: blockHash:
'0x3832d0ec3cd8002d88c48d25cf023ab74df70e8a24f98082730f3de0a173c8df', '0x3832d0ec3cd8002d88c48d25cf023ab74df70e8a24f98082730f3de0a173c8df',
blockNumber: 73688, blockNumber: 73688,
...@@ -458,8 +444,7 @@ export const blocksOnL2 = [ ...@@ -458,8 +444,7 @@ export const blocksOnL2 = [
to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 42, nonce: 42,
data: data: '0x8a2900140000000000000000000000000000000000000000000000006f05b59d3b200000',
'0x8a2900140000000000000000000000000000000000000000000000006f05b59d3b200000',
r: '0x9cedf37f33c099a4b81e0dc68c4b8d23a1150624d5cca9b938d4aa3c21aaef8c', r: '0x9cedf37f33c099a4b81e0dc68c4b8d23a1150624d5cca9b938d4aa3c21aaef8c',
s: '0x17ff865e8605486a0ecec67b685f1ae38f3c0158e19ed23a986363ccd2ccdb0f', s: '0x17ff865e8605486a0ecec67b685f1ae38f3c0158e19ed23a986363ccd2ccdb0f',
v: 56, v: 56,
...@@ -483,8 +468,7 @@ export const blocksOnL2 = [ ...@@ -483,8 +468,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000080079f5a26817ec5721e18a82f396c07b035eeeb1f2fed3eb52c90fbc423910514107ec03e1e27898d676a056d8bb0651af1ded4957d12614d013681294e780701', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000080079f5a26817ec5721e18a82f396c07b035eeeb1f2fed3eb52c90fbc423910514107ec03e1e27898d676a056d8bb0651af1ded4957d12614d013681294e780701',
transactions: [ transactions: [
{ {
hash: hash: '0x3b92a86eadcd1d882af5d01ce3e5804f091dc6d6804a359c46579700c6776442',
'0x3b92a86eadcd1d882af5d01ce3e5804f091dc6d6804a359c46579700c6776442',
blockHash: blockHash:
'0x64a68fe275f33786a5265645b86f5c497af641d6e5c9d5a5d2266e90cb71f2f8', '0x64a68fe275f33786a5265645b86f5c497af641d6e5c9d5a5d2266e90cb71f2f8',
blockNumber: 73689, blockNumber: 73689,
...@@ -520,8 +504,7 @@ export const blocksOnL2 = [ ...@@ -520,8 +504,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000021f7762a74a309de30f9e1ac373d6bd3ff6bf79ba6cdc9dc0284f79fb3aaad54154e9900ad6f551110b1b3920d8df09eb881a79b22b175b4eb1bd12258dec5fd01', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000021f7762a74a309de30f9e1ac373d6bd3ff6bf79ba6cdc9dc0284f79fb3aaad54154e9900ad6f551110b1b3920d8df09eb881a79b22b175b4eb1bd12258dec5fd01',
transactions: [ transactions: [
{ {
hash: hash: '0xe8fef05c2bd5660805bd1bfcd2b70ef08cddf3a562855ef30de01f6bd5cd21e1',
'0xe8fef05c2bd5660805bd1bfcd2b70ef08cddf3a562855ef30de01f6bd5cd21e1',
blockHash: blockHash:
'0x28c92ce3bd687ef83df8f7b8c525a314ce1a2c20c93b37a3c4c447a645f42df7', '0x28c92ce3bd687ef83df8f7b8c525a314ce1a2c20c93b37a3c4c447a645f42df7',
blockNumber: 73690, blockNumber: 73690,
...@@ -557,8 +540,7 @@ export const blocksOnL2 = [ ...@@ -557,8 +540,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004fbc83a058cf53437a24d6a0dbf06025c75cbf4053ec14b13cefe267c654da4a1dc65ab0f76d6b6c37208c5f096953f2736c76ccf6115412a8cf18325bb6f81501', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004fbc83a058cf53437a24d6a0dbf06025c75cbf4053ec14b13cefe267c654da4a1dc65ab0f76d6b6c37208c5f096953f2736c76ccf6115412a8cf18325bb6f81501',
transactions: [ transactions: [
{ {
hash: hash: '0x7d0733bbbb72b71c608a293f40e51899ba2791ad9325e98ae10b4f061dfa359d',
'0x7d0733bbbb72b71c608a293f40e51899ba2791ad9325e98ae10b4f061dfa359d',
blockHash: blockHash:
'0xad99822f1b2f28c1054138e14f54ddcd11dc71f7866b5a3c77f03c2c3a90e232', '0xad99822f1b2f28c1054138e14f54ddcd11dc71f7866b5a3c77f03c2c3a90e232',
blockNumber: 73691, blockNumber: 73691,
...@@ -594,8 +576,7 @@ export const blocksOnL2 = [ ...@@ -594,8 +576,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000009441bdc2075f112b61f35734b2d186570563f0acd43158d88a8d65b80f3691dd259646b7824c15a0dbd834b3ef24a0ec1890b3571c6771efa0a744826effbee800', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000009441bdc2075f112b61f35734b2d186570563f0acd43158d88a8d65b80f3691dd259646b7824c15a0dbd834b3ef24a0ec1890b3571c6771efa0a744826effbee800',
transactions: [ transactions: [
{ {
hash: hash: '0x14618ba9bebc80c3364f9baa82ba54861002f3ccf667b3f0d4c96e0f940e435a',
'0x14618ba9bebc80c3364f9baa82ba54861002f3ccf667b3f0d4c96e0f940e435a',
blockHash: blockHash:
'0x533dc590019babb21b92ea82cee2d0377ec7e425e0bb6587fa7691526506bf08', '0x533dc590019babb21b92ea82cee2d0377ec7e425e0bb6587fa7691526506bf08',
blockNumber: 73692, blockNumber: 73692,
...@@ -607,8 +588,7 @@ export const blocksOnL2 = [ ...@@ -607,8 +588,7 @@ export const blocksOnL2 = [
to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64', to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 24260, nonce: 24260,
data: data: '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e4ae20000000000000000000000000000000000000000000000000000000000000001534e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000143687087b5b40000',
'0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e4ae20000000000000000000000000000000000000000000000000000000000000001534e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000143687087b5b40000',
r: '0x9d2d26177c80858fdba6683fa5d095dacb9634e9deb842286ec79c17d85f0d7b', r: '0x9d2d26177c80858fdba6683fa5d095dacb9634e9deb842286ec79c17d85f0d7b',
s: '0x70c617d7878dded6bf0a7ca7fc1371e8bced146f6e7d0da215f67e9e0f92940c', s: '0x70c617d7878dded6bf0a7ca7fc1371e8bced146f6e7d0da215f67e9e0f92940c',
v: 56, v: 56,
...@@ -632,8 +612,7 @@ export const blocksOnL2 = [ ...@@ -632,8 +612,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000076e54a64d58f463397917778db3817de2603cfd22657baf39126366132a9e83623af7fc78252949fac2600ed40aa575aecd3622a56643fcda2fc1b1ab15e147c00', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000076e54a64d58f463397917778db3817de2603cfd22657baf39126366132a9e83623af7fc78252949fac2600ed40aa575aecd3622a56643fcda2fc1b1ab15e147c00',
transactions: [ transactions: [
{ {
hash: hash: '0x62c03ecdb471b8e66a9d7213dd42040fb830c969a4bb3e78967b705db5d41680',
'0x62c03ecdb471b8e66a9d7213dd42040fb830c969a4bb3e78967b705db5d41680',
blockHash: blockHash:
'0xdc97d3bf5576c082469a8bc4b195302984d3852fe6730db499f176ebeb5f214c', '0xdc97d3bf5576c082469a8bc4b195302984d3852fe6730db499f176ebeb5f214c',
blockNumber: 73693, blockNumber: 73693,
...@@ -645,8 +624,7 @@ export const blocksOnL2 = [ ...@@ -645,8 +624,7 @@ export const blocksOnL2 = [
to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 26, nonce: 26,
data: data: '0x8a2900140000000000000000000000000000000000000000000000008ac7230489e80000',
'0x8a2900140000000000000000000000000000000000000000000000008ac7230489e80000',
r: '0x8e22501ff1c962656f4bfbdab7479cc4ed8c91486c4b19150d03782d7f374467', r: '0x8e22501ff1c962656f4bfbdab7479cc4ed8c91486c4b19150d03782d7f374467',
s: '0x036d7cd2cdba105a4d916dfea70fb8cc2c60121f3baca85c6f2a48909c34d378', s: '0x036d7cd2cdba105a4d916dfea70fb8cc2c60121f3baca85c6f2a48909c34d378',
v: 56, v: 56,
...@@ -670,8 +648,7 @@ export const blocksOnL2 = [ ...@@ -670,8 +648,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000164245eb8a513b195ceb0a3317f2d38fdc02a934eda73c2e556dbc53da1839031077bebd5328202b114930f4688787189e76916a645dda569c38824b7d0c892000', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000164245eb8a513b195ceb0a3317f2d38fdc02a934eda73c2e556dbc53da1839031077bebd5328202b114930f4688787189e76916a645dda569c38824b7d0c892000',
transactions: [ transactions: [
{ {
hash: hash: '0x04244086fb7aa251c2a0bdee26f8af06d8459909b8e0b317c563f07035edec03',
'0x04244086fb7aa251c2a0bdee26f8af06d8459909b8e0b317c563f07035edec03',
blockHash: blockHash:
'0xaac44b1deb159d989af39e2547c6480445b29eb3fb074427655977dc30a97605', '0xaac44b1deb159d989af39e2547c6480445b29eb3fb074427655977dc30a97605',
blockNumber: 73694, blockNumber: 73694,
...@@ -707,8 +684,7 @@ export const blocksOnL2 = [ ...@@ -707,8 +684,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000c0f0d02041da809fb25373942fbf7f6b49c94898ff22b9aeafea7bbb5b3541404f4dcc4ca346dde61f8bdba9af17abd55e5b810f8ad444218a44aa92aa98e64501', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000c0f0d02041da809fb25373942fbf7f6b49c94898ff22b9aeafea7bbb5b3541404f4dcc4ca346dde61f8bdba9af17abd55e5b810f8ad444218a44aa92aa98e64501',
transactions: [ transactions: [
{ {
hash: hash: '0x826efd6567d7d0f8ad770cf2110d49e57a931f74e65c70367e63eef0dfe13382',
'0x826efd6567d7d0f8ad770cf2110d49e57a931f74e65c70367e63eef0dfe13382',
blockHash: blockHash:
'0x847cf035bfdb8a22c697e36e89c511a1c952652645b2d9b951d8a0a0edd88f01', '0x847cf035bfdb8a22c697e36e89c511a1c952652645b2d9b951d8a0a0edd88f01',
blockNumber: 73695, blockNumber: 73695,
...@@ -744,8 +720,7 @@ export const blocksOnL2 = [ ...@@ -744,8 +720,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000606d27114231ac08f4d77e45974280aff0fd1849759e047fa6ae40efc3a2645450929487149bc68d6dbe7534a69990c6fc0b47cbf22e02d448939dda474912af01', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000606d27114231ac08f4d77e45974280aff0fd1849759e047fa6ae40efc3a2645450929487149bc68d6dbe7534a69990c6fc0b47cbf22e02d448939dda474912af01',
transactions: [ transactions: [
{ {
hash: hash: '0xfd77a6809d2449ded3aaafd3a6332cfc2ad1d877a9f7018700697baf6ccf241d',
'0xfd77a6809d2449ded3aaafd3a6332cfc2ad1d877a9f7018700697baf6ccf241d',
blockHash: blockHash:
'0x3844b185c3e684a136b40485875368f31b73a0cd2e09d808ee6ef7da92f22fa1', '0x3844b185c3e684a136b40485875368f31b73a0cd2e09d808ee6ef7da92f22fa1',
blockNumber: 73696, blockNumber: 73696,
...@@ -781,8 +756,7 @@ export const blocksOnL2 = [ ...@@ -781,8 +756,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000003b911aa043174f6b6cf65700cef2837757c9325261f0d78d54eb3858b3164a400e20d3ebd878476de395767e99fb4e53055fcdc4f50d71a1a7667c1fbf90b4ee00', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000003b911aa043174f6b6cf65700cef2837757c9325261f0d78d54eb3858b3164a400e20d3ebd878476de395767e99fb4e53055fcdc4f50d71a1a7667c1fbf90b4ee00',
transactions: [ transactions: [
{ {
hash: hash: '0x6eb47e10dd56825ce55d85289180f908736acf1a76508a7bbec88172dcc77cfe',
'0x6eb47e10dd56825ce55d85289180f908736acf1a76508a7bbec88172dcc77cfe',
blockHash: blockHash:
'0x07a357f6aa5c57541ae909a7e536dd07c363978ff31b54465a4235261a378dac', '0x07a357f6aa5c57541ae909a7e536dd07c363978ff31b54465a4235261a378dac',
blockNumber: 73697, blockNumber: 73697,
...@@ -818,8 +792,7 @@ export const blocksOnL2 = [ ...@@ -818,8 +792,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000076e8b487fee0d47a75707eb048141afd9de6c2cf6d8f35e828e0db1d620d3ded2827e7a75c83cc624a0a36b4762821790de1a32f04ffc57a152a04215d1706b200', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000076e8b487fee0d47a75707eb048141afd9de6c2cf6d8f35e828e0db1d620d3ded2827e7a75c83cc624a0a36b4762821790de1a32f04ffc57a152a04215d1706b200',
transactions: [ transactions: [
{ {
hash: hash: '0x86f9318f8152d56fa799b0537021ec6f535eb1d5be44852a41cad3c634ff6c31',
'0x86f9318f8152d56fa799b0537021ec6f535eb1d5be44852a41cad3c634ff6c31',
blockHash: blockHash:
'0x9d2a07baad39fd575722d50250f14257716d41e3d5a904ffb610bcf496d3adb3', '0x9d2a07baad39fd575722d50250f14257716d41e3d5a904ffb610bcf496d3adb3',
blockNumber: 73698, blockNumber: 73698,
...@@ -831,8 +804,7 @@ export const blocksOnL2 = [ ...@@ -831,8 +804,7 @@ export const blocksOnL2 = [
to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 20, nonce: 20,
data: data: '0x8a2900140000000000000000000000000000000000000000000000013f306a2409fc0000',
'0x8a2900140000000000000000000000000000000000000000000000013f306a2409fc0000',
r: '0x9d241891335c51ad2cc632ed85dd94ab8eee00da71cd812ea1c40fbcb9c441f5', r: '0x9d241891335c51ad2cc632ed85dd94ab8eee00da71cd812ea1c40fbcb9c441f5',
s: '0x6e2f5a7f83e9aa02ae614ee89a4abd10c4332be95a1335be44d5cff6356a903a', s: '0x6e2f5a7f83e9aa02ae614ee89a4abd10c4332be95a1335be44d5cff6356a903a',
v: 55, v: 55,
...@@ -856,8 +828,7 @@ export const blocksOnL2 = [ ...@@ -856,8 +828,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000002b8c5d4b8bb3f40f6e416fb3c6f1789b5224ca3d029999932b566e844aa653573a62bffcb4d851fb40e9ad41aca65ed328519ef65e0d0bf0981921f225c8d87c00', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000002b8c5d4b8bb3f40f6e416fb3c6f1789b5224ca3d029999932b566e844aa653573a62bffcb4d851fb40e9ad41aca65ed328519ef65e0d0bf0981921f225c8d87c00',
transactions: [ transactions: [
{ {
hash: hash: '0x91d9a14f3f0011a3fd850265c4b9a0c878b7ebe51f12836546a1b99213811b7f',
'0x91d9a14f3f0011a3fd850265c4b9a0c878b7ebe51f12836546a1b99213811b7f',
blockHash: blockHash:
'0x5157b12f3f7883e428110b8de7b6b4369fef962a555e4730413692199b2c60eb', '0x5157b12f3f7883e428110b8de7b6b4369fef962a555e4730413692199b2c60eb',
blockNumber: 73699, blockNumber: 73699,
...@@ -893,8 +864,7 @@ export const blocksOnL2 = [ ...@@ -893,8 +864,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000001eb7cd4e3778d0acadabe5119c6cd35ec9390c63ce33c440e48436189efd63a60b4670e87ddf19e3804f4c2b9e409eae85d81720353274ce7091026edfb4bfa300', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000001eb7cd4e3778d0acadabe5119c6cd35ec9390c63ce33c440e48436189efd63a60b4670e87ddf19e3804f4c2b9e409eae85d81720353274ce7091026edfb4bfa300',
transactions: [ transactions: [
{ {
hash: hash: '0x656d4248aca93cf11f843ea6ad9b3eec6b76d4874c84598314de51f550e702c9',
'0x656d4248aca93cf11f843ea6ad9b3eec6b76d4874c84598314de51f550e702c9',
blockHash: blockHash:
'0xc8056ddf6447e133802173b9be9a55131bae7bb157426b941403b7583b02787e', '0xc8056ddf6447e133802173b9be9a55131bae7bb157426b941403b7583b02787e',
blockNumber: 73700, blockNumber: 73700,
...@@ -906,8 +876,7 @@ export const blocksOnL2 = [ ...@@ -906,8 +876,7 @@ export const blocksOnL2 = [
to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 8, nonce: 8,
data: data: '0x8a2900140000000000000000000000000000000000000000000000068155a43676e00000',
'0x8a2900140000000000000000000000000000000000000000000000068155a43676e00000',
r: '0x48b78f666b6d633554897e96f80bb797908467619895cd83eaef7f10b84415d3', r: '0x48b78f666b6d633554897e96f80bb797908467619895cd83eaef7f10b84415d3',
s: '0x060967fb0afd49eec5d6759aa9f92c4a5a356369b518210b95c93a0a89ca81e6', s: '0x060967fb0afd49eec5d6759aa9f92c4a5a356369b518210b95c93a0a89ca81e6',
v: 56, v: 56,
...@@ -931,8 +900,7 @@ export const blocksOnL2 = [ ...@@ -931,8 +900,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000007847a2cf889d494d5ce2ddd8898bef1978253122e190e9435e11fd4c4b768b1f67c10b3d638ab867b286dcca6a326b6bd83970851d474dc409bdb26b9c8ebb5100', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000007847a2cf889d494d5ce2ddd8898bef1978253122e190e9435e11fd4c4b768b1f67c10b3d638ab867b286dcca6a326b6bd83970851d474dc409bdb26b9c8ebb5100',
transactions: [ transactions: [
{ {
hash: hash: '0x7833b5e121a7a6b779750d32aca30d296dac63ec57d3467e38b856bfdc48763f',
'0x7833b5e121a7a6b779750d32aca30d296dac63ec57d3467e38b856bfdc48763f',
blockHash: blockHash:
'0xdab363f0d122e60543b146b19740ca5d44ac8e4a4eb6a788dda266158c383ad0', '0xdab363f0d122e60543b146b19740ca5d44ac8e4a4eb6a788dda266158c383ad0',
blockNumber: 73701, blockNumber: 73701,
...@@ -968,8 +936,7 @@ export const blocksOnL2 = [ ...@@ -968,8 +936,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000001e6fd2685e49aa7095a10944e84cf52262f07666c712a8b19c0f0869c50839352c33a4100b4858ab5aa437df6c7a83a3abb7b204fa7af2e1f54b8a803d43fb4300', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000001e6fd2685e49aa7095a10944e84cf52262f07666c712a8b19c0f0869c50839352c33a4100b4858ab5aa437df6c7a83a3abb7b204fa7af2e1f54b8a803d43fb4300',
transactions: [ transactions: [
{ {
hash: hash: '0xf806a1ca7ceef819e4c8e3fa9b48092cda7135604b28cd7fd0845dfcb56d08e0',
'0xf806a1ca7ceef819e4c8e3fa9b48092cda7135604b28cd7fd0845dfcb56d08e0',
blockHash: blockHash:
'0xc8f0c8e4a9596d82b3afb5f8bad983573bd29d886c6c5188d21cecfa83d89326', '0xc8f0c8e4a9596d82b3afb5f8bad983573bd29d886c6c5188d21cecfa83d89326',
blockNumber: 73702, blockNumber: 73702,
...@@ -981,8 +948,7 @@ export const blocksOnL2 = [ ...@@ -981,8 +948,7 @@ export const blocksOnL2 = [
to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 37, nonce: 37,
data: data: '0x8a2900140000000000000000000000000000000000000000000000c40eb7864285bedec0',
'0x8a2900140000000000000000000000000000000000000000000000c40eb7864285bedec0',
r: '0x6f747cffb6ad3bfaec6d17404d49502ec4bbace678deceb0a6d288dfe353e22b', r: '0x6f747cffb6ad3bfaec6d17404d49502ec4bbace678deceb0a6d288dfe353e22b',
s: '0x794bb94612e7016f8abf6d15186a3d737536d84f7b43be2ce552a4316280154a', s: '0x794bb94612e7016f8abf6d15186a3d737536d84f7b43be2ce552a4316280154a',
v: 55, v: 55,
...@@ -1006,8 +972,7 @@ export const blocksOnL2 = [ ...@@ -1006,8 +972,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000593c6f64497c94719156a3921b7a753024750cc9fbf2e1138f16371d4f63c7d5285b18ae39636ae559935703f568a5a8d3199d15fa5a0c66444769c45495f12f01', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000593c6f64497c94719156a3921b7a753024750cc9fbf2e1138f16371d4f63c7d5285b18ae39636ae559935703f568a5a8d3199d15fa5a0c66444769c45495f12f01',
transactions: [ transactions: [
{ {
hash: hash: '0xce8f18aa3b9ba5a8714b472754ad62ca9c924336cb30e4e1917dc26e3dcee102',
'0xce8f18aa3b9ba5a8714b472754ad62ca9c924336cb30e4e1917dc26e3dcee102',
blockHash: blockHash:
'0xefe3db346275833a5d83864ca30143caf4382b9d9a44b167cd29561c130e85eb', '0xefe3db346275833a5d83864ca30143caf4382b9d9a44b167cd29561c130e85eb',
blockNumber: 73703, blockNumber: 73703,
...@@ -1043,8 +1008,7 @@ export const blocksOnL2 = [ ...@@ -1043,8 +1008,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000a6b073d621070dde582e5da19402c2101ac41b721dd6d64f1589105bf6cbb3a810bc7bed1947b940aed10477ce7594e27eb955520b93975e0f5951cbbb5bd54701', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000a6b073d621070dde582e5da19402c2101ac41b721dd6d64f1589105bf6cbb3a810bc7bed1947b940aed10477ce7594e27eb955520b93975e0f5951cbbb5bd54701',
transactions: [ transactions: [
{ {
hash: hash: '0x9294c8b490b16da1aabd266a18906cc7178935b3a0cec4d778b67e607b701026',
'0x9294c8b490b16da1aabd266a18906cc7178935b3a0cec4d778b67e607b701026',
blockHash: blockHash:
'0xf7f93c2728a8bfd9838ede5761e2aefa009f3d3257dbc91bded584353271272b', '0xf7f93c2728a8bfd9838ede5761e2aefa009f3d3257dbc91bded584353271272b',
blockNumber: 73704, blockNumber: 73704,
...@@ -1080,8 +1044,7 @@ export const blocksOnL2 = [ ...@@ -1080,8 +1044,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000007d488ec26cacf0da7b5b705777d5eecfb16fefa8acfa85778b29c59fbebd07521a8d83084f58e1ff8eb7d4d009fb760e7fc8392316b1abc5372f11ccca8d390301', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000007d488ec26cacf0da7b5b705777d5eecfb16fefa8acfa85778b29c59fbebd07521a8d83084f58e1ff8eb7d4d009fb760e7fc8392316b1abc5372f11ccca8d390301',
transactions: [ transactions: [
{ {
hash: hash: '0x16a73d0faa95ee905ac0fdb64b17d9d1f1a13033e4bb466b066b069fa5a87ccc',
'0x16a73d0faa95ee905ac0fdb64b17d9d1f1a13033e4bb466b066b069fa5a87ccc',
blockHash: blockHash:
'0xa293fcb473fc1a0197c2bdc95a8732735a8e8311af4eadb3d70cd2c6a7d1d9d0', '0xa293fcb473fc1a0197c2bdc95a8732735a8e8311af4eadb3d70cd2c6a7d1d9d0',
blockNumber: 73705, blockNumber: 73705,
...@@ -1117,8 +1080,7 @@ export const blocksOnL2 = [ ...@@ -1117,8 +1080,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000008bb4032ef809f921b5fa2fbbabe2d4aaf81c29a17de44b283f963f14cc218d0b1bed75b7847982ed864efcc74c2d77105ceff9982236acb64d1fca89bc330a8f00', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000008bb4032ef809f921b5fa2fbbabe2d4aaf81c29a17de44b283f963f14cc218d0b1bed75b7847982ed864efcc74c2d77105ceff9982236acb64d1fca89bc330a8f00',
transactions: [ transactions: [
{ {
hash: hash: '0xe56eb906b132d663a598d98c331cb54b7475a2d2c1e9bf65ccd47477f584d6c7',
'0xe56eb906b132d663a598d98c331cb54b7475a2d2c1e9bf65ccd47477f584d6c7',
blockHash: blockHash:
'0xdd80d1b7c7dc2c1b02f72aeca1e6c447eab43c15371ac5834f35ecd8b02737e0', '0xdd80d1b7c7dc2c1b02f72aeca1e6c447eab43c15371ac5834f35ecd8b02737e0',
blockNumber: 73706, blockNumber: 73706,
...@@ -1154,8 +1116,7 @@ export const blocksOnL2 = [ ...@@ -1154,8 +1116,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f6a74cdc2ea822f94687df1b48b6708814474dad96cac3718755ba86a55e2edf3e8665fdf7d4e456b7ff5e5c5a5325f3cbddd0cc8320c7b80e037ba608ae35fb01', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f6a74cdc2ea822f94687df1b48b6708814474dad96cac3718755ba86a55e2edf3e8665fdf7d4e456b7ff5e5c5a5325f3cbddd0cc8320c7b80e037ba608ae35fb01',
transactions: [ transactions: [
{ {
hash: hash: '0xbd958ebffb0b36ff0462e80692bab99c507950354abb2e88e183149d0fb1c662',
'0xbd958ebffb0b36ff0462e80692bab99c507950354abb2e88e183149d0fb1c662',
blockHash: blockHash:
'0x1cc058791f2dcaa807d105af127b9999c3045220dd05294fa86ce51410a33b0b', '0x1cc058791f2dcaa807d105af127b9999c3045220dd05294fa86ce51410a33b0b',
blockNumber: 73707, blockNumber: 73707,
...@@ -1167,8 +1128,7 @@ export const blocksOnL2 = [ ...@@ -1167,8 +1128,7 @@ export const blocksOnL2 = [
to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 18, nonce: 18,
data: data: '0x8a29001400000000000000000000000000000000000000000000001043561a8829300000',
'0x8a29001400000000000000000000000000000000000000000000001043561a8829300000',
r: '0xfbc6c4f4c92ca11aa750c91cd1ee111d69eee808eae4283931a27860599be533', r: '0xfbc6c4f4c92ca11aa750c91cd1ee111d69eee808eae4283931a27860599be533',
s: '0x44f9763d439d3054e0dbf90667cb801320e802e74ac409610e25c1516caec4ae', s: '0x44f9763d439d3054e0dbf90667cb801320e802e74ac409610e25c1516caec4ae',
v: 55, v: 55,
...@@ -1192,8 +1152,7 @@ export const blocksOnL2 = [ ...@@ -1192,8 +1152,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000aa8cfa710e6fb7c9cc02b6dd3b5e211c3c7068145c758e89f051fd2453350d110fda02e0296549d4143dc6f929fa32c0d6ff3a08a684d18fc8c4a78f7aeea45200', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000aa8cfa710e6fb7c9cc02b6dd3b5e211c3c7068145c758e89f051fd2453350d110fda02e0296549d4143dc6f929fa32c0d6ff3a08a684d18fc8c4a78f7aeea45200',
transactions: [ transactions: [
{ {
hash: hash: '0xec733f26be7ee61db5515e4eb40b3d347e0792121ecc2360b3e8ae0a63d265b1',
'0xec733f26be7ee61db5515e4eb40b3d347e0792121ecc2360b3e8ae0a63d265b1',
blockHash: blockHash:
'0xa33e4daea9ac25064ac3e2742194f0a659920984043678735f7f65dd8021e3c1', '0xa33e4daea9ac25064ac3e2742194f0a659920984043678735f7f65dd8021e3c1',
blockNumber: 73708, blockNumber: 73708,
...@@ -1229,8 +1188,7 @@ export const blocksOnL2 = [ ...@@ -1229,8 +1188,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000003db8fe23391b83cb86c6230cff2181fdd98cfbc20114312aba7dd7681698b50542a32b274cdb4855d60de022e16e5ccad112eaf7c49e8d56653e68eacc31685101', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000003db8fe23391b83cb86c6230cff2181fdd98cfbc20114312aba7dd7681698b50542a32b274cdb4855d60de022e16e5ccad112eaf7c49e8d56653e68eacc31685101',
transactions: [ transactions: [
{ {
hash: hash: '0xe9a0f6c1b5c444cbd007bdd6e7cc99ab58c8137dcdce2ef4d234d5673fac2ef5',
'0xe9a0f6c1b5c444cbd007bdd6e7cc99ab58c8137dcdce2ef4d234d5673fac2ef5',
blockHash: blockHash:
'0xa94f47b38812e0cf22ee224cc99ae1503003c926adece46a98d7db085960098c', '0xa94f47b38812e0cf22ee224cc99ae1503003c926adece46a98d7db085960098c',
blockNumber: 73709, blockNumber: 73709,
...@@ -1266,8 +1224,7 @@ export const blocksOnL2 = [ ...@@ -1266,8 +1224,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000af5ae41f4fa0eff600135bca503da7b7a0cc12c8441ca473a8adfe63f9e747347a79ed49921395df4b850c4d028730687434349caed3c3a35950e4b5cf190a5900', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000af5ae41f4fa0eff600135bca503da7b7a0cc12c8441ca473a8adfe63f9e747347a79ed49921395df4b850c4d028730687434349caed3c3a35950e4b5cf190a5900',
transactions: [ transactions: [
{ {
hash: hash: '0x4d3e1eafe51348ca350879e7cfba1d5416695ace17ed8640698e79c8a7996b5d',
'0x4d3e1eafe51348ca350879e7cfba1d5416695ace17ed8640698e79c8a7996b5d',
blockHash: blockHash:
'0xcccce136772347d2749da92a4586fc4ebb620b586b6718f66344abdb6f8c817f', '0xcccce136772347d2749da92a4586fc4ebb620b586b6718f66344abdb6f8c817f',
blockNumber: 73710, blockNumber: 73710,
...@@ -1303,8 +1260,7 @@ export const blocksOnL2 = [ ...@@ -1303,8 +1260,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000ef88b3d5d4f3c66594c82acb899f449a45fbf957ee2277482c5aebfecac405bb3c79378e61222954b80b4f641d082d82a91068ebba530b402ea7449ab40258b201', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000ef88b3d5d4f3c66594c82acb899f449a45fbf957ee2277482c5aebfecac405bb3c79378e61222954b80b4f641d082d82a91068ebba530b402ea7449ab40258b201',
transactions: [ transactions: [
{ {
hash: hash: '0x20f494e4230d9986168d4dbd912f7785195926356d8badf07cfedaf45e821fdf',
'0x20f494e4230d9986168d4dbd912f7785195926356d8badf07cfedaf45e821fdf',
blockHash: blockHash:
'0xc4adfabe5dfa18d6e4bba9a748ab70f0c1900e048f746522ebf920aebdd06526', '0xc4adfabe5dfa18d6e4bba9a748ab70f0c1900e048f746522ebf920aebdd06526',
blockNumber: 73711, blockNumber: 73711,
...@@ -1316,8 +1272,7 @@ export const blocksOnL2 = [ ...@@ -1316,8 +1272,7 @@ export const blocksOnL2 = [
to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64', to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 24261, nonce: 24261,
data: data: '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e4cfa0000000000000000000000000000000000000000000000000000000000000001534e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000143bdb46728500000',
'0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e4cfa0000000000000000000000000000000000000000000000000000000000000001534e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000143bdb46728500000',
r: '0xbb50bf8b5c9c56a8b515110b42c4013f4e99cf9fcf6874c32e881554562265fa', r: '0xbb50bf8b5c9c56a8b515110b42c4013f4e99cf9fcf6874c32e881554562265fa',
s: '0x13a1539b789d0364d1e82e7587aad4adb894f4f3320d3517bd90bb08394d4264', s: '0x13a1539b789d0364d1e82e7587aad4adb894f4f3320d3517bd90bb08394d4264',
v: 55, v: 55,
...@@ -1341,8 +1296,7 @@ export const blocksOnL2 = [ ...@@ -1341,8 +1296,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000065201d67a3d734dcba88134f442460120acf1aea730e35eb847d6cc837326b7e0016d98c7feca2b063d5757971dfef3cbb6c8467dfe0f94a26c810dc89fb292b00', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000065201d67a3d734dcba88134f442460120acf1aea730e35eb847d6cc837326b7e0016d98c7feca2b063d5757971dfef3cbb6c8467dfe0f94a26c810dc89fb292b00',
transactions: [ transactions: [
{ {
hash: hash: '0x6e179db35f6e08ffc493d08d7364dbba784a609a81276aacfbdd629761d0fb43',
'0x6e179db35f6e08ffc493d08d7364dbba784a609a81276aacfbdd629761d0fb43',
blockHash: blockHash:
'0x58c3b2dfb23a1d998479e33ed3e8401e64c74a9f505dcdaa7316424185d6c6e0', '0x58c3b2dfb23a1d998479e33ed3e8401e64c74a9f505dcdaa7316424185d6c6e0',
blockNumber: 73712, blockNumber: 73712,
...@@ -1378,8 +1332,7 @@ export const blocksOnL2 = [ ...@@ -1378,8 +1332,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000640d42655e8f1bc7096ce91157cffa5bbe4fee6fca2a3d18c82861c18e88145072632b5f1ab7e2b2f9294bea835988150830c6835d030896bea737289c23bf4200', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000640d42655e8f1bc7096ce91157cffa5bbe4fee6fca2a3d18c82861c18e88145072632b5f1ab7e2b2f9294bea835988150830c6835d030896bea737289c23bf4200',
transactions: [ transactions: [
{ {
hash: hash: '0x43bed1b2a695256d9dcf104fed0d03146a621ebe6f6919f62ef81868d06eff43',
'0x43bed1b2a695256d9dcf104fed0d03146a621ebe6f6919f62ef81868d06eff43',
blockHash: blockHash:
'0x2a3943363fd6e829527f8132cbb13a7db0bac0344da7332725739d0e307ec49d', '0x2a3943363fd6e829527f8132cbb13a7db0bac0344da7332725739d0e307ec49d',
blockNumber: 73713, blockNumber: 73713,
...@@ -1415,8 +1368,7 @@ export const blocksOnL2 = [ ...@@ -1415,8 +1368,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000fde45f5b2b5b26284d22d4139de76a0d466023dffbd35185ff30d7f2b29571e6459d0e93ebdff329464f506cc4f1870739e589535a46656b26eda76feec1d34f01', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000fde45f5b2b5b26284d22d4139de76a0d466023dffbd35185ff30d7f2b29571e6459d0e93ebdff329464f506cc4f1870739e589535a46656b26eda76feec1d34f01',
transactions: [ transactions: [
{ {
hash: hash: '0x7f0fa947dd28a11a92dcf7f94d3e801251b716b0a12583cab5a1707dcf6723bf',
'0x7f0fa947dd28a11a92dcf7f94d3e801251b716b0a12583cab5a1707dcf6723bf',
blockHash: blockHash:
'0x34fa58996545a34b46d3cc37e6214a7d1205ec82dfec1fa503078fcad9e7576d', '0x34fa58996545a34b46d3cc37e6214a7d1205ec82dfec1fa503078fcad9e7576d',
blockNumber: 73714, blockNumber: 73714,
...@@ -1452,8 +1404,7 @@ export const blocksOnL2 = [ ...@@ -1452,8 +1404,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004ba907caed45041546074a0b77b520901eade631b71ba6bb97248fbf2123e50d47345f731519eaaa694bd7c47b64803c35b48c9f78841f06fa1d44f2d1079e3201', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004ba907caed45041546074a0b77b520901eade631b71ba6bb97248fbf2123e50d47345f731519eaaa694bd7c47b64803c35b48c9f78841f06fa1d44f2d1079e3201',
transactions: [ transactions: [
{ {
hash: hash: '0xb9c76dc22b2d60d9e91203c62d865f12272f616b3a00ea2a8019f68988bfb6d6',
'0xb9c76dc22b2d60d9e91203c62d865f12272f616b3a00ea2a8019f68988bfb6d6',
blockHash: blockHash:
'0xa2b1bbdbb5226c8e138e74a053ba9f4b78b116570fa114e4c1f1d6d41bb2a8ee', '0xa2b1bbdbb5226c8e138e74a053ba9f4b78b116570fa114e4c1f1d6d41bb2a8ee',
blockNumber: 73715, blockNumber: 73715,
...@@ -1465,8 +1416,7 @@ export const blocksOnL2 = [ ...@@ -1465,8 +1416,7 @@ export const blocksOnL2 = [
to: '0x4200000000000000000000000000000000000007', to: '0x4200000000000000000000000000000000000007',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 3442, nonce: 3442,
data: data: '0xcbd4ece90000000000000000000000004d7186818dabfe88bd80421656bbd07dffc979cc000000000000000000000000045e507925d2e05d114534d0810a1abd94aca8d600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000d720000000000000000000000000000000000000000000000000000000000000044130a75fe0000000000000000000000001bad6fd2f9ea190bed0b593902cd111b67adfe94000000000000000000000000000000000000000000000004db7325476300000000000000000000000000000000000000000000000000000000000000',
'0xcbd4ece90000000000000000000000004d7186818dabfe88bd80421656bbd07dffc979cc000000000000000000000000045e507925d2e05d114534d0810a1abd94aca8d600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000d720000000000000000000000000000000000000000000000000000000000000044130a75fe0000000000000000000000001bad6fd2f9ea190bed0b593902cd111b67adfe94000000000000000000000000000000000000000000000004db7325476300000000000000000000000000000000000000000000000000000000000000',
r: '0x0000000000000000000000000000000000000000000000000000000000000000', r: '0x0000000000000000000000000000000000000000000000000000000000000000',
s: '0x0000000000000000000000000000000000000000000000000000000000000000', s: '0x0000000000000000000000000000000000000000000000000000000000000000',
v: 0, v: 0,
...@@ -1490,8 +1440,7 @@ export const blocksOnL2 = [ ...@@ -1490,8 +1440,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000d5f2b584166e5a111acd322545afe7bb346ae24fa1a957f880500db9a2f2123d2104bbb9550f807b27b8462822dd276876c1bdd429f77b339dd913cd843aecdf01', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000d5f2b584166e5a111acd322545afe7bb346ae24fa1a957f880500db9a2f2123d2104bbb9550f807b27b8462822dd276876c1bdd429f77b339dd913cd843aecdf01',
transactions: [ transactions: [
{ {
hash: hash: '0x6db447ac520a6b1e8305edc678b353df11743a74653f7349bb6cf1134e262f1a',
'0x6db447ac520a6b1e8305edc678b353df11743a74653f7349bb6cf1134e262f1a',
blockHash: blockHash:
'0xebe6c3ec09213f56ea1b1e0b150479345c86ad46084309ff7ee6f3671e29bded', '0xebe6c3ec09213f56ea1b1e0b150479345c86ad46084309ff7ee6f3671e29bded',
blockNumber: 73716, blockNumber: 73716,
...@@ -1503,8 +1452,7 @@ export const blocksOnL2 = [ ...@@ -1503,8 +1452,7 @@ export const blocksOnL2 = [
to: '0x4200000000000000000000000000000000000007', to: '0x4200000000000000000000000000000000000007',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 3443, nonce: 3443,
data: data: '0xcbd4ece90000000000000000000000004d7186818dabfe88bd80421656bbd07dffc979cc000000000000000000000000045e507925d2e05d114534d0810a1abd94aca8d600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000d730000000000000000000000000000000000000000000000000000000000000044130a75fe0000000000000000000000003f47a66ada01491c3d364599e5bcbf80a1a67092000000000000000000000000000000000000000000000003a34f4a1f69328ac800000000000000000000000000000000000000000000000000000000',
'0xcbd4ece90000000000000000000000004d7186818dabfe88bd80421656bbd07dffc979cc000000000000000000000000045e507925d2e05d114534d0810a1abd94aca8d600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000d730000000000000000000000000000000000000000000000000000000000000044130a75fe0000000000000000000000003f47a66ada01491c3d364599e5bcbf80a1a67092000000000000000000000000000000000000000000000003a34f4a1f69328ac800000000000000000000000000000000000000000000000000000000',
r: '0x0000000000000000000000000000000000000000000000000000000000000000', r: '0x0000000000000000000000000000000000000000000000000000000000000000',
s: '0x0000000000000000000000000000000000000000000000000000000000000000', s: '0x0000000000000000000000000000000000000000000000000000000000000000',
v: 0, v: 0,
...@@ -1528,8 +1476,7 @@ export const blocksOnL2 = [ ...@@ -1528,8 +1476,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b7c7e7a53c0d47925d1cd30830d01096bfea5a333b911fd95ea31c973bfd36721577705e458fbe4b009500d9e66474238fda30d0d363b415229c562a18368baa01', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b7c7e7a53c0d47925d1cd30830d01096bfea5a333b911fd95ea31c973bfd36721577705e458fbe4b009500d9e66474238fda30d0d363b415229c562a18368baa01',
transactions: [ transactions: [
{ {
hash: hash: '0xd4bb5ab5c03c455d217c959cfbbf4b7495a6e2a15567fd0e92650dd361311ba0',
'0xd4bb5ab5c03c455d217c959cfbbf4b7495a6e2a15567fd0e92650dd361311ba0',
blockHash: blockHash:
'0xb18e22e51fda7c18216817500cc7a1a777784ba87bf7df90e118a77690ddcc5b', '0xb18e22e51fda7c18216817500cc7a1a777784ba87bf7df90e118a77690ddcc5b',
blockNumber: 73717, blockNumber: 73717,
...@@ -1565,8 +1512,7 @@ export const blocksOnL2 = [ ...@@ -1565,8 +1512,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000005b0c3546d0451b3d485dea178d9e5a62cc34493b0dc742700c4cb0baaf68cf2d41b09378085c49aa20e67d0cf2c34620220c508019e1f68167c7c6893ee3bafb01', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000005b0c3546d0451b3d485dea178d9e5a62cc34493b0dc742700c4cb0baaf68cf2d41b09378085c49aa20e67d0cf2c34620220c508019e1f68167c7c6893ee3bafb01',
transactions: [ transactions: [
{ {
hash: hash: '0xf4f068c4f26c93d0f6d73d54ec90c11c55a9af2de84ed72ede502019077a3c1d',
'0xf4f068c4f26c93d0f6d73d54ec90c11c55a9af2de84ed72ede502019077a3c1d',
blockHash: blockHash:
'0x377cbb36e77016cb86d962a22fb4f7ea4aafe385ae49ea565fd723fd1e41a9a9', '0x377cbb36e77016cb86d962a22fb4f7ea4aafe385ae49ea565fd723fd1e41a9a9',
blockNumber: 73718, blockNumber: 73718,
...@@ -1602,8 +1548,7 @@ export const blocksOnL2 = [ ...@@ -1602,8 +1548,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000c7985b56c45c50981750dae0cb1b2784089a863fd58e96069e1b7bc48e53dcea2e3a2ef15bfcb1b0552b90826871133dd81ac9b63e4f1e257ff84935c1f8ff5101', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000c7985b56c45c50981750dae0cb1b2784089a863fd58e96069e1b7bc48e53dcea2e3a2ef15bfcb1b0552b90826871133dd81ac9b63e4f1e257ff84935c1f8ff5101',
transactions: [ transactions: [
{ {
hash: hash: '0xc536bbb92f4a187072ccd06a0af2fa6bb9a4b8a65be0aa98c1260ff2dc866c7d',
'0xc536bbb92f4a187072ccd06a0af2fa6bb9a4b8a65be0aa98c1260ff2dc866c7d',
blockHash: blockHash:
'0x79daae6ce632ffb5b5c60520c3de8d7e6ae289b15040e3559ebba6a1dd604528', '0x79daae6ce632ffb5b5c60520c3de8d7e6ae289b15040e3559ebba6a1dd604528',
blockNumber: 73719, blockNumber: 73719,
...@@ -1639,8 +1584,7 @@ export const blocksOnL2 = [ ...@@ -1639,8 +1584,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004d5418918a3e2930407e0c414dd3c75539e69001a57da0526e41138a9dbd128f65097210b10067b3b282bd2a21a9a0c6db356473ee3164099c67b0efe5a4c94800', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004d5418918a3e2930407e0c414dd3c75539e69001a57da0526e41138a9dbd128f65097210b10067b3b282bd2a21a9a0c6db356473ee3164099c67b0efe5a4c94800',
transactions: [ transactions: [
{ {
hash: hash: '0x607feeb32b8d06037991a716ebf04bcac9d27e828c33824f65051a64b73334ab',
'0x607feeb32b8d06037991a716ebf04bcac9d27e828c33824f65051a64b73334ab',
blockHash: blockHash:
'0x3150947423724386e3f52d41a8615498d32bdb43c0dc7a636feeed5bd3831b06', '0x3150947423724386e3f52d41a8615498d32bdb43c0dc7a636feeed5bd3831b06',
blockNumber: 73720, blockNumber: 73720,
...@@ -1676,8 +1620,7 @@ export const blocksOnL2 = [ ...@@ -1676,8 +1620,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000602fcbbc248c27ba5ed063a4355084f2d0e619a496a951c3082b84e5799347f80514c129ee253b18c07ebecad5f920dfa785e215f4c561dd57e02d0d187d41e501', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000602fcbbc248c27ba5ed063a4355084f2d0e619a496a951c3082b84e5799347f80514c129ee253b18c07ebecad5f920dfa785e215f4c561dd57e02d0d187d41e501',
transactions: [ transactions: [
{ {
hash: hash: '0xbd166f55622a72b064394581db2eed56d44068e3416ecd98d24d3c6062429934',
'0xbd166f55622a72b064394581db2eed56d44068e3416ecd98d24d3c6062429934',
blockHash: blockHash:
'0xce04648c39c258037b1352b07970b705c0b3b8a2937d4174fa2fb9c28867fcdd', '0xce04648c39c258037b1352b07970b705c0b3b8a2937d4174fa2fb9c28867fcdd',
blockNumber: 73721, blockNumber: 73721,
...@@ -1713,8 +1656,7 @@ export const blocksOnL2 = [ ...@@ -1713,8 +1656,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b0cd726b8d6c7b79a0d7876711641d7e92fbaef81f55712c3bca5d90ca2866a9077d22c3fd1bb32efaf6395b493a1be12076e0642dac6aae58844b4283adb47400', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b0cd726b8d6c7b79a0d7876711641d7e92fbaef81f55712c3bca5d90ca2866a9077d22c3fd1bb32efaf6395b493a1be12076e0642dac6aae58844b4283adb47400',
transactions: [ transactions: [
{ {
hash: hash: '0xe79feea93c29985f96a75bde3d9d7872bf4b6d2cff5fa6d8e03c899cff23c266',
'0xe79feea93c29985f96a75bde3d9d7872bf4b6d2cff5fa6d8e03c899cff23c266',
blockHash: blockHash:
'0x1d301f1409c2475c7fa9b4dcecbba7b57258005afb713dc55dc8a18f61513a72', '0x1d301f1409c2475c7fa9b4dcecbba7b57258005afb713dc55dc8a18f61513a72',
blockNumber: 73722, blockNumber: 73722,
...@@ -1726,8 +1668,7 @@ export const blocksOnL2 = [ ...@@ -1726,8 +1668,7 @@ export const blocksOnL2 = [
to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 9, nonce: 9,
data: data: '0x8a29001400000000000000000000000000000000000000000000001043561a8829300000',
'0x8a29001400000000000000000000000000000000000000000000001043561a8829300000',
r: '0xd22b7b46b935bbe378ac97d58bbe84f8b57d9b240f56e9335ed8134214a480c0', r: '0xd22b7b46b935bbe378ac97d58bbe84f8b57d9b240f56e9335ed8134214a480c0',
s: '0x32b15645d64f624cd707628971ece2c06366fd2bbff50cbb40891fe1cf0de225', s: '0x32b15645d64f624cd707628971ece2c06366fd2bbff50cbb40891fe1cf0de225',
v: 56, v: 56,
...@@ -1751,8 +1692,7 @@ export const blocksOnL2 = [ ...@@ -1751,8 +1692,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f04256430bda72cd13416c6b59a36f0739424aada0dc2af95865bccf0cf6101a4e530383e4c82c26bc7104d8418c93e7d58e8d2aea324238959a1517145a5b7a00', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f04256430bda72cd13416c6b59a36f0739424aada0dc2af95865bccf0cf6101a4e530383e4c82c26bc7104d8418c93e7d58e8d2aea324238959a1517145a5b7a00',
transactions: [ transactions: [
{ {
hash: hash: '0xee8ecbea3f0cbcde091d2444c3a7f2be3a4953166db28bdabbcbc214e6a4c6fc',
'0xee8ecbea3f0cbcde091d2444c3a7f2be3a4953166db28bdabbcbc214e6a4c6fc',
blockHash: blockHash:
'0x91e6734b93aa9200086b392da19180e8f703281c3077c47759755dac1c594111', '0x91e6734b93aa9200086b392da19180e8f703281c3077c47759755dac1c594111',
blockNumber: 73723, blockNumber: 73723,
...@@ -1764,8 +1704,7 @@ export const blocksOnL2 = [ ...@@ -1764,8 +1704,7 @@ export const blocksOnL2 = [
to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 1, nonce: 1,
data: data: '0x295da87d0000000000000000000000000000000000000000000000008ac7230489e80000',
'0x295da87d0000000000000000000000000000000000000000000000008ac7230489e80000',
r: '0xf3ecf58a1113fb3387131db1ea3feeb9e2f46e3e48ee1755a1171d3ebcde8ce1', r: '0xf3ecf58a1113fb3387131db1ea3feeb9e2f46e3e48ee1755a1171d3ebcde8ce1',
s: '0x2d35af50f607a050a62b614074a70d3101211de5f0e40bccdbb49a7206d049ad', s: '0x2d35af50f607a050a62b614074a70d3101211de5f0e40bccdbb49a7206d049ad',
v: 55, v: 55,
...@@ -1789,8 +1728,7 @@ export const blocksOnL2 = [ ...@@ -1789,8 +1728,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000a15538621c229986912ac936d4db82331566662b6d442cc44adfbcb50acc748e65d7c476cace25e57056dcdaa87888582cd66aa0181c2bfef2578ca5aaa044f500', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000a15538621c229986912ac936d4db82331566662b6d442cc44adfbcb50acc748e65d7c476cace25e57056dcdaa87888582cd66aa0181c2bfef2578ca5aaa044f500',
transactions: [ transactions: [
{ {
hash: hash: '0x1702aae10ed280b72e528651aac9731ec376842a611b7bb1055f9486c49e35ea',
'0x1702aae10ed280b72e528651aac9731ec376842a611b7bb1055f9486c49e35ea',
blockHash: blockHash:
'0x5ddc55bba6c9b6e0b58f4324cf983d8a70ba5c91491476b105c174c7ead947d6', '0x5ddc55bba6c9b6e0b58f4324cf983d8a70ba5c91491476b105c174c7ead947d6',
blockNumber: 73724, blockNumber: 73724,
...@@ -1826,8 +1764,7 @@ export const blocksOnL2 = [ ...@@ -1826,8 +1764,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f98305a7da25a39554451bf279609145dc06d8c49cffe72d09d15414f6d3d6ce663dad7eafa38370004ecf7acceaf1d302490c031d5ebcdf19360bb8f13e983800', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f98305a7da25a39554451bf279609145dc06d8c49cffe72d09d15414f6d3d6ce663dad7eafa38370004ecf7acceaf1d302490c031d5ebcdf19360bb8f13e983800',
transactions: [ transactions: [
{ {
hash: hash: '0xc526d8dfeb91d9efdf669f2091dd77a6e5148dea92eb85594e0897504ecca0ae',
'0xc526d8dfeb91d9efdf669f2091dd77a6e5148dea92eb85594e0897504ecca0ae',
blockHash: blockHash:
'0x7bbfa1ea119ce04e145c4446f7e57a746c411b144dc8cc994ad35c45de2f153e', '0x7bbfa1ea119ce04e145c4446f7e57a746c411b144dc8cc994ad35c45de2f153e',
blockNumber: 73725, blockNumber: 73725,
...@@ -1863,8 +1800,7 @@ export const blocksOnL2 = [ ...@@ -1863,8 +1800,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000fa81e102f397e2e4815054a268335d04ea3f0d643005b747f00da70a2533f2365396415b1c8488f5442766202e2ed6792051b1acae88d0b9f7dfc6bc529e56c501', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000fa81e102f397e2e4815054a268335d04ea3f0d643005b747f00da70a2533f2365396415b1c8488f5442766202e2ed6792051b1acae88d0b9f7dfc6bc529e56c501',
transactions: [ transactions: [
{ {
hash: hash: '0xc178ee56c0e60c6e2d24f3b68e38bf690beb1f6a66ea311c1cb940373d326ead',
'0xc178ee56c0e60c6e2d24f3b68e38bf690beb1f6a66ea311c1cb940373d326ead',
blockHash: blockHash:
'0x13b38d822e5593b0e9d79e8d23b092da14be6ad9a818eb0a361c7a924d307eb4', '0x13b38d822e5593b0e9d79e8d23b092da14be6ad9a818eb0a361c7a924d307eb4',
blockNumber: 73726, blockNumber: 73726,
...@@ -1900,8 +1836,7 @@ export const blocksOnL2 = [ ...@@ -1900,8 +1836,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f2f538fde149d325c55e14153b3ce41eb615b334600e4d19d8bca7887de7c1af0749a6b166d68c4e2216581b6f8211e3e0211ebfaa45ee300e5cbb256b5c68ff01', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f2f538fde149d325c55e14153b3ce41eb615b334600e4d19d8bca7887de7c1af0749a6b166d68c4e2216581b6f8211e3e0211ebfaa45ee300e5cbb256b5c68ff01',
transactions: [ transactions: [
{ {
hash: hash: '0x8772362b78063f5640c9e11b4236aa62bc5c80bfbae0acc0efa47c25cf12ca5e',
'0x8772362b78063f5640c9e11b4236aa62bc5c80bfbae0acc0efa47c25cf12ca5e',
blockHash: blockHash:
'0xdb3389a2eff49149d217563f1c9370aab62dbacc457bd00820e854ff7ff091a3', '0xdb3389a2eff49149d217563f1c9370aab62dbacc457bd00820e854ff7ff091a3',
blockNumber: 73727, blockNumber: 73727,
...@@ -1937,8 +1872,7 @@ export const blocksOnL2 = [ ...@@ -1937,8 +1872,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000805426b5c8d4d7556127d83eef0b8afede69fcc1ce70df6ad901170168e91a6a2d1e637306c876936ea46683a7a19f4734f43ae1c5bf95932252132ed6e72af500', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000805426b5c8d4d7556127d83eef0b8afede69fcc1ce70df6ad901170168e91a6a2d1e637306c876936ea46683a7a19f4734f43ae1c5bf95932252132ed6e72af500',
transactions: [ transactions: [
{ {
hash: hash: '0x89ca4ce5add5c77e21ac589e9c0d1e482d170b403a78f1caa7158dfb15d800ee',
'0x89ca4ce5add5c77e21ac589e9c0d1e482d170b403a78f1caa7158dfb15d800ee',
blockHash: blockHash:
'0xb88086c8f43a500978a69090a1853dd060e1c801125355f6f120ac0b70aba454', '0xb88086c8f43a500978a69090a1853dd060e1c801125355f6f120ac0b70aba454',
blockNumber: 73728, blockNumber: 73728,
...@@ -1950,8 +1884,7 @@ export const blocksOnL2 = [ ...@@ -1950,8 +1884,7 @@ export const blocksOnL2 = [
to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 16, nonce: 16,
data: data: '0x8a29001400000000000000000000000000000000000000000000000340aad21b3b700000',
'0x8a29001400000000000000000000000000000000000000000000000340aad21b3b700000',
r: '0x244318f4f681328908180b145ca3467846f5cdc40fe6e9ada54f2e7dba843ee4', r: '0x244318f4f681328908180b145ca3467846f5cdc40fe6e9ada54f2e7dba843ee4',
s: '0x14b22618c62cd57adbbc86c5ac079bc69f7e45e87108c53f22ff619501a773be', s: '0x14b22618c62cd57adbbc86c5ac079bc69f7e45e87108c53f22ff619501a773be',
v: 55, v: 55,
...@@ -1975,8 +1908,7 @@ export const blocksOnL2 = [ ...@@ -1975,8 +1908,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b5b1e27232d59e4e3a993743431ed9d75f5c62957b2071cb99a7c67e0beb4ac07c07ee88291b370b172b6895b6ca2be245dda5b4843103fc0c91ff68abc9965a01', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b5b1e27232d59e4e3a993743431ed9d75f5c62957b2071cb99a7c67e0beb4ac07c07ee88291b370b172b6895b6ca2be245dda5b4843103fc0c91ff68abc9965a01',
transactions: [ transactions: [
{ {
hash: hash: '0x0d137bc312d52fb1fbde5c3c63bad9910cef9f8b213be54f34be5bc37a03e038',
'0x0d137bc312d52fb1fbde5c3c63bad9910cef9f8b213be54f34be5bc37a03e038',
blockHash: blockHash:
'0x44ebe9f26e3f73d461587e22ce6c25806e60d65e8d6329c467a7b6f40dce9fdf', '0x44ebe9f26e3f73d461587e22ce6c25806e60d65e8d6329c467a7b6f40dce9fdf',
blockNumber: 73729, blockNumber: 73729,
...@@ -2012,8 +1944,7 @@ export const blocksOnL2 = [ ...@@ -2012,8 +1944,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004d58f105bf00ed60606aec17121a7fbede5fd4895e8b37596527962f146e8ecf0cee7689cf369231d4cdfa8cad0a4bb08f98fad617b3b1c4c8c040323d163e9600', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004d58f105bf00ed60606aec17121a7fbede5fd4895e8b37596527962f146e8ecf0cee7689cf369231d4cdfa8cad0a4bb08f98fad617b3b1c4c8c040323d163e9600',
transactions: [ transactions: [
{ {
hash: hash: '0xb4de489d1853b74e57c8bd20fd9045ffeee8d203515322103e54e083e145d2d5',
'0xb4de489d1853b74e57c8bd20fd9045ffeee8d203515322103e54e083e145d2d5',
blockHash: blockHash:
'0xcee89db6fcf01f3a45f49c6019ad4b9a92241ff6c09c7b17c84f06fe3b46aee4', '0xcee89db6fcf01f3a45f49c6019ad4b9a92241ff6c09c7b17c84f06fe3b46aee4',
blockNumber: 73730, blockNumber: 73730,
...@@ -2049,8 +1980,7 @@ export const blocksOnL2 = [ ...@@ -2049,8 +1980,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000002c3035fe439d0e867578fe699b50f7bdf0564da9b21ccdbee6250aa647f56c37d954184caad10a317dc08454f7c0277451bb4310ca2a294caf4df3f47c0d94300', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000002c3035fe439d0e867578fe699b50f7bdf0564da9b21ccdbee6250aa647f56c37d954184caad10a317dc08454f7c0277451bb4310ca2a294caf4df3f47c0d94300',
transactions: [ transactions: [
{ {
hash: hash: '0x614e75cb10c7377074426b963c433462c90277337a7fe5c603cd26f18c61c78c',
'0x614e75cb10c7377074426b963c433462c90277337a7fe5c603cd26f18c61c78c',
blockHash: blockHash:
'0x62b02811b13bd57822df19a491d6511691b4acfbcc58a1ddc5790b017fae3650', '0x62b02811b13bd57822df19a491d6511691b4acfbcc58a1ddc5790b017fae3650',
blockNumber: 73731, blockNumber: 73731,
...@@ -2086,8 +2016,7 @@ export const blocksOnL2 = [ ...@@ -2086,8 +2016,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004bb8acb632e99e77831797fc13fd1d1159d242825e0725eed501c9a7e6d9eae917695d14c5f2f454d2b4caa16fc7dd0e812666b66184a9ed1164bd86d79448ea01', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004bb8acb632e99e77831797fc13fd1d1159d242825e0725eed501c9a7e6d9eae917695d14c5f2f454d2b4caa16fc7dd0e812666b66184a9ed1164bd86d79448ea01',
transactions: [ transactions: [
{ {
hash: hash: '0x78f5ec8b7dfe3e57571bc3dbf668d1ad271014e625a04f6b17228b1aad6e66ae',
'0x78f5ec8b7dfe3e57571bc3dbf668d1ad271014e625a04f6b17228b1aad6e66ae',
blockHash: blockHash:
'0x6824eb9bfea1b397dca6572dca9cb9580d72ae4620cb54b4f3bba81c15239903', '0x6824eb9bfea1b397dca6572dca9cb9580d72ae4620cb54b4f3bba81c15239903',
blockNumber: 73732, blockNumber: 73732,
...@@ -2123,8 +2052,7 @@ export const blocksOnL2 = [ ...@@ -2123,8 +2052,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000aff2aec730ceb8f668a9327778a5f499f23a82258e4ba92d56b3b7b372186c924ad7f4085ddaf4c7ae7b745e5e40e4f1fdb1962ad04a70fddb6a80a2292c55b100', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000aff2aec730ceb8f668a9327778a5f499f23a82258e4ba92d56b3b7b372186c924ad7f4085ddaf4c7ae7b745e5e40e4f1fdb1962ad04a70fddb6a80a2292c55b100',
transactions: [ transactions: [
{ {
hash: hash: '0x8c7ea643f208439df533d76b2393a8c686da4bd450d94a15887bbb0e37f50fce',
'0x8c7ea643f208439df533d76b2393a8c686da4bd450d94a15887bbb0e37f50fce',
blockHash: blockHash:
'0x825aa97c2f8ef147b2377cbfa5d6ac225e14ce8f0f848ff23450ffdaa42be35e', '0x825aa97c2f8ef147b2377cbfa5d6ac225e14ce8f0f848ff23450ffdaa42be35e',
blockNumber: 73733, blockNumber: 73733,
...@@ -2160,8 +2088,7 @@ export const blocksOnL2 = [ ...@@ -2160,8 +2088,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000d4f700553051408f99d4cb0d0ab6a4401179252be594a8edaa49fef8e50b42957996054339f452435ce0193b7f30f4fc99562c1161582b6ee96e822a86cee89f01', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000d4f700553051408f99d4cb0d0ab6a4401179252be594a8edaa49fef8e50b42957996054339f452435ce0193b7f30f4fc99562c1161582b6ee96e822a86cee89f01',
transactions: [ transactions: [
{ {
hash: hash: '0x5f2fea4c6955f3b29e76f11904c796b9091052a57335b08d8424b6849d1da93e',
'0x5f2fea4c6955f3b29e76f11904c796b9091052a57335b08d8424b6849d1da93e',
blockHash: blockHash:
'0xd15583e3fe28d4abdb1160cd31a76197a32465a69841e8cd862382929fd8e48f', '0xd15583e3fe28d4abdb1160cd31a76197a32465a69841e8cd862382929fd8e48f',
blockNumber: 73734, blockNumber: 73734,
...@@ -2197,8 +2124,7 @@ export const blocksOnL2 = [ ...@@ -2197,8 +2124,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f18d2a179919935aa90fa5d00623ba6fdf93d30b62dd177423dd5585c29cd9e77e5045696c292f49175533f6d268d5bb75cafa3032eaf66238ede53934b9578b01', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f18d2a179919935aa90fa5d00623ba6fdf93d30b62dd177423dd5585c29cd9e77e5045696c292f49175533f6d268d5bb75cafa3032eaf66238ede53934b9578b01',
transactions: [ transactions: [
{ {
hash: hash: '0xdf3d1d9aceaa4099061f0ab4f01d16c77992308b00880f7185f072962e2dbd71',
'0xdf3d1d9aceaa4099061f0ab4f01d16c77992308b00880f7185f072962e2dbd71',
blockHash: blockHash:
'0x54338dba2c8d1e9788c4217ed3bee8fd56a4f5d121a04ad70bbd03de72808d6f', '0x54338dba2c8d1e9788c4217ed3bee8fd56a4f5d121a04ad70bbd03de72808d6f',
blockNumber: 73735, blockNumber: 73735,
...@@ -2234,8 +2160,7 @@ export const blocksOnL2 = [ ...@@ -2234,8 +2160,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000cbadd9aec19116028d4c0a71c77fdabe9990fd5f8e89692baadfc56e96fe694630bfc624dcd9883999860b67a4d5d6ebf17d2f0803aec1805a7a5d603be5120000', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000cbadd9aec19116028d4c0a71c77fdabe9990fd5f8e89692baadfc56e96fe694630bfc624dcd9883999860b67a4d5d6ebf17d2f0803aec1805a7a5d603be5120000',
transactions: [ transactions: [
{ {
hash: hash: '0xf55cb32c70dc137f72c50665d743530714ae93af7ea19d38bc76a13795c538a6',
'0xf55cb32c70dc137f72c50665d743530714ae93af7ea19d38bc76a13795c538a6',
blockHash: blockHash:
'0x76eb332116e8c76f2e97d24b1e131fba5ae347d67d4a3d26dd87bee387e628e6', '0x76eb332116e8c76f2e97d24b1e131fba5ae347d67d4a3d26dd87bee387e628e6',
blockNumber: 73736, blockNumber: 73736,
...@@ -2247,8 +2172,7 @@ export const blocksOnL2 = [ ...@@ -2247,8 +2172,7 @@ export const blocksOnL2 = [
to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64', to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 24262, nonce: 24262,
data: data: '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e4e9c0000000000000000000000000000000000000000000000000000000000000001534e58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000013f1070b03f018000',
'0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e4e9c0000000000000000000000000000000000000000000000000000000000000001534e58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000013f1070b03f018000',
r: '0xff75b419c212ab48019e879247e2aad3a917dc6000e4c0a788af865637b2d8ac', r: '0xff75b419c212ab48019e879247e2aad3a917dc6000e4c0a788af865637b2d8ac',
s: '0x422cd67f43ce27c0d0d46c32cdc80409a74029d00c41ab9579adf760671cfd37', s: '0x422cd67f43ce27c0d0d46c32cdc80409a74029d00c41ab9579adf760671cfd37',
v: 55, v: 55,
...@@ -2272,8 +2196,7 @@ export const blocksOnL2 = [ ...@@ -2272,8 +2196,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004c70e7772fe07cc6cc5f2790d3460ffd344f0cd508fe8b8a04ccc5b0a39315660011f30f82ba5e4e041ee07d6d0d7d9e705b1e1e12146295d852b196445350f700', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004c70e7772fe07cc6cc5f2790d3460ffd344f0cd508fe8b8a04ccc5b0a39315660011f30f82ba5e4e041ee07d6d0d7d9e705b1e1e12146295d852b196445350f700',
transactions: [ transactions: [
{ {
hash: hash: '0x685258be6eaba9abe04b6389604ffc457806d6ef070e7ba0ef5ce3dc9449b5a2',
'0x685258be6eaba9abe04b6389604ffc457806d6ef070e7ba0ef5ce3dc9449b5a2',
blockHash: blockHash:
'0x726971ea88f6a1aec60945d348d55f72b11df6032886cb3c40332abf98eda77a', '0x726971ea88f6a1aec60945d348d55f72b11df6032886cb3c40332abf98eda77a',
blockNumber: 73737, blockNumber: 73737,
...@@ -2309,8 +2232,7 @@ export const blocksOnL2 = [ ...@@ -2309,8 +2232,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000feb88749013619474c7a36fc19b9b3a784e8c23574a7d04d80987bca904d8e8c1fdb9c4a0751770e3ead12c962450cf9a31b4d36ea5e119aec3f7e00221bc71601', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000feb88749013619474c7a36fc19b9b3a784e8c23574a7d04d80987bca904d8e8c1fdb9c4a0751770e3ead12c962450cf9a31b4d36ea5e119aec3f7e00221bc71601',
transactions: [ transactions: [
{ {
hash: hash: '0xda0f9d8dd64967d1d4927317f202c2f0bc47071e301d3bfb7e9f312ea6ac094d',
'0xda0f9d8dd64967d1d4927317f202c2f0bc47071e301d3bfb7e9f312ea6ac094d',
blockHash: blockHash:
'0x9cf50053dde104e0b38f22a41c687961f55d2085bcd7fe4df86255b4883f833c', '0x9cf50053dde104e0b38f22a41c687961f55d2085bcd7fe4df86255b4883f833c',
blockNumber: 73738, blockNumber: 73738,
...@@ -2346,8 +2268,7 @@ export const blocksOnL2 = [ ...@@ -2346,8 +2268,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004d4a4e2828626ef6ed2c4f7a712117ada5e8015b64570b33c42e9812917014b84016f7c2b7f917c692373ff933f0c613d5d8d1dbdbd95d22d8f8a1072a1a88b601', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004d4a4e2828626ef6ed2c4f7a712117ada5e8015b64570b33c42e9812917014b84016f7c2b7f917c692373ff933f0c613d5d8d1dbdbd95d22d8f8a1072a1a88b601',
transactions: [ transactions: [
{ {
hash: hash: '0x6149f5162096eb45e009877a26235ec4e7c2dfc3b2d12c94802761605f70246b',
'0x6149f5162096eb45e009877a26235ec4e7c2dfc3b2d12c94802761605f70246b',
blockHash: blockHash:
'0x97b300d997878f4ae361840f7ac1c4b18d979a6640390b9e531f3afc4fe4a658', '0x97b300d997878f4ae361840f7ac1c4b18d979a6640390b9e531f3afc4fe4a658',
blockNumber: 73739, blockNumber: 73739,
...@@ -2383,8 +2304,7 @@ export const blocksOnL2 = [ ...@@ -2383,8 +2304,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004eb603b61fe64b9b99a187cd9d2e94c14169cc44e308dbabd2f21b7c9bb29f6e3d553fbd047ff96df2d7e817eaebd0a4f5fcfb9bc3f96ed3c66c5623e5fa664c00', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004eb603b61fe64b9b99a187cd9d2e94c14169cc44e308dbabd2f21b7c9bb29f6e3d553fbd047ff96df2d7e817eaebd0a4f5fcfb9bc3f96ed3c66c5623e5fa664c00',
transactions: [ transactions: [
{ {
hash: hash: '0x6729da933f4e27a4238094c866ec5aa7d9b1408e18dd9c31fd213b543a0b3394',
'0x6729da933f4e27a4238094c866ec5aa7d9b1408e18dd9c31fd213b543a0b3394',
blockHash: blockHash:
'0x800d515ef6a11d981f6e5ce34fd579ecbac6070b1fdb0b264f4d01314804aab3', '0x800d515ef6a11d981f6e5ce34fd579ecbac6070b1fdb0b264f4d01314804aab3',
blockNumber: 73740, blockNumber: 73740,
...@@ -2396,8 +2316,7 @@ export const blocksOnL2 = [ ...@@ -2396,8 +2316,7 @@ export const blocksOnL2 = [
to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 21, nonce: 21,
data: data: '0x8a2900140000000000000000000000000000000000000000000000001bc16d674ec80000',
'0x8a2900140000000000000000000000000000000000000000000000001bc16d674ec80000',
r: '0xff3ecc7ecf5a169c2b1c4360c63dcf9a8d786d804f400f1bd4bb0fcb9401644f', r: '0xff3ecc7ecf5a169c2b1c4360c63dcf9a8d786d804f400f1bd4bb0fcb9401644f',
s: '0x618ca9780aae23bab8a688cf6bf40258e0c44b8089e6bf0989d5aafe9236d3fa', s: '0x618ca9780aae23bab8a688cf6bf40258e0c44b8089e6bf0989d5aafe9236d3fa',
v: 55, v: 55,
...@@ -2421,8 +2340,7 @@ export const blocksOnL2 = [ ...@@ -2421,8 +2340,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000c67f33fdf8f59ac161eaec76d5395110270588c1b1f559dfe5dab5cdef7ea86631abde0105a05aafabb71e369f9c9b23bbe169378eeb6e307b8001e8e6ad643600', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000c67f33fdf8f59ac161eaec76d5395110270588c1b1f559dfe5dab5cdef7ea86631abde0105a05aafabb71e369f9c9b23bbe169378eeb6e307b8001e8e6ad643600',
transactions: [ transactions: [
{ {
hash: hash: '0xce2138589a9a584b9a091d87c02a1df761facb0d228c3efca59bcec0c727cbe2',
'0xce2138589a9a584b9a091d87c02a1df761facb0d228c3efca59bcec0c727cbe2',
blockHash: blockHash:
'0xb0316aa744becc1da9b8611aeeca30e21d3edbb894979a101830498b92d02979', '0xb0316aa744becc1da9b8611aeeca30e21d3edbb894979a101830498b92d02979',
blockNumber: 73741, blockNumber: 73741,
...@@ -2458,8 +2376,7 @@ export const blocksOnL2 = [ ...@@ -2458,8 +2376,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000006c793440d797debc46842efd1f8cb018805f670246c127a37aaffbb62f4d9e3446e165df34685f680013fd9b7fdf55adae4957512d0b463c418816600694699b00', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000006c793440d797debc46842efd1f8cb018805f670246c127a37aaffbb62f4d9e3446e165df34685f680013fd9b7fdf55adae4957512d0b463c418816600694699b00',
transactions: [ transactions: [
{ {
hash: hash: '0xd5862a1c5e9f5ff20717a9b09f32651121570a3b18b42575d4169a846df7d02a',
'0xd5862a1c5e9f5ff20717a9b09f32651121570a3b18b42575d4169a846df7d02a',
blockHash: blockHash:
'0x760673ecd216aa1dc9d56d963bdda9e5c99f09a0fdc00466f860baed3ad4aa65', '0x760673ecd216aa1dc9d56d963bdda9e5c99f09a0fdc00466f860baed3ad4aa65',
blockNumber: 73742, blockNumber: 73742,
...@@ -2495,8 +2412,7 @@ export const blocksOnL2 = [ ...@@ -2495,8 +2412,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000008b8d9e0e499a1ef986610cfd24584eed7a0cdf18e66f299eef9dfd93f5b5048a56add2486efabadc856bd4e761d1d4d905614ba30d4f5f7665b7872e4bc3446d00', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000008b8d9e0e499a1ef986610cfd24584eed7a0cdf18e66f299eef9dfd93f5b5048a56add2486efabadc856bd4e761d1d4d905614ba30d4f5f7665b7872e4bc3446d00',
transactions: [ transactions: [
{ {
hash: hash: '0x72362aa62a6db1ab6c5c50c8129f924b55618a0acc22a60a769599d3066a2804',
'0x72362aa62a6db1ab6c5c50c8129f924b55618a0acc22a60a769599d3066a2804',
blockHash: blockHash:
'0xed201c08d3aa84855cebf44e6c6c0e259089d8a61d47af10e4ed492c33473f6c', '0xed201c08d3aa84855cebf44e6c6c0e259089d8a61d47af10e4ed492c33473f6c',
blockNumber: 73743, blockNumber: 73743,
...@@ -2532,8 +2448,7 @@ export const blocksOnL2 = [ ...@@ -2532,8 +2448,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000007d278a52ea558f46021e498c2d2e8c52cc3f9392c138682182afe9e76f49034c211bc154b2388a3b93227a29169378baf230c04b11878adfcc04909e3bf5187000', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000007d278a52ea558f46021e498c2d2e8c52cc3f9392c138682182afe9e76f49034c211bc154b2388a3b93227a29169378baf230c04b11878adfcc04909e3bf5187000',
transactions: [ transactions: [
{ {
hash: hash: '0x23f8cc33935882afc5c3ed8f0696113f1d98a2db8021b4221a872d1bdc7473bb',
'0x23f8cc33935882afc5c3ed8f0696113f1d98a2db8021b4221a872d1bdc7473bb',
blockHash: blockHash:
'0xd1e91f548008901737e67cd1ed4e550a6a8437dcae5ebe76d43f197d3ae915b6', '0xd1e91f548008901737e67cd1ed4e550a6a8437dcae5ebe76d43f197d3ae915b6',
blockNumber: 73744, blockNumber: 73744,
...@@ -2545,8 +2460,7 @@ export const blocksOnL2 = [ ...@@ -2545,8 +2460,7 @@ export const blocksOnL2 = [
to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 4, nonce: 4,
data: data: '0x8a290014000000000000000000000000000000000000000000000001158e460913d00000',
'0x8a290014000000000000000000000000000000000000000000000001158e460913d00000',
r: '0xf4cc4215e75d412821ef74ff9c20918c421227217f7c135f9b56a5bab8411f70', r: '0xf4cc4215e75d412821ef74ff9c20918c421227217f7c135f9b56a5bab8411f70',
s: '0x61a8b99a11ea37c5346f62e70521f60ed7e664fb4b0f82e4c6a1d3e62c33607c', s: '0x61a8b99a11ea37c5346f62e70521f60ed7e664fb4b0f82e4c6a1d3e62c33607c',
v: 55, v: 55,
...@@ -2570,8 +2484,7 @@ export const blocksOnL2 = [ ...@@ -2570,8 +2484,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000000c1d5aa1ba8783070a9ad070e566570e8c285e20ce31b74f2f7ddd0a8a8ddda807f451c7a09b4228d47bf1ac20d62d99b4fa84cad6c0243c99687bd7da88659800', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000000c1d5aa1ba8783070a9ad070e566570e8c285e20ce31b74f2f7ddd0a8a8ddda807f451c7a09b4228d47bf1ac20d62d99b4fa84cad6c0243c99687bd7da88659800',
transactions: [ transactions: [
{ {
hash: hash: '0xb1c8be35624e885828d73d92aaf4225ae70cd3edf331f3abefbfaed823997dfe',
'0xb1c8be35624e885828d73d92aaf4225ae70cd3edf331f3abefbfaed823997dfe',
blockHash: blockHash:
'0x81b471293ba3dc62adc4fbca8de9eb3e059a4d59fe4c56170b21355b21a5063c', '0x81b471293ba3dc62adc4fbca8de9eb3e059a4d59fe4c56170b21355b21a5063c',
blockNumber: 73745, blockNumber: 73745,
...@@ -2607,8 +2520,7 @@ export const blocksOnL2 = [ ...@@ -2607,8 +2520,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000168540e1953bf45d618573c73774a3060b5b97e155de02c8a54da7a40c59c70c1eef1cac26b7d5fc7ae50767f9fcafbbd0664245fae39d98add26d8b12cc893b00', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000168540e1953bf45d618573c73774a3060b5b97e155de02c8a54da7a40c59c70c1eef1cac26b7d5fc7ae50767f9fcafbbd0664245fae39d98add26d8b12cc893b00',
transactions: [ transactions: [
{ {
hash: hash: '0xa9c363ded7714b2872399c22a072d4e442f91c3b9e1b6776e053b23291c833a9',
'0xa9c363ded7714b2872399c22a072d4e442f91c3b9e1b6776e053b23291c833a9',
blockHash: blockHash:
'0x4f775841084711ede72417c0ff52946bcaefa867e23b144247f3cddca2105f07', '0x4f775841084711ede72417c0ff52946bcaefa867e23b144247f3cddca2105f07',
blockNumber: 73746, blockNumber: 73746,
...@@ -2644,8 +2556,7 @@ export const blocksOnL2 = [ ...@@ -2644,8 +2556,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b18f65cf7082c14ce64886138e24ad1a9641fb370abb0e63531cf3c87b12fb763748a1ec96111b3963cd779eb0ce55aa1de0a5511fafc3d734d99436c942360100', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b18f65cf7082c14ce64886138e24ad1a9641fb370abb0e63531cf3c87b12fb763748a1ec96111b3963cd779eb0ce55aa1de0a5511fafc3d734d99436c942360100',
transactions: [ transactions: [
{ {
hash: hash: '0x3e6498d7c77ce2f26d4fa4f0e921cc6ba1f9ce648b14598ca9abaff31974347a',
'0x3e6498d7c77ce2f26d4fa4f0e921cc6ba1f9ce648b14598ca9abaff31974347a',
blockHash: blockHash:
'0xf3e57f1f508438f3734e5acce3b6bad105f4528e47eebd2731d812089cb9f4be', '0xf3e57f1f508438f3734e5acce3b6bad105f4528e47eebd2731d812089cb9f4be',
blockNumber: 73747, blockNumber: 73747,
...@@ -2681,8 +2592,7 @@ export const blocksOnL2 = [ ...@@ -2681,8 +2592,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000e77503f2a6506b9b96236570165d4ce6ee79227d09a3aa101349818ffd2839086f91d514a9dd271225092e3ab6d1a40c89a8e50cafcd78255bec047e049610ad01', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000e77503f2a6506b9b96236570165d4ce6ee79227d09a3aa101349818ffd2839086f91d514a9dd271225092e3ab6d1a40c89a8e50cafcd78255bec047e049610ad01',
transactions: [ transactions: [
{ {
hash: hash: '0x62e1f877a02dffb567152392ce9cc7c559106b5c63672d39d1e919a428e9ae09',
'0x62e1f877a02dffb567152392ce9cc7c559106b5c63672d39d1e919a428e9ae09',
blockHash: blockHash:
'0x9b61c65c8c1b83cee519edce1c2a768c46348a7267117a31cf7db288a074e0d6', '0x9b61c65c8c1b83cee519edce1c2a768c46348a7267117a31cf7db288a074e0d6',
blockNumber: 73748, blockNumber: 73748,
...@@ -2718,8 +2628,7 @@ export const blocksOnL2 = [ ...@@ -2718,8 +2628,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000969ed1a7bcbe8d518e9412972e71336b096061dde90664742603062bb660e3833540deafb5f6821436de52357db723ca49d6cf46b36b0fa4ca0f839a2388621d01', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000969ed1a7bcbe8d518e9412972e71336b096061dde90664742603062bb660e3833540deafb5f6821436de52357db723ca49d6cf46b36b0fa4ca0f839a2388621d01',
transactions: [ transactions: [
{ {
hash: hash: '0x84f54a77602b26dcf9482f233218ce87cbe9cc8bc751d2b40562033d88d46744',
'0x84f54a77602b26dcf9482f233218ce87cbe9cc8bc751d2b40562033d88d46744',
blockHash: blockHash:
'0x83cb46b63cbdb7eed4f4c076b5bbdaa290810cad09f6952ce35fb13c3f822497', '0x83cb46b63cbdb7eed4f4c076b5bbdaa290810cad09f6952ce35fb13c3f822497',
blockNumber: 73749, blockNumber: 73749,
...@@ -2755,8 +2664,7 @@ export const blocksOnL2 = [ ...@@ -2755,8 +2664,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000644556575ab3edb43ca79c7217a54721316207c71b47cfe1d5ccd7607db4cbf63ca535f5c418a466b4b6bd6cac614450a5938810256da7db25d8cd9b69bf1e4201', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000644556575ab3edb43ca79c7217a54721316207c71b47cfe1d5ccd7607db4cbf63ca535f5c418a466b4b6bd6cac614450a5938810256da7db25d8cd9b69bf1e4201',
transactions: [ transactions: [
{ {
hash: hash: '0xd78e9c80ba15f21721f6698fcc2720c239c5109698435b3e70a534a196c6a730',
'0xd78e9c80ba15f21721f6698fcc2720c239c5109698435b3e70a534a196c6a730',
blockHash: blockHash:
'0x7f0379fc95028b254e4f583087f9ebcb97bd0e1819a3bef536e848819d8070a8', '0x7f0379fc95028b254e4f583087f9ebcb97bd0e1819a3bef536e848819d8070a8',
blockNumber: 73750, blockNumber: 73750,
...@@ -2792,8 +2700,7 @@ export const blocksOnL2 = [ ...@@ -2792,8 +2700,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000788f7a2575066bf6ce6c58ba98aee074bf3debedd362dc38f269bc966b608ffc72bc832f4c009615a718682f487e23cfe9adaaeb86528e0dddcfe00d23c4b6d900', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000788f7a2575066bf6ce6c58ba98aee074bf3debedd362dc38f269bc966b608ffc72bc832f4c009615a718682f487e23cfe9adaaeb86528e0dddcfe00d23c4b6d900',
transactions: [ transactions: [
{ {
hash: hash: '0x0e5d27c8bde5e1f198a962a816161bff440f493839dd4bc8b88eac8c41e9db7d',
'0x0e5d27c8bde5e1f198a962a816161bff440f493839dd4bc8b88eac8c41e9db7d',
blockHash: blockHash:
'0x5b7beae947c77edf28ba5da443ee1b4406a11071d7f4d17e4f12cfd44e34545e', '0x5b7beae947c77edf28ba5da443ee1b4406a11071d7f4d17e4f12cfd44e34545e',
blockNumber: 73751, blockNumber: 73751,
...@@ -2829,8 +2736,7 @@ export const blocksOnL2 = [ ...@@ -2829,8 +2736,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000000abc3b479b8ef6034747e3e9c080dd7e7017633298e3cb63e312db9a01164394058188a4ba70ff4985a96ea29ef3ca83816f8d2453793ba01d3b73af0f49f3ab01', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000000abc3b479b8ef6034747e3e9c080dd7e7017633298e3cb63e312db9a01164394058188a4ba70ff4985a96ea29ef3ca83816f8d2453793ba01d3b73af0f49f3ab01',
transactions: [ transactions: [
{ {
hash: hash: '0x3327e4b8e5f8683aa9c4ed3193b52ec05f3e995f35fab89875692a50d55d012e',
'0x3327e4b8e5f8683aa9c4ed3193b52ec05f3e995f35fab89875692a50d55d012e',
blockHash: blockHash:
'0x18a02230f1221684dde943ce28a505abef796d282aad5d97511511bcfb5a2f0b', '0x18a02230f1221684dde943ce28a505abef796d282aad5d97511511bcfb5a2f0b',
blockNumber: 73752, blockNumber: 73752,
...@@ -2866,8 +2772,7 @@ export const blocksOnL2 = [ ...@@ -2866,8 +2772,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000678512863eadff1d5c9e1e0f37987d819932f1a8937f9b1ed8c85bc8214be2cf299b7a5f2164d74a73402032e1f06d47ba183c93e01e48c4911e27e1438815b300', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000678512863eadff1d5c9e1e0f37987d819932f1a8937f9b1ed8c85bc8214be2cf299b7a5f2164d74a73402032e1f06d47ba183c93e01e48c4911e27e1438815b300',
transactions: [ transactions: [
{ {
hash: hash: '0xe3f17f5e4a7a6b7e8d0610967b0c7ab101ca504c6d499730d8036d5318478ee4',
'0xe3f17f5e4a7a6b7e8d0610967b0c7ab101ca504c6d499730d8036d5318478ee4',
blockHash: blockHash:
'0x7df6dc469a4f727c6ee199981d3c4678d1dbff6415e613a8aa0f79db440ff15d', '0x7df6dc469a4f727c6ee199981d3c4678d1dbff6415e613a8aa0f79db440ff15d',
blockNumber: 73753, blockNumber: 73753,
...@@ -2903,8 +2808,7 @@ export const blocksOnL2 = [ ...@@ -2903,8 +2808,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000cdea0b26c1d783649c40ca645a2b656a2b8f21c593f06a5f7a5f3cb482d0305e1abc88cbe593dcedb2e5a6daa95482cb0976b65f8040dafb31e93d80f0b4b32500', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000cdea0b26c1d783649c40ca645a2b656a2b8f21c593f06a5f7a5f3cb482d0305e1abc88cbe593dcedb2e5a6daa95482cb0976b65f8040dafb31e93d80f0b4b32500',
transactions: [ transactions: [
{ {
hash: hash: '0x2c9599252456882c97aad3ec78d16c3695b00de2d1f8605a7d3cee63fbdbd116',
'0x2c9599252456882c97aad3ec78d16c3695b00de2d1f8605a7d3cee63fbdbd116',
blockHash: blockHash:
'0x42adb46d26b5b3c8fc3c87e851df3d8694ab987957d3ce7c3d215bedb988eb09', '0x42adb46d26b5b3c8fc3c87e851df3d8694ab987957d3ce7c3d215bedb988eb09',
blockNumber: 73754, blockNumber: 73754,
...@@ -2940,8 +2844,7 @@ export const blocksOnL2 = [ ...@@ -2940,8 +2844,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000059627ac3e767798e395b1921ee97f95890e40771868a4df8896d8eae4d0afefe3848ea1c91ea942d019a28077144842cbe8609cfa7fa38d8fe421f65af3ad36200', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000059627ac3e767798e395b1921ee97f95890e40771868a4df8896d8eae4d0afefe3848ea1c91ea942d019a28077144842cbe8609cfa7fa38d8fe421f65af3ad36200',
transactions: [ transactions: [
{ {
hash: hash: '0x3f20c0ea4ebc02cfb8b842228e39a15365a03834b27765f7ec45852daf4edaa4',
'0x3f20c0ea4ebc02cfb8b842228e39a15365a03834b27765f7ec45852daf4edaa4',
blockHash: blockHash:
'0x9517b996555af87a10a2bacc424613de7bbf39c408233adf3f2d93383d63b299', '0x9517b996555af87a10a2bacc424613de7bbf39c408233adf3f2d93383d63b299',
blockNumber: 73755, blockNumber: 73755,
...@@ -2977,8 +2880,7 @@ export const blocksOnL2 = [ ...@@ -2977,8 +2880,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000d355d96c253fdf234b06688e6ed068f36a596319ca10bf3b2d92b42bebb8c97b02418eb6bf4e14ef7540fc7170aa71531f773675952c140c60fb92d5d8116f4300', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000d355d96c253fdf234b06688e6ed068f36a596319ca10bf3b2d92b42bebb8c97b02418eb6bf4e14ef7540fc7170aa71531f773675952c140c60fb92d5d8116f4300',
transactions: [ transactions: [
{ {
hash: hash: '0x116c88fa7caf55eae4b5af2d590830d0f7f317cfa8450b2babc96be9a9e7c4ac',
'0x116c88fa7caf55eae4b5af2d590830d0f7f317cfa8450b2babc96be9a9e7c4ac',
blockHash: blockHash:
'0x3282de9f8b23ab38059c076c3cd83080474186a81d738b9bed8464a3b4d64a0e', '0x3282de9f8b23ab38059c076c3cd83080474186a81d738b9bed8464a3b4d64a0e',
blockNumber: 73756, blockNumber: 73756,
...@@ -3014,8 +2916,7 @@ export const blocksOnL2 = [ ...@@ -3014,8 +2916,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000002e6dc07438bb2f77e503a14fe549ff8cc0d94bf89b6701cdf876eacb1470c25542ba4eb828f3264ff056079aea99f7cadf7853436cca22f8ec643edd013e7e1b00', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000002e6dc07438bb2f77e503a14fe549ff8cc0d94bf89b6701cdf876eacb1470c25542ba4eb828f3264ff056079aea99f7cadf7853436cca22f8ec643edd013e7e1b00',
transactions: [ transactions: [
{ {
hash: hash: '0x9526c50f66224b829682644c0f8a59478191c65e798fbb62a9ecebf5d939ca35',
'0x9526c50f66224b829682644c0f8a59478191c65e798fbb62a9ecebf5d939ca35',
blockHash: blockHash:
'0x8bc4671779b6b858d940865a6e777d8c0d9978ef1816aee3c351702ed2ff528b', '0x8bc4671779b6b858d940865a6e777d8c0d9978ef1816aee3c351702ed2ff528b',
blockNumber: 73757, blockNumber: 73757,
...@@ -3027,8 +2928,7 @@ export const blocksOnL2 = [ ...@@ -3027,8 +2928,7 @@ export const blocksOnL2 = [
to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64', to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 24263, nonce: 24263,
data: data: '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e508c0000000000000000000000000000000000000000000000000000000000000001534e58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000013cf0dfffc45f0000',
'0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e508c0000000000000000000000000000000000000000000000000000000000000001534e58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000013cf0dfffc45f0000',
r: '0x51884bdaf68fe6c64943a5f3160b5fcd7ef9140463937fc8d1ecdb3c916d7096', r: '0x51884bdaf68fe6c64943a5f3160b5fcd7ef9140463937fc8d1ecdb3c916d7096',
s: '0x354237eb3c63430116601c5b887dc44a4d4bce5639be1fa36b91243bb76e2b35', s: '0x354237eb3c63430116601c5b887dc44a4d4bce5639be1fa36b91243bb76e2b35',
v: 56, v: 56,
...@@ -3052,8 +2952,7 @@ export const blocksOnL2 = [ ...@@ -3052,8 +2952,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000081c45a13d3b73f7a60e41c5cd680d37d71befd6a88cb65a4789520748e2afb473bf24ac640d5cea3d683bb665630442f2818bc987843dea8b956384fe386dac701', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000081c45a13d3b73f7a60e41c5cd680d37d71befd6a88cb65a4789520748e2afb473bf24ac640d5cea3d683bb665630442f2818bc987843dea8b956384fe386dac701',
transactions: [ transactions: [
{ {
hash: hash: '0x5bed4ece9a4fc43ebe0c6e641e800edf5657f3dcbf7b55e56f04ca67c38731cb',
'0x5bed4ece9a4fc43ebe0c6e641e800edf5657f3dcbf7b55e56f04ca67c38731cb',
blockHash: blockHash:
'0xe725ac1c3086b18cca9768dd997f61a4bf816118f11880e05060453fbd1d4a81', '0xe725ac1c3086b18cca9768dd997f61a4bf816118f11880e05060453fbd1d4a81',
blockNumber: 73758, blockNumber: 73758,
...@@ -3089,8 +2988,7 @@ export const blocksOnL2 = [ ...@@ -3089,8 +2988,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b805dc8eff8cb70d147bef8e9739a5951721b836008168b356c1ea7a4793d3101cc0c9aa99b07fede0681bb62295a8ac58bbde662a71d2360773813e080bf08000', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b805dc8eff8cb70d147bef8e9739a5951721b836008168b356c1ea7a4793d3101cc0c9aa99b07fede0681bb62295a8ac58bbde662a71d2360773813e080bf08000',
transactions: [ transactions: [
{ {
hash: hash: '0x86395b81abae2233743b14fb907be12d45cdc6734402a8ded1a2a9b02318c325',
'0x86395b81abae2233743b14fb907be12d45cdc6734402a8ded1a2a9b02318c325',
blockHash: blockHash:
'0x5b239a385610753bec0d0f584fe712933810e1a834f606bf0384e45294a5569d', '0x5b239a385610753bec0d0f584fe712933810e1a834f606bf0384e45294a5569d',
blockNumber: 73759, blockNumber: 73759,
...@@ -3126,8 +3024,7 @@ export const blocksOnL2 = [ ...@@ -3126,8 +3024,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000ccff72b0b5d12d02ff8f9d38d1505ca150f03b93047cc8175166a9515684382a43d0375924aff8ee44816617de81be12e4fce2f067f3ec8a44c1c0d290117f8301', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000ccff72b0b5d12d02ff8f9d38d1505ca150f03b93047cc8175166a9515684382a43d0375924aff8ee44816617de81be12e4fce2f067f3ec8a44c1c0d290117f8301',
transactions: [ transactions: [
{ {
hash: hash: '0xa90eeddb2ee67d4702deaa0153630b602d0d758475b2cca43c63dcce5cc3310d',
'0xa90eeddb2ee67d4702deaa0153630b602d0d758475b2cca43c63dcce5cc3310d',
blockHash: blockHash:
'0xb7a443e1fb073fd0683b4eb129eefca0d881a632d8bbc3dcc60dfbcf9e1b7879', '0xb7a443e1fb073fd0683b4eb129eefca0d881a632d8bbc3dcc60dfbcf9e1b7879',
blockNumber: 73760, blockNumber: 73760,
...@@ -3163,8 +3060,7 @@ export const blocksOnL2 = [ ...@@ -3163,8 +3060,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000283e47495d8866cce4ed7d45570ac856810b345af078e83cff4c3dc990f380076d44ee8bfd5ad054dd06840dab9b215be0d500eda7f370abd70f58636acb602400', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000283e47495d8866cce4ed7d45570ac856810b345af078e83cff4c3dc990f380076d44ee8bfd5ad054dd06840dab9b215be0d500eda7f370abd70f58636acb602400',
transactions: [ transactions: [
{ {
hash: hash: '0x5d8931d0e12537db4d1923d56287f3129edb466f5685047baed6e2672bb81a3e',
'0x5d8931d0e12537db4d1923d56287f3129edb466f5685047baed6e2672bb81a3e',
blockHash: blockHash:
'0x24a0bfe2f6005e6b9b22f12bb8ff40c012f38498195c45c9ff1aeeb24a27972f', '0x24a0bfe2f6005e6b9b22f12bb8ff40c012f38498195c45c9ff1aeeb24a27972f',
blockNumber: 73761, blockNumber: 73761,
...@@ -3200,8 +3096,7 @@ export const blocksOnL2 = [ ...@@ -3200,8 +3096,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000001729895c541fbb3216038267509d2870e747e003cb26c521fe3fc1014a2cd1c8611a659d537cf09b30895204e253dab24647e1fcf985f6b2a3a6385f66b378c201', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000001729895c541fbb3216038267509d2870e747e003cb26c521fe3fc1014a2cd1c8611a659d537cf09b30895204e253dab24647e1fcf985f6b2a3a6385f66b378c201',
transactions: [ transactions: [
{ {
hash: hash: '0x38a8e192c627493051a4a49979ae90b6dff0f44b794cbac875d483ddec253ff6',
'0x38a8e192c627493051a4a49979ae90b6dff0f44b794cbac875d483ddec253ff6',
blockHash: blockHash:
'0x3f7ed8e9f6a6321a1b18832b6eeb05fad80a71a5143b4df99b9826fa668d3793', '0x3f7ed8e9f6a6321a1b18832b6eeb05fad80a71a5143b4df99b9826fa668d3793',
blockNumber: 73762, blockNumber: 73762,
...@@ -3237,8 +3132,7 @@ export const blocksOnL2 = [ ...@@ -3237,8 +3132,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000000c9da3a36278b55d06ae9f4c115c437d1ee5454e4957afb847b9b740da965181c63132504040a289e6c21114d397c83d49e3daf48f1fbf4ee4fa883fb1850c301', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000000c9da3a36278b55d06ae9f4c115c437d1ee5454e4957afb847b9b740da965181c63132504040a289e6c21114d397c83d49e3daf48f1fbf4ee4fa883fb1850c301',
transactions: [ transactions: [
{ {
hash: hash: '0x8cd969fe38f6a66a265a87b5e546a1086db988aaa25407abec78b914fe0c45cb',
'0x8cd969fe38f6a66a265a87b5e546a1086db988aaa25407abec78b914fe0c45cb',
blockHash: blockHash:
'0xd58ca39be70dbb51e39ab0fdb09a88d14392ab10c384ebabd9457c1aa11ba8a6', '0xd58ca39be70dbb51e39ab0fdb09a88d14392ab10c384ebabd9457c1aa11ba8a6',
blockNumber: 73763, blockNumber: 73763,
...@@ -3274,8 +3168,7 @@ export const blocksOnL2 = [ ...@@ -3274,8 +3168,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000008d33905c7832b582de0021f67f375311f66e14c809595e1eab92b397879d484d4c020d3ea5c6fba1bee2ddb69d703c89e6213426c3b7d251c216af8e2fdfa76200', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000008d33905c7832b582de0021f67f375311f66e14c809595e1eab92b397879d484d4c020d3ea5c6fba1bee2ddb69d703c89e6213426c3b7d251c216af8e2fdfa76200',
transactions: [ transactions: [
{ {
hash: hash: '0xf01f3d1fcc412409a8287fecd0063bcda183eddf725f0b201a6e0e93af8113fd',
'0xf01f3d1fcc412409a8287fecd0063bcda183eddf725f0b201a6e0e93af8113fd',
blockHash: blockHash:
'0xba6a9bbd71af4fff42cd02c5c475dcb1871e93568dea6d089585139b303cbd08', '0xba6a9bbd71af4fff42cd02c5c475dcb1871e93568dea6d089585139b303cbd08',
blockNumber: 73764, blockNumber: 73764,
...@@ -3311,8 +3204,7 @@ export const blocksOnL2 = [ ...@@ -3311,8 +3204,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000671cbc1a81f52b32065c8fb6c2c4fd7f0755b2c38f592c95374a7b0e7d492d4f0773ae7a53a20bd3991c93ff30666c1221c89916c53059a0b1edd2298572b11701', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000671cbc1a81f52b32065c8fb6c2c4fd7f0755b2c38f592c95374a7b0e7d492d4f0773ae7a53a20bd3991c93ff30666c1221c89916c53059a0b1edd2298572b11701',
transactions: [ transactions: [
{ {
hash: hash: '0x30298b5e28e0c8cdca88e2fe2a8c726c32e3776b15c45d1bf8e26a2e6f265d43',
'0x30298b5e28e0c8cdca88e2fe2a8c726c32e3776b15c45d1bf8e26a2e6f265d43',
blockHash: blockHash:
'0x46c75511a2eabaf360c14aed9a6dc648a5ebdedcf1c9e107259da966a14eeddd', '0x46c75511a2eabaf360c14aed9a6dc648a5ebdedcf1c9e107259da966a14eeddd',
blockNumber: 73765, blockNumber: 73765,
...@@ -3324,8 +3216,7 @@ export const blocksOnL2 = [ ...@@ -3324,8 +3216,7 @@ export const blocksOnL2 = [
to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 0, nonce: 0,
data: data: '0x8a29001400000000000000000000000000000000000000000000000b38b3bb4459dc0000',
'0x8a29001400000000000000000000000000000000000000000000000b38b3bb4459dc0000',
r: '0x9cbadc64fb19e3e912ffc2492bf42130d21fb67e4654c11551f3c3dd28e4ded9', r: '0x9cbadc64fb19e3e912ffc2492bf42130d21fb67e4654c11551f3c3dd28e4ded9',
s: '0x51eae21b5b7f98a7f1e27fdf30fce409363823c97ba03643cbd7e65b964432a9', s: '0x51eae21b5b7f98a7f1e27fdf30fce409363823c97ba03643cbd7e65b964432a9',
v: 55, v: 55,
...@@ -3349,8 +3240,7 @@ export const blocksOnL2 = [ ...@@ -3349,8 +3240,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000001097b0413e26b69194da4152b3e1fcd7548e54c2f00fb37b23c1799191590ff5682b74ffb4a69ee838b437a5d5d197a4724949ea6b74af02b72c9aa29cd8677300', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000001097b0413e26b69194da4152b3e1fcd7548e54c2f00fb37b23c1799191590ff5682b74ffb4a69ee838b437a5d5d197a4724949ea6b74af02b72c9aa29cd8677300',
transactions: [ transactions: [
{ {
hash: hash: '0x1e36c58c83c69f38627b3309bf8e823a44acf8195bf69e313ebde2fd7282aefd',
'0x1e36c58c83c69f38627b3309bf8e823a44acf8195bf69e313ebde2fd7282aefd',
blockHash: blockHash:
'0xa8a933181a120599ac9ba3a79aac3566aee9e17a606ad5af5a07d26286d5134c', '0xa8a933181a120599ac9ba3a79aac3566aee9e17a606ad5af5a07d26286d5134c',
blockNumber: 73766, blockNumber: 73766,
...@@ -3386,8 +3276,7 @@ export const blocksOnL2 = [ ...@@ -3386,8 +3276,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000e8b64352e223744caf7dfb80b1f40d58e676522a3187dc8fab5504d586f8b99f1c40e71eb4e9f4d8e9b4495f9ed369a1f5fcb14aa64d8715bf75e3d2435e525f01', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000e8b64352e223744caf7dfb80b1f40d58e676522a3187dc8fab5504d586f8b99f1c40e71eb4e9f4d8e9b4495f9ed369a1f5fcb14aa64d8715bf75e3d2435e525f01',
transactions: [ transactions: [
{ {
hash: hash: '0x2e5deedc7e720df0c283d0ff8677ac17f71824870560fe9405f7ba08d2440c15',
'0x2e5deedc7e720df0c283d0ff8677ac17f71824870560fe9405f7ba08d2440c15',
blockHash: blockHash:
'0xe620fc1dd39513f201e8471532923b7cd32cb0049eb27ae771c368b362d21339', '0xe620fc1dd39513f201e8471532923b7cd32cb0049eb27ae771c368b362d21339',
blockNumber: 73767, blockNumber: 73767,
...@@ -3423,8 +3312,7 @@ export const blocksOnL2 = [ ...@@ -3423,8 +3312,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000003677866845e00a8d58cc62e615dc84aeae3e1682f8222a92b3be38a42b58af14409d737e300dee3431ffec576b6ff2bb78ba73624577f1b15332a5465b78270801', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000003677866845e00a8d58cc62e615dc84aeae3e1682f8222a92b3be38a42b58af14409d737e300dee3431ffec576b6ff2bb78ba73624577f1b15332a5465b78270801',
transactions: [ transactions: [
{ {
hash: hash: '0x46dfbaf4d0721d835fdb1e0772eee86bcb2cf1901688f5754d689280ba1c5b10',
'0x46dfbaf4d0721d835fdb1e0772eee86bcb2cf1901688f5754d689280ba1c5b10',
blockHash: blockHash:
'0x084af47c0b84526f42928dd5910a3069689c377831f49485c1c280324902c93f', '0x084af47c0b84526f42928dd5910a3069689c377831f49485c1c280324902c93f',
blockNumber: 73768, blockNumber: 73768,
...@@ -3460,8 +3348,7 @@ export const blocksOnL2 = [ ...@@ -3460,8 +3348,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000041927354682f1de89835a863655d9f773781aca3c9f5ae0c7acb76773f46222c4a44ce9b8fb5bb2d75ad4574300b9f47e73c88e8f8a07d05b6e1aece91d1fdc300', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000041927354682f1de89835a863655d9f773781aca3c9f5ae0c7acb76773f46222c4a44ce9b8fb5bb2d75ad4574300b9f47e73c88e8f8a07d05b6e1aece91d1fdc300',
transactions: [ transactions: [
{ {
hash: hash: '0x458b58fc749a70060d7e808817d17f0252679957490000b19d69d79074b52610',
'0x458b58fc749a70060d7e808817d17f0252679957490000b19d69d79074b52610',
blockHash: blockHash:
'0xeab267096d8a41fe046eaa1d058c5601e8bf12a04dbebdd0435dc0cda8a02615', '0xeab267096d8a41fe046eaa1d058c5601e8bf12a04dbebdd0435dc0cda8a02615',
blockNumber: 73769, blockNumber: 73769,
...@@ -3497,8 +3384,7 @@ export const blocksOnL2 = [ ...@@ -3497,8 +3384,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000008e4e83156b59659e5dd5166b509f68c7abdd007205fffadf04c17fa80a1166086afa1ca9621eeb6f1f8007463d507b0b558c64b2ae3c625c671ae51a830ed26300', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000008e4e83156b59659e5dd5166b509f68c7abdd007205fffadf04c17fa80a1166086afa1ca9621eeb6f1f8007463d507b0b558c64b2ae3c625c671ae51a830ed26300',
transactions: [ transactions: [
{ {
hash: hash: '0x37d5b6f1206cac1155b0c731a9d2e07b9f6fb7bc295a5364be5384dc8b37de38',
'0x37d5b6f1206cac1155b0c731a9d2e07b9f6fb7bc295a5364be5384dc8b37de38',
blockHash: blockHash:
'0x8946962864755bacd3e83823a6b0aecc3bf06df40b2d1205c380bc0145ecd6c3', '0x8946962864755bacd3e83823a6b0aecc3bf06df40b2d1205c380bc0145ecd6c3',
blockNumber: 73770, blockNumber: 73770,
...@@ -3534,8 +3420,7 @@ export const blocksOnL2 = [ ...@@ -3534,8 +3420,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e757800000000000086796d2d1dede8d58f1b4e98951a83f9867a855a8e2393cfc3e1ab6f952a73f14b25a0f2491a49f238f17dd3c6ed08b8fa6bc58715fbce6a5c7948a6ad48d6ea01', '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000086796d2d1dede8d58f1b4e98951a83f9867a855a8e2393cfc3e1ab6f952a73f14b25a0f2491a49f238f17dd3c6ed08b8fa6bc58715fbce6a5c7948a6ad48d6ea01',
transactions: [ transactions: [
{ {
hash: hash: '0xf1dfe85b127eee244fd9c87a77d6c302393ba41ec61fcd3d9c6d70d2a85d77ac',
'0xf1dfe85b127eee244fd9c87a77d6c302393ba41ec61fcd3d9c6d70d2a85d77ac',
blockHash: blockHash:
'0x79c259fdb2c190a71a74f76aeb8f1ba5a046a1fbd2e925e86332742fdb77c82d', '0x79c259fdb2c190a71a74f76aeb8f1ba5a046a1fbd2e925e86332742fdb77c82d',
blockNumber: 73771, blockNumber: 73771,
...@@ -3571,8 +3456,7 @@ export const blocksOnL2 = [ ...@@ -3571,8 +3456,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f1506588486984a6ff3334256e7c5fc7c69bb3c8941e07b1e7c8edac3fa6e0ed1eddd36a8da0648e24d27f686fc500e2ee58778faf1611ab5a3071e85499903501', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f1506588486984a6ff3334256e7c5fc7c69bb3c8941e07b1e7c8edac3fa6e0ed1eddd36a8da0648e24d27f686fc500e2ee58778faf1611ab5a3071e85499903501',
transactions: [ transactions: [
{ {
hash: hash: '0xad21d4af2a42ca95b411b75f47b18dd38e38e3afcb72155ee0626aef80736ae9',
'0xad21d4af2a42ca95b411b75f47b18dd38e38e3afcb72155ee0626aef80736ae9',
blockHash: blockHash:
'0xd2324712504767c222bdc0c483ae5d6ab461501718a4ca35632184c839348b68', '0xd2324712504767c222bdc0c483ae5d6ab461501718a4ca35632184c839348b68',
blockNumber: 73772, blockNumber: 73772,
...@@ -3608,8 +3492,7 @@ export const blocksOnL2 = [ ...@@ -3608,8 +3492,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b1eb7a9b57301fb787ebd4a07ca59f1d527208d92198e1fb8f123ae07212fde04ce44a1a648d9c6e24645e02ffb1ee593fad2a0e2b01cacaae84faa1bf39b46400', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b1eb7a9b57301fb787ebd4a07ca59f1d527208d92198e1fb8f123ae07212fde04ce44a1a648d9c6e24645e02ffb1ee593fad2a0e2b01cacaae84faa1bf39b46400',
transactions: [ transactions: [
{ {
hash: hash: '0x5777de974c85d618befc4e9ced97365ac294de6699bebc347e5375a56c327bd6',
'0x5777de974c85d618befc4e9ced97365ac294de6699bebc347e5375a56c327bd6',
blockHash: blockHash:
'0xbcaf3c1040772c8db587de0c15d22b862cc6df7ee10cbc91135a354e688ebbcc', '0xbcaf3c1040772c8db587de0c15d22b862cc6df7ee10cbc91135a354e688ebbcc',
blockNumber: 73773, blockNumber: 73773,
...@@ -3645,8 +3528,7 @@ export const blocksOnL2 = [ ...@@ -3645,8 +3528,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000001856d9837655319a9867af6cf723396bcb601cc9112a60cb2c5d6af882d1864e155352bae738887318ce40760a2978935d109f41fb116b917db898095a2b5e6000', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000001856d9837655319a9867af6cf723396bcb601cc9112a60cb2c5d6af882d1864e155352bae738887318ce40760a2978935d109f41fb116b917db898095a2b5e6000',
transactions: [ transactions: [
{ {
hash: hash: '0x08f0e89763c96db7641af1216ed9b8877e909a0699417bc121fd8ff8be775a72',
'0x08f0e89763c96db7641af1216ed9b8877e909a0699417bc121fd8ff8be775a72',
blockHash: blockHash:
'0x3fe4815aa5b8018b9b2701683e2619dc4478284701b20e47b2eaf793b7c4c74a', '0x3fe4815aa5b8018b9b2701683e2619dc4478284701b20e47b2eaf793b7c4c74a',
blockNumber: 73774, blockNumber: 73774,
...@@ -3682,8 +3564,7 @@ export const blocksOnL2 = [ ...@@ -3682,8 +3564,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000fac309a75fa7a6c40b7f57243986226562ecfe4e7515bc9431702979e3f85002200f1410096d631c5d228796893141e3d2d8f7ecee2cc6be7de3edb64952349e01', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000fac309a75fa7a6c40b7f57243986226562ecfe4e7515bc9431702979e3f85002200f1410096d631c5d228796893141e3d2d8f7ecee2cc6be7de3edb64952349e01',
transactions: [ transactions: [
{ {
hash: hash: '0x2411fe3975d55b88976b145a84bb3808a084e3a61e88ee5ac5c111930381c138',
'0x2411fe3975d55b88976b145a84bb3808a084e3a61e88ee5ac5c111930381c138',
blockHash: blockHash:
'0x84bc2867eb4844148f78b234bb199d3ee490be924229764e1e9126f98dc715a3', '0x84bc2867eb4844148f78b234bb199d3ee490be924229764e1e9126f98dc715a3',
blockNumber: 73775, blockNumber: 73775,
...@@ -3719,8 +3600,7 @@ export const blocksOnL2 = [ ...@@ -3719,8 +3600,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000efac8b54c7e977fd8f93e670bc605c781e4f47c02e7976c3928262f4182c5d06784f4f2d82896258ab51261ee202b908bffee9084471a9aa99db131eb3e28a0400', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000efac8b54c7e977fd8f93e670bc605c781e4f47c02e7976c3928262f4182c5d06784f4f2d82896258ab51261ee202b908bffee9084471a9aa99db131eb3e28a0400',
transactions: [ transactions: [
{ {
hash: hash: '0x5e5604d81949390736786bd3e1a404aa1b75536ced41684fc45820d1286a2109',
'0x5e5604d81949390736786bd3e1a404aa1b75536ced41684fc45820d1286a2109',
blockHash: blockHash:
'0xf8d766970b7699a5d904ef577f01b0f81c0028429c9dfccf3ac8fbde3d1ec67f', '0xf8d766970b7699a5d904ef577f01b0f81c0028429c9dfccf3ac8fbde3d1ec67f',
blockNumber: 73776, blockNumber: 73776,
...@@ -3732,8 +3612,7 @@ export const blocksOnL2 = [ ...@@ -3732,8 +3612,7 @@ export const blocksOnL2 = [
to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4',
value: { type: 'BigNumber', hex: '0x00' }, value: { type: 'BigNumber', hex: '0x00' },
nonce: 31, nonce: 31,
data: data: '0x8a2900140000000000000000000000000000000000000000000000056bc75e2d63100000',
'0x8a2900140000000000000000000000000000000000000000000000056bc75e2d63100000',
r: '0x2aa213c2eaa5a3f0887ba7ab48498bd289bc54a9e59fbff3a8a2a13e13eb9598', r: '0x2aa213c2eaa5a3f0887ba7ab48498bd289bc54a9e59fbff3a8a2a13e13eb9598',
s: '0x399c58f16b07789e8c36268985d107091b01fe0afa3faa6fd71baaeef68afb34', s: '0x399c58f16b07789e8c36268985d107091b01fe0afa3faa6fd71baaeef68afb34',
v: 55, v: 55,
...@@ -3757,8 +3636,7 @@ export const blocksOnL2 = [ ...@@ -3757,8 +3636,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e75780000000000006b28db5ae022e92f3a0fd1b1a1a1e4c0d89709d7c7925092432c6c6ad3062ca00cdf2e31f97a508d4676557acfbecafa29f91e1a68986610898fc0d8390b4e0b00', '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000006b28db5ae022e92f3a0fd1b1a1a1e4c0d89709d7c7925092432c6c6ad3062ca00cdf2e31f97a508d4676557acfbecafa29f91e1a68986610898fc0d8390b4e0b00',
transactions: [ transactions: [
{ {
hash: hash: '0xe85202151f7de0c8db2a65e4ebc1aaea0a0d00342535057fd054013e5f7fe730',
'0xe85202151f7de0c8db2a65e4ebc1aaea0a0d00342535057fd054013e5f7fe730',
blockHash: blockHash:
'0xe5167c9bbab0ae2a594f7cb1c7e1765e61b464d90b9b0c5d03f2535e3f6dbcc7', '0xe5167c9bbab0ae2a594f7cb1c7e1765e61b464d90b9b0c5d03f2535e3f6dbcc7',
blockNumber: 73777, blockNumber: 73777,
...@@ -3794,8 +3672,7 @@ export const blocksOnL2 = [ ...@@ -3794,8 +3672,7 @@ export const blocksOnL2 = [
'0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000bd614c2f9f43bfadde6a218183049dfc80fedb1b0740195e6d74d066b824959a12583489d3806202426b2e71335e03a8fdafadd7d6bf074205898fa225df64f501', '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000bd614c2f9f43bfadde6a218183049dfc80fedb1b0740195e6d74d066b824959a12583489d3806202426b2e71335e03a8fdafadd7d6bf074205898fa225df64f501',
transactions: [ transactions: [
{ {
hash: hash: '0x6ed15b527c6a93439fd00e8cb5a047533e27034ba121e3025d4992b23cc3e93b',
'0x6ed15b527c6a93439fd00e8cb5a047533e27034ba121e3025d4992b23cc3e93b',
blockHash: blockHash:
'0xbb4745444882a37f23a145d4d53a22a6789f1967e4fc3227d27f44246f87d660', '0xbb4745444882a37f23a145d4d53a22a6789f1967e4fc3227d27f44246f87d660',
blockNumber: 73778, blockNumber: 73778,
......
...@@ -14,8 +14,7 @@ describe('Event Handlers: OVM_CanonicalTransactionChain.StateBatchAppended', () ...@@ -14,8 +14,7 @@ describe('Event Handlers: OVM_CanonicalTransactionChain.StateBatchAppended', ()
it('should return event block and transaction', async () => { it('should return event block and transaction', async () => {
// Source: https://etherscan.io/tx/0x4ca72484e93cdb50fe1089984db152258c2bbffc2534dcafbfe032b596bd5b49 // Source: https://etherscan.io/tx/0x4ca72484e93cdb50fe1089984db152258c2bbffc2534dcafbfe032b596bd5b49
const l1Transaction = { const l1Transaction = {
hash: hash: '0x4ca72484e93cdb50fe1089984db152258c2bbffc2534dcafbfe032b596bd5b49',
'0x4ca72484e93cdb50fe1089984db152258c2bbffc2534dcafbfe032b596bd5b49',
from: '0xfd7d4de366850c08ee2cba32d851385a3071ec8d', from: '0xfd7d4de366850c08ee2cba32d851385a3071ec8d',
data: l1StateBatchData, data: l1StateBatchData,
} }
...@@ -23,8 +22,7 @@ describe('Event Handlers: OVM_CanonicalTransactionChain.StateBatchAppended', () ...@@ -23,8 +22,7 @@ describe('Event Handlers: OVM_CanonicalTransactionChain.StateBatchAppended', ()
const eventBlock: Block = { const eventBlock: Block = {
timestamp: 1616680530, timestamp: 1616680530,
number: 12106615, number: 12106615,
hash: hash: '0x9c40310e19e943ad38e170329465c4489f6aba5895e9cacdac236be181aea31f',
'0x9c40310e19e943ad38e170329465c4489f6aba5895e9cacdac236be181aea31f',
parentHash: parentHash:
'0xc7707a04c287a22ff4e43e5d9316e45ab342dcd405e7e0284eb51ce71a3a29ac', '0xc7707a04c287a22ff4e43e5d9316e45ab342dcd405e7e0284eb51ce71a3a29ac',
miner: '0xea674fdde714fd979de3edf0f56aa9716b898ec8', miner: '0xea674fdde714fd979de3edf0f56aa9716b898ec8',
......
module.exports = { module.exports = {
"extends": "../../.eslintrc.js" extends: '../../.eslintrc.js',
} }
module.exports = {
...require('../../.prettierrc.js'),
};
\ No newline at end of file
../../.prettierrc.json
\ No newline at end of file
...@@ -12,8 +12,9 @@ ...@@ -12,8 +12,9 @@
"clean": "rimraf tsconfig.build.tsbuildinfo dist", "clean": "rimraf tsconfig.build.tsbuildinfo dist",
"build": "tsc -p tsconfig.build.json", "build": "tsc -p tsconfig.build.json",
"lint": "yarn run lint:fix && yarn run lint:check", "lint": "yarn run lint:fix && yarn run lint:check",
"lint:fix": "prettier --config .prettierrc.json --write \"{src,test}/**/*.ts\"", "pre-commit": "lint-staged",
"lint:check": "eslint -c .eslintrc.js --ext .ts --format stylish ." "lint:fix": "yarn lint:check --fix",
"lint:check": "eslint ."
}, },
"dependencies": { "dependencies": {
"node-fetch": "^2.6.1" "node-fetch": "^2.6.1"
...@@ -27,7 +28,9 @@ ...@@ -27,7 +28,9 @@
"@types/node-fetch": "^2.5.10", "@types/node-fetch": "^2.5.10",
"@typescript-eslint/eslint-plugin": "^4.26.0", "@typescript-eslint/eslint-plugin": "^4.26.0",
"@typescript-eslint/parser": "^4.26.0", "@typescript-eslint/parser": "^4.26.0",
"babel-eslint": "^10.1.0",
"eslint": "^7.27.0", "eslint": "^7.27.0",
"eslint-plugin-prettier": "^3.4.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-ban": "^1.5.2", "eslint-plugin-ban": "^1.5.2",
"eslint-plugin-import": "^2.23.4", "eslint-plugin-import": "^2.23.4",
...@@ -35,6 +38,8 @@ ...@@ -35,6 +38,8 @@
"eslint-plugin-prefer-arrow": "^1.2.3", "eslint-plugin-prefer-arrow": "^1.2.3",
"eslint-plugin-react": "^7.24.0", "eslint-plugin-react": "^7.24.0",
"eslint-plugin-unicorn": "^32.0.1", "eslint-plugin-unicorn": "^32.0.1",
"prettier": "^2.2.1" "prettier": "^2.2.1",
"lint-staged": "11.0.0",
"typescript": "^4.2.3"
} }
} }
module.exports = { module.exports = {
"extends": "../../.eslintrc.js" extends: '../../.eslintrc.js',
} }
module.exports = {
...require('../../.prettierrc.js'),
};
\ No newline at end of file
../../.prettierrc.json
\ No newline at end of file
#!/usr/bin/env node #!/usr/bin/env node
const main = require("../dist/exec/run").default const main = require('../dist/exec/run').default
;(async () => { ;(async () => {
await main() await main()
......
...@@ -7,13 +7,17 @@ ...@@ -7,13 +7,17 @@
"files": [ "files": [
"dist/*" "dist/*"
], ],
"bin": {
"withdraw": "./src/exec/withdraw.ts"
},
"scripts": { "scripts": {
"start": "node ./exec/run-message-relayer.js", "start": "node ./exec/run-message-relayer.js",
"build": "tsc -p ./tsconfig.build.json", "build": "tsc -p ./tsconfig.build.json",
"clean": "rimraf dist/ ./tsconfig.build.tsbuildinfo", "clean": "rimraf dist/ ./tsconfig.build.tsbuildinfo",
"lint": "yarn lint:fix && yarn lint:check", "lint": "yarn lint:fix && yarn lint:check",
"lint:fix": "prettier --config .prettierrc.json --write \"{src,exec,test}/**/*.ts\"", "pre-commit": "lint-staged",
"lint:check": "eslint -c .eslintrc.js --ext .ts --format stylish .", "lint:fix": "yarn lint:check --fix",
"lint:check": "eslint .",
"test": "hardhat test --show-stack-traces" "test": "hardhat test --show-stack-traces"
}, },
"keywords": [ "keywords": [
...@@ -50,6 +54,7 @@ ...@@ -50,6 +54,7 @@
"@typescript-eslint/parser": "^4.26.0", "@typescript-eslint/parser": "^4.26.0",
"chai": "^4.3.4", "chai": "^4.3.4",
"chai-as-promised": "^7.1.1", "chai-as-promised": "^7.1.1",
"eslint-plugin-prettier": "^3.4.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-ban": "^1.5.2", "eslint-plugin-ban": "^1.5.2",
"eslint-plugin-import": "^2.23.4", "eslint-plugin-import": "^2.23.4",
...@@ -61,7 +66,10 @@ ...@@ -61,7 +66,10 @@
"hardhat": "^2.3.0", "hardhat": "^2.3.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"mocha": "^8.4.0", "mocha": "^8.4.0",
"babel-eslint": "^10.1.0",
"eslint": "^7.27.0", "eslint": "^7.27.0",
"prettier": "^2.2.1" "lint-staged": "11.0.0",
"prettier": "^2.2.1",
"typescript": "^4.2.3"
} }
} }
\ No newline at end of file
#!/usr/bin/env ts-node
/**
* Utility that will relay all L2 => L1 messages created within a given L2 transaction.
*/
/* Imports: External */
import { ethers } from 'ethers'
import { predeploys, getContractInterface } from '@eth-optimism/contracts'
import { sleep } from '@eth-optimism/core-utils'
import dotenv from 'dotenv'
/* Imports: Internal */
import { getMessagesAndProofsForL2Transaction } from '../relay-tx'
dotenv.config()
const l1RpcProviderUrl = process.env.WITHDRAW__L1_RPC_URL
const l2RpcProviderUrl = process.env.WITHDRAW__L2_RPC_URL
const l1PrivateKey = process.env.WITHDRAW__L1_PRIVATE_KEY
const l1StateCommitmentChainAddress =
process.env.WITHDRAW__STATE_COMMITMENT_CHAIN_ADDRESS
const l1CrossDomainMessengerAddress =
process.env.WITHDRAW__L1_CROSS_DOMAIN_MESSENGER_ADDRESS
const main = async () => {
const l2TransactionHash = process.argv[2]
if (l2TransactionHash === undefined) {
throw new Error(`must provide l2 transaction hash`)
}
const l1RpcProvider = new ethers.providers.JsonRpcProvider(l1RpcProviderUrl)
const l1Wallet = new ethers.Wallet(l1PrivateKey, l1RpcProvider)
const l1WalletBalance = await l1Wallet.getBalance()
console.log(`relayer address: ${l1Wallet.address}`)
console.log(`relayer balance: ${ethers.utils.formatEther(l1WalletBalance)}`)
const l1CrossDomainMessenger = new ethers.Contract(
l1CrossDomainMessengerAddress,
getContractInterface('OVM_L1CrossDomainMessenger'),
l1Wallet
)
console.log(`searching for messages in transaction: ${l2TransactionHash}`)
let messagePairs = []
while (true) {
try {
messagePairs = await getMessagesAndProofsForL2Transaction(
l1RpcProviderUrl,
l2RpcProviderUrl,
l1StateCommitmentChainAddress,
predeploys.OVM_L2CrossDomainMessenger,
l2TransactionHash
)
break
} catch (err) {
if (err.message.includes('unable to find state root batch for tx')) {
console.log(`no state root batch for tx yet, trying again in 5s...`)
await sleep(5000)
} else {
throw err
}
}
}
console.log(`found ${messagePairs.length} messages`)
for (let i = 0; i < messagePairs.length; i++) {
console.log(`relaying message ${i + 1}/${messagePairs.length}`)
const { message, proof } = messagePairs[i]
while (true) {
try {
const result = await l1CrossDomainMessenger.relayMessage(
message.target,
message.sender,
message.message,
message.messageNonce,
proof
)
await result.wait()
console.log(
`relayed message ${i + 1}/${messagePairs.length}! L1 tx hash: ${
result.hash
}`
)
break
} catch (err) {
if (err.message.includes('execution failed due to an exception')) {
console.log(`fraud proof may not be elapsed, trying again in 5s...`)
await sleep(5000)
} else if (err.message.includes('message has already been received')) {
console.log(
`message ${i + 1}/${
messagePairs.length
} was relayed by someone else`
)
break
} else {
throw err
}
}
}
}
}
main()
...@@ -116,14 +116,10 @@ export const getMessagesByTransactionHash = async ( ...@@ -116,14 +116,10 @@ export const getMessagesByTransactionHash = async (
* @returns Encoded message. * @returns Encoded message.
*/ */
const encodeCrossDomainMessage = (message: CrossDomainMessage): string => { const encodeCrossDomainMessage = (message: CrossDomainMessage): string => {
return getContractInterface( return getContractInterface('OVM_L2CrossDomainMessenger').encodeFunctionData(
'OVM_L2CrossDomainMessenger' 'relayMessage',
).encodeFunctionData('relayMessage', [ [message.target, message.sender, message.message, message.messageNonce]
message.target, )
message.sender,
message.message,
message.messageNonce,
])
} }
/** /**
...@@ -169,16 +165,16 @@ export const getStateBatchAppendedEventByTransactionIndex = async ( ...@@ -169,16 +165,16 @@ export const getStateBatchAppendedEventByTransactionIndex = async (
return index >= prevTotalElements + batchSize return index >= prevTotalElements + batchSize
} }
const totalBatches: ethers.BigNumber = await l1StateCommitmentChain.getTotalBatches() const totalBatches: ethers.BigNumber =
await l1StateCommitmentChain.getTotalBatches()
if (totalBatches.eq(0)) { if (totalBatches.eq(0)) {
return null return null
} }
let lowerBound = 0 let lowerBound = 0
let upperBound = totalBatches.toNumber() - 1 let upperBound = totalBatches.toNumber() - 1
let batchEvent: ethers.Event | null = await getStateBatchAppendedEventByBatchIndex( let batchEvent: ethers.Event | null =
upperBound await getStateBatchAppendedEventByBatchIndex(upperBound)
)
if (isEventLo(batchEvent, l2TransactionIndex)) { if (isEventLo(batchEvent, l2TransactionIndex)) {
// Upper bound is too low, means this transaction doesn't have a corresponding state batch yet. // Upper bound is too low, means this transaction doesn't have a corresponding state batch yet.
...@@ -227,7 +223,8 @@ export const getStateRootBatchByTransactionIndex = async ( ...@@ -227,7 +223,8 @@ export const getStateRootBatchByTransactionIndex = async (
l1RpcProvider l1RpcProvider
) )
const stateBatchAppendedEvent = await getStateBatchAppendedEventByTransactionIndex( const stateBatchAppendedEvent =
await getStateBatchAppendedEventByTransactionIndex(
l1RpcProvider, l1RpcProvider,
l1StateCommitmentChainAddress, l1StateCommitmentChainAddress,
l2TransactionIndex l2TransactionIndex
...@@ -277,12 +274,9 @@ const getMerkleTreeProof = (leaves: string[], index: number): string[] => { ...@@ -277,12 +274,9 @@ const getMerkleTreeProof = (leaves: string[], index: number): string[] => {
// merkletreejs prefers things to be Buffers. // merkletreejs prefers things to be Buffers.
const bufLeaves = parsedLeaves.map(fromHexString) const bufLeaves = parsedLeaves.map(fromHexString)
const tree = new MerkleTree( const tree = new MerkleTree(bufLeaves, (el: Buffer | string): Buffer => {
bufLeaves,
(el: Buffer | string): Buffer => {
return fromHexString(ethers.utils.keccak256(el)) return fromHexString(ethers.utils.keccak256(el))
} })
)
const proof = tree.getProof(bufLeaves[index], index).map((element: any) => { const proof = tree.getProof(bufLeaves[index], index).map((element: any) => {
return toHexString(element.data) return toHexString(element.data)
......
...@@ -274,9 +274,7 @@ export class MessageRelayerService extends BaseService<MessageRelayerOptions> { ...@@ -274,9 +274,7 @@ export class MessageRelayerService extends BaseService<MessageRelayerOptions> {
} }
} }
private async _getStateBatchHeader( private async _getStateBatchHeader(height: number): Promise<
height: number
): Promise<
| { | {
batch: StateRootBatchHeader batch: StateRootBatchHeader
stateRoots: string[] stateRoots: string[]
...@@ -308,7 +306,8 @@ export class MessageRelayerService extends BaseService<MessageRelayerOptions> { ...@@ -308,7 +306,8 @@ export class MessageRelayerService extends BaseService<MessageRelayerOptions> {
endBlock: startingBlock + this.options.getLogsInterval, endBlock: startingBlock + this.options.getLogsInterval,
}) })
const events: ethers.Event[] = await this.state.OVM_StateCommitmentChain.queryFilter( const events: ethers.Event[] =
await this.state.OVM_StateCommitmentChain.queryFilter(
this.state.OVM_StateCommitmentChain.filters.StateBatchAppended(), this.state.OVM_StateCommitmentChain.filters.StateBatchAppended(),
startingBlock, startingBlock,
startingBlock + this.options.getLogsInterval startingBlock + this.options.getLogsInterval
...@@ -333,9 +332,8 @@ export class MessageRelayerService extends BaseService<MessageRelayerOptions> { ...@@ -333,9 +332,8 @@ export class MessageRelayerService extends BaseService<MessageRelayerOptions> {
event.transactionHash event.transactionHash
) )
const [ const [stateRoots] =
stateRoots, this.state.OVM_StateCommitmentChain.interface.decodeFunctionData(
] = this.state.OVM_StateCommitmentChain.interface.decodeFunctionData(
'appendStateBatch', 'appendStateBatch',
transaction.data transaction.data
) )
...@@ -390,7 +388,8 @@ export class MessageRelayerService extends BaseService<MessageRelayerOptions> { ...@@ -390,7 +388,8 @@ export class MessageRelayerService extends BaseService<MessageRelayerOptions> {
const messages = events.map((event) => { const messages = events.map((event) => {
const message = event.args.message const message = event.args.message
const decoded = this.state.OVM_L2CrossDomainMessenger.interface.decodeFunctionData( const decoded =
this.state.OVM_L2CrossDomainMessenger.interface.decodeFunctionData(
'relayMessage', 'relayMessage',
message message
) )
......
{ {
"extends": "../../tsconfig.build.json", "extends": "../../tsconfig.build.json",
"compilerOptions": { "compilerOptions": {
"rootDir": "./src", "rootDir": "./src",
"outDir": "./dist" "outDir": "./dist"
}, },
"include": [ "include": [
"src/**/*" "src/**/*"
] ]
......
module.exports = { module.exports = {
"extends": "../../.eslintrc.js", extends: '../../.eslintrc.js',
"parserOptions": {
"project": "./tsconfig.json",
"sourceType": "module"
}
} }
module.exports = {
...require('../../.prettierrc.js'),
};
\ No newline at end of file
../../.prettierrc.json
\ No newline at end of file
...@@ -12,8 +12,9 @@ ...@@ -12,8 +12,9 @@
"build": "tsc -p tsconfig.build.json", "build": "tsc -p tsconfig.build.json",
"test": "hardhat test --show-stack-traces", "test": "hardhat test --show-stack-traces",
"lint": "yarn lint:fix && yarn lint:check", "lint": "yarn lint:fix && yarn lint:check",
"lint:fix": "prettier --config ./.prettierrc.json --write \"hardhat.config.ts\" \"{src,test}/**/*.ts\"", "pre-commit": "lint-staged",
"lint:check": "eslint -c .eslintrc.js --ext .ts --format stylish .", "lint:fix": "yarn lint:check --fix",
"lint:check": "eslint .",
"clean": "rimraf ./artifacts ./cache ./dist ./tsconfig.build.tsbuildinfo" "clean": "rimraf ./artifacts ./cache ./dist ./tsconfig.build.tsbuildinfo"
}, },
"peerDependencies": { "peerDependencies": {
...@@ -44,7 +45,9 @@ ...@@ -44,7 +45,9 @@
"@typescript-eslint/eslint-plugin": "^4.26.0", "@typescript-eslint/eslint-plugin": "^4.26.0",
"@typescript-eslint/parser": "^4.26.0", "@typescript-eslint/parser": "^4.26.0",
"chai": "^4.3.0", "chai": "^4.3.0",
"babel-eslint": "^10.1.0",
"eslint": "^7.27.0", "eslint": "^7.27.0",
"eslint-plugin-prettier": "^3.4.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-ban": "^1.5.2", "eslint-plugin-ban": "^1.5.2",
"eslint-plugin-import": "^2.23.4", "eslint-plugin-import": "^2.23.4",
...@@ -56,6 +59,8 @@ ...@@ -56,6 +59,8 @@
"ethers": "^5.0.31", "ethers": "^5.0.31",
"hardhat": "^2.4.0", "hardhat": "^2.4.0",
"lodash": "^4.17.20", "lodash": "^4.17.20",
"prettier": "^2.2.1" "prettier": "^2.2.1",
"lint-staged": "11.0.0",
"typescript": "^4.2.3"
} }
} }
...@@ -7,8 +7,8 @@ import BN from 'bn.js' ...@@ -7,8 +7,8 @@ import BN from 'bn.js'
// Handle hardhat ^2.4.0 // Handle hardhat ^2.4.0
let decodeRevertReason: (value: Buffer) => string let decodeRevertReason: (value: Buffer) => string
try { try {
decodeRevertReason = require('hardhat/internal/hardhat-network/stack-traces/revert-reasons') decodeRevertReason =
.decodeRevertReason require('hardhat/internal/hardhat-network/stack-traces/revert-reasons').decodeRevertReason
} catch (err) { } catch (err) {
const { const {
ReturnData, ReturnData,
...@@ -20,11 +20,11 @@ try { ...@@ -20,11 +20,11 @@ try {
// Handle hardhat ^2.2.0 // Handle hardhat ^2.2.0
let TransactionExecutionError: any let TransactionExecutionError: any
try { try {
TransactionExecutionError = require('hardhat/internal/hardhat-network/provider/errors') TransactionExecutionError =
.TransactionExecutionError require('hardhat/internal/hardhat-network/provider/errors').TransactionExecutionError
} catch (err) { } catch (err) {
TransactionExecutionError = require('hardhat/internal/core/providers/errors') TransactionExecutionError =
.TransactionExecutionError require('hardhat/internal/core/providers/errors').TransactionExecutionError
} }
/* eslint-enable @typescript-eslint/no-var-requires */ /* eslint-enable @typescript-eslint/no-var-requires */
...@@ -137,13 +137,8 @@ const initializeSmock = (provider: HardhatNetworkProvider): void => { ...@@ -137,13 +137,8 @@ const initializeSmock = (provider: HardhatNetworkProvider): void => {
// Compute the mock return data. // Compute the mock return data.
const mock: MockContract = vm._smockState.mocks[target] const mock: MockContract = vm._smockState.mocks[target]
const { const { resolve, functionName, rawReturnValue, returnValue, gasUsed } =
resolve, await mock._smockit(message.data)
functionName,
rawReturnValue,
returnValue,
gasUsed,
} = await mock._smockit(message.data)
// Set the mock return data, potentially set the `exceptionError` field if the user requested // Set the mock return data, potentially set the `exceptionError` field if the user requested
// a revert. // a revert.
......
...@@ -200,9 +200,7 @@ export const smockit = async ( ...@@ -200,9 +200,7 @@ export const smockit = async (
} }
// TODO: Make this less of a hack. // TODO: Make this less of a hack.
;(contract as any)._smockit = async function ( ;(contract as any)._smockit = async function (data: Buffer): Promise<{
data: Buffer
): Promise<{
resolve: 'return' | 'revert' resolve: 'return' | 'revert'
functionName: string functionName: string
rawReturnValue: any rawReturnValue: any
......
...@@ -328,7 +328,7 @@ function parseSequencerBatchAppendedEvent( ...@@ -328,7 +328,7 @@ function parseSequencerBatchAppendedEvent(
l1TxOrigin: 0x0000000000000000000000000000000000000000, l1TxOrigin: 0x0000000000000000000000000000000000000000,
entrypoint: 0x4200000000000000000000000000000000000005, entrypoint: 0x4200000000000000000000000000000000000005,
gasLimit: OVM_ExecutionManager.getMaxTransactionGasLimit(), gasLimit: OVM_ExecutionManager.getMaxTransactionGasLimit(),
data: params.transactions[sequencerTransactionCount] data: params.transactions[sequencerTransactionCount],
}); });
sequencerTransactionCount = sequencerTransactionCount + 1; sequencerTransactionCount = sequencerTransactionCount + 1;
...@@ -338,7 +338,8 @@ function parseSequencerBatchAppendedEvent( ...@@ -338,7 +338,8 @@ function parseSequencerBatchAppendedEvent(
// Note that this places an assumption on how events are parsed. This // Note that this places an assumption on how events are parsed. This
// only works if enqueued transactions are parsed before // only works if enqueued transactions are parsed before
// `appendQueueBatch` events. // `appendQueueBatch` events.
const enqueuedTransaction: EnqueuedTransaction = getEnqueuedTransactionByIndex( const enqueuedTransaction: EnqueuedTransaction =
getEnqueuedTransactionByIndex(
event.startingQueueIndex + queueTransactionCount event.startingQueueIndex + queueTransactionCount
); );
...@@ -349,7 +350,7 @@ function parseSequencerBatchAppendedEvent( ...@@ -349,7 +350,7 @@ function parseSequencerBatchAppendedEvent(
l1TxOrigin: enqueuedTransaction.l1TxOrigin, l1TxOrigin: enqueuedTransaction.l1TxOrigin,
entrypoint: enqueuedTransaction.entrypoint, entrypoint: enqueuedTransaction.entrypoint,
gasLimit: enqueuedTransaction.gasLimit, gasLimit: enqueuedTransaction.gasLimit,
data: enqueuedTransaction.data data: enqueuedTransaction.data,
}); });
queueTransactionCount = queueTransactionCount + 1; queueTransactionCount = queueTransactionCount + 1;
......
...@@ -5,7 +5,8 @@ ...@@ -5,7 +5,8 @@
"private": true, "private": true,
"devDependencies": { "devDependencies": {
"@types/prettier": "2.2.1", "@types/prettier": "2.2.1",
"prettier": "^2.2.1" "prettier": "^2.2.1",
"lint-staged": "11.0.0"
}, },
"scripts": { "scripts": {
"lint": "yarn lint:fix && yarn lint:check", "lint": "yarn lint:fix && yarn lint:check",
......
...@@ -16,6 +16,13 @@ ...@@ -16,6 +16,13 @@
dependencies: dependencies:
"@babel/highlight" "^7.12.13" "@babel/highlight" "^7.12.13"
"@babel/code-frame@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb"
integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==
dependencies:
"@babel/highlight" "^7.14.5"
"@babel/compat-data@^7.14.4": "@babel/compat-data@^7.14.4":
version "7.14.4" version "7.14.4"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.4.tgz#45720fe0cecf3fd42019e1d12cc3d27fadc98d58" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.4.tgz#45720fe0cecf3fd42019e1d12cc3d27fadc98d58"
...@@ -60,6 +67,15 @@ ...@@ -60,6 +67,15 @@
jsesc "^2.5.1" jsesc "^2.5.1"
source-map "^0.5.0" source-map "^0.5.0"
"@babel/generator@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785"
integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==
dependencies:
"@babel/types" "^7.14.5"
jsesc "^2.5.1"
source-map "^0.5.0"
"@babel/helper-compilation-targets@^7.13.16": "@babel/helper-compilation-targets@^7.13.16":
version "7.14.4" version "7.14.4"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz#33ebd0ffc34248051ee2089350a929ab02f2a516" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz#33ebd0ffc34248051ee2089350a929ab02f2a516"
...@@ -79,6 +95,15 @@ ...@@ -79,6 +95,15 @@
"@babel/template" "^7.12.13" "@babel/template" "^7.12.13"
"@babel/types" "^7.14.2" "@babel/types" "^7.14.2"
"@babel/helper-function-name@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4"
integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==
dependencies:
"@babel/helper-get-function-arity" "^7.14.5"
"@babel/template" "^7.14.5"
"@babel/types" "^7.14.5"
"@babel/helper-get-function-arity@^7.12.13": "@babel/helper-get-function-arity@^7.12.13":
version "7.12.13" version "7.12.13"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583"
...@@ -86,6 +111,20 @@ ...@@ -86,6 +111,20 @@
dependencies: dependencies:
"@babel/types" "^7.12.13" "@babel/types" "^7.12.13"
"@babel/helper-get-function-arity@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815"
integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==
dependencies:
"@babel/types" "^7.14.5"
"@babel/helper-hoist-variables@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d"
integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==
dependencies:
"@babel/types" "^7.14.5"
"@babel/helper-member-expression-to-functions@^7.13.12": "@babel/helper-member-expression-to-functions@^7.13.12":
version "7.13.12" version "7.13.12"
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72"
...@@ -145,6 +184,13 @@ ...@@ -145,6 +184,13 @@
dependencies: dependencies:
"@babel/types" "^7.12.13" "@babel/types" "^7.12.13"
"@babel/helper-split-export-declaration@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a"
integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==
dependencies:
"@babel/types" "^7.14.5"
"@babel/helper-validator-identifier@^7.12.11": "@babel/helper-validator-identifier@^7.12.11":
version "7.12.11" version "7.12.11"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
...@@ -155,6 +201,11 @@ ...@@ -155,6 +201,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288"
integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==
"@babel/helper-validator-identifier@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8"
integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==
"@babel/helper-validator-option@^7.12.17": "@babel/helper-validator-option@^7.12.17":
version "7.12.17" version "7.12.17"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831"
...@@ -187,11 +238,25 @@ ...@@ -187,11 +238,25 @@
chalk "^2.0.0" chalk "^2.0.0"
js-tokens "^4.0.0" js-tokens "^4.0.0"
"@babel/highlight@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9"
integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==
dependencies:
"@babel/helper-validator-identifier" "^7.14.5"
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/parser@^7.12.13", "@babel/parser@^7.14.2", "@babel/parser@^7.14.3": "@babel/parser@^7.12.13", "@babel/parser@^7.14.2", "@babel/parser@^7.14.3":
version "7.14.4" version "7.14.4"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.4.tgz#a5c560d6db6cd8e6ed342368dea8039232cbab18" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.4.tgz#a5c560d6db6cd8e6ed342368dea8039232cbab18"
integrity sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA== integrity sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==
"@babel/parser@^7.14.5", "@babel/parser@^7.14.7", "@babel/parser@^7.7.0":
version "7.14.7"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595"
integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==
"@babel/runtime@^7.10.4", "@babel/runtime@^7.5.5": "@babel/runtime@^7.10.4", "@babel/runtime@^7.5.5":
version "7.13.10" version "7.13.10"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d"
...@@ -208,6 +273,15 @@ ...@@ -208,6 +273,15 @@
"@babel/parser" "^7.12.13" "@babel/parser" "^7.12.13"
"@babel/types" "^7.12.13" "@babel/types" "^7.12.13"
"@babel/template@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4"
integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==
dependencies:
"@babel/code-frame" "^7.14.5"
"@babel/parser" "^7.14.5"
"@babel/types" "^7.14.5"
"@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2": "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2":
version "7.14.2" version "7.14.2"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b"
...@@ -222,6 +296,21 @@ ...@@ -222,6 +296,21 @@
debug "^4.1.0" debug "^4.1.0"
globals "^11.1.0" globals "^11.1.0"
"@babel/traverse@^7.7.0":
version "7.14.7"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753"
integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==
dependencies:
"@babel/code-frame" "^7.14.5"
"@babel/generator" "^7.14.5"
"@babel/helper-function-name" "^7.14.5"
"@babel/helper-hoist-variables" "^7.14.5"
"@babel/helper-split-export-declaration" "^7.14.5"
"@babel/parser" "^7.14.7"
"@babel/types" "^7.14.5"
debug "^4.1.0"
globals "^11.1.0"
"@babel/types@^7.12.13", "@babel/types@^7.13.12", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.14.4": "@babel/types@^7.12.13", "@babel/types@^7.13.12", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.14.4":
version "7.14.4" version "7.14.4"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.4.tgz#bfd6980108168593b38b3eb48a24aa026b919bc0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.4.tgz#bfd6980108168593b38b3eb48a24aa026b919bc0"
...@@ -230,6 +319,14 @@ ...@@ -230,6 +319,14 @@
"@babel/helper-validator-identifier" "^7.14.0" "@babel/helper-validator-identifier" "^7.14.0"
to-fast-properties "^2.0.0" to-fast-properties "^2.0.0"
"@babel/types@^7.14.5", "@babel/types@^7.7.0":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff"
integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==
dependencies:
"@babel/helper-validator-identifier" "^7.14.5"
to-fast-properties "^2.0.0"
"@changesets/apply-release-plan@^5.0.0": "@changesets/apply-release-plan@^5.0.0":
version "5.0.0" version "5.0.0"
resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-5.0.0.tgz#11bf168acecbf4cfa2b0e6425160bac5ceeec1c3" resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-5.0.0.tgz#11bf168acecbf4cfa2b0e6425160bac5ceeec1c3"
...@@ -2229,15 +2326,15 @@ ...@@ -2229,15 +2326,15 @@
"@sentry/utils" "6.2.5" "@sentry/utils" "6.2.5"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/core@6.6.0": "@sentry/core@6.8.0":
version "6.6.0" version "6.8.0"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.6.0.tgz#51661d2dd5023d6cd07467422de1854282ced7e5" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.8.0.tgz#bfac76844deee9126460c18dc6166015992efdc3"
integrity sha512-EjdeT6paAdxAZgfsVCB8wneahQF3nAUt9GxOJxaOBUv8BSc3HQ/svcTU3RU7k8YsP26PseEOIsedaxsEVZ+7og== integrity sha512-vJzWt/znEB+JqVwtwfjkRrAYRN+ep+l070Ti8GhJnvwU4IDtVlV3T/jVNrj6rl6UChcczaJQMxVxtG5x0crlAA==
dependencies: dependencies:
"@sentry/hub" "6.6.0" "@sentry/hub" "6.8.0"
"@sentry/minimal" "6.6.0" "@sentry/minimal" "6.8.0"
"@sentry/types" "6.6.0" "@sentry/types" "6.8.0"
"@sentry/utils" "6.6.0" "@sentry/utils" "6.8.0"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/hub@5.30.0": "@sentry/hub@5.30.0":
...@@ -2267,13 +2364,13 @@ ...@@ -2267,13 +2364,13 @@
"@sentry/utils" "6.3.1" "@sentry/utils" "6.3.1"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/hub@6.6.0": "@sentry/hub@6.8.0":
version "6.6.0" version "6.8.0"
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.6.0.tgz#1b9fa22ee104b7d6afd2dc4c40a1459fda259366" resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.8.0.tgz#cb0f8509093919ed3c1ef98ef8cf63dc102a6524"
integrity sha512-1Yw0kbxcvO7njZUDGvCKB6DxU5jQio7Be3Kx5qxwcx8ojpT9lo9p+IYZajgl6zQqkjjbVm/4SoYqU24ozu5vxw== integrity sha512-hFrI2Ss1fTov7CH64FJpigqRxH7YvSnGeqxT9Jc1BL7nzW/vgCK+Oh2mOZbosTcrzoDv+lE8ViOnSN3w/fo+rg==
dependencies: dependencies:
"@sentry/types" "6.6.0" "@sentry/types" "6.8.0"
"@sentry/utils" "6.6.0" "@sentry/utils" "6.8.0"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/minimal@5.30.0": "@sentry/minimal@5.30.0":
...@@ -2303,13 +2400,13 @@ ...@@ -2303,13 +2400,13 @@
"@sentry/types" "6.3.1" "@sentry/types" "6.3.1"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/minimal@6.6.0": "@sentry/minimal@6.8.0":
version "6.6.0" version "6.8.0"
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.6.0.tgz#48684734e3c380e5e63a9357d05f0c18bae84419" resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.8.0.tgz#d6c3e4c96f231367aeb2b8a87a83b53d28e7c6db"
integrity sha512-xVBlZIDxSvHvNdvD5KmjTf8Xgi78vLpT4xqJaDUkW7B+DqWMVJZe5aUdQmcp7X/zWxctBwyMKsdHO7oiHkpS+Q== integrity sha512-MRxUKXiiYwKjp8mOQMpTpEuIby1Jh3zRTU0cmGZtfsZ38BC1JOle8xlwC4FdtOH+VvjSYnPBMya5lgNHNPUJDQ==
dependencies: dependencies:
"@sentry/hub" "6.6.0" "@sentry/hub" "6.8.0"
"@sentry/types" "6.6.0" "@sentry/types" "6.8.0"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/node@6.2.5", "@sentry/node@^6.2.5": "@sentry/node@6.2.5", "@sentry/node@^6.2.5":
...@@ -2343,15 +2440,15 @@ ...@@ -2343,15 +2440,15 @@
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/node@^6.3.1": "@sentry/node@^6.3.1":
version "6.6.0" version "6.8.0"
resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.6.0.tgz#e535e1e679cf894752810529ffdee93cbfd078f0" resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.8.0.tgz#d39b45c2b9d33c0cf8859da70d08e25ae58c7dbc"
integrity sha512-heKie/AOanYq3mCsKR1igPn1sUIxBmGibBp79Xc0iSAgliPKnnLkqUjvAIKu6mcevL9UOUhpMDLzhilkaG+bAA== integrity sha512-DPUtDd1rRbDJys+aZdQTScKy2Xxo4m8iSQPxzfwFROsLmzE7XhDoriDwM+l1BpiZYIhxUU2TLxDyVzmdc/TMAw==
dependencies: dependencies:
"@sentry/core" "6.6.0" "@sentry/core" "6.8.0"
"@sentry/hub" "6.6.0" "@sentry/hub" "6.8.0"
"@sentry/tracing" "6.6.0" "@sentry/tracing" "6.8.0"
"@sentry/types" "6.6.0" "@sentry/types" "6.8.0"
"@sentry/utils" "6.6.0" "@sentry/utils" "6.8.0"
cookie "^0.4.1" cookie "^0.4.1"
https-proxy-agent "^5.0.0" https-proxy-agent "^5.0.0"
lru_map "^0.3.3" lru_map "^0.3.3"
...@@ -2379,15 +2476,15 @@ ...@@ -2379,15 +2476,15 @@
"@sentry/utils" "6.2.5" "@sentry/utils" "6.2.5"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/tracing@6.6.0": "@sentry/tracing@6.8.0":
version "6.6.0" version "6.8.0"
resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.6.0.tgz#ce62fcb951faa6447cf47889f91efe3617b9eed2" resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.8.0.tgz#5baa4f2e66cd2e6851c213213017850f67e65f4b"
integrity sha512-tjXrmAOFfVBfx+ZmgE5bkpDPs/euNj0xrUg8MowCWGfCRn01W679tTb+dyNeP6faxQTo2RcaD68xD8oLroJwwA== integrity sha512-3gDkQnmOuOjHz5rY7BOatLEUksANU3efR8wuBa2ujsPQvoLSLFuyZpRjPPsxuUHQOqAYIbSNAoDloXECvQeHjw==
dependencies: dependencies:
"@sentry/hub" "6.6.0" "@sentry/hub" "6.8.0"
"@sentry/minimal" "6.6.0" "@sentry/minimal" "6.8.0"
"@sentry/types" "6.6.0" "@sentry/types" "6.8.0"
"@sentry/utils" "6.6.0" "@sentry/utils" "6.8.0"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/tracing@^6.3.1": "@sentry/tracing@^6.3.1":
...@@ -2416,10 +2513,10 @@ ...@@ -2416,10 +2513,10 @@
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.3.1.tgz#af3b54728b29f633f38fbe51b8c10e3834fbc158" resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.3.1.tgz#af3b54728b29f633f38fbe51b8c10e3834fbc158"
integrity sha512-BEBn8JX1yaooCAuonbaMci9z0RjwwMbQ3Eny/eyDdd+rjXprZCZaStZnCvSThbNBqAJ8YaUqY2YBMnEwJxarAw== integrity sha512-BEBn8JX1yaooCAuonbaMci9z0RjwwMbQ3Eny/eyDdd+rjXprZCZaStZnCvSThbNBqAJ8YaUqY2YBMnEwJxarAw==
"@sentry/types@6.6.0": "@sentry/types@6.8.0":
version "6.6.0" version "6.8.0"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.6.0.tgz#55cbca23859bad87411f0f32135a968e6e40a639" resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.8.0.tgz#97fd531a0ed1e75e65b4a24b26509fb7c15eb7b8"
integrity sha512-lZ1uFN0lSNftAohi0lciEoSL58Gk/Ib1lLKaj0FSOvB1PAUmvo5dPtLdd0qjtNdtoaM8zqhrAbwCTQ8XZCDRsg== integrity sha512-PbSxqlh6Fd5thNU5f8EVYBVvX+G7XdPA+ThNb2QvSK8yv3rIf0McHTyF6sIebgJ38OYN7ZFK7vvhC/RgSAfYTA==
"@sentry/utils@5.30.0": "@sentry/utils@5.30.0":
version "5.30.0" version "5.30.0"
...@@ -2445,12 +2542,12 @@ ...@@ -2445,12 +2542,12 @@
"@sentry/types" "6.3.1" "@sentry/types" "6.3.1"
tslib "^1.9.3" tslib "^1.9.3"
"@sentry/utils@6.6.0": "@sentry/utils@6.8.0":
version "6.6.0" version "6.8.0"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.6.0.tgz#b34d342d05eefc25b7ddd3f27f41c050f1e7e1ef" resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.8.0.tgz#0ffafa5b69fe0cdeabad5c4a6cc68a426eaa6b37"
integrity sha512-FK9yqz2x+ef50B54tueeJ6mfb7Pf3lN75omx/YQBDL5cicyOV4j4kJDqn8/VKYhcSuX+ZaCZ/8bvOf0lxe0aHg== integrity sha512-OYlI2JNrcWKMdvYbWNdQwR4QBVv2V0y5wK0U6f53nArv6RsyO5TzwRu5rMVSIZofUUqjoE5hl27jqnR+vpUrsA==
dependencies: dependencies:
"@sentry/types" "6.6.0" "@sentry/types" "6.8.0"
tslib "^1.9.3" tslib "^1.9.3"
"@sindresorhus/is@^0.14.0": "@sindresorhus/is@^0.14.0":
...@@ -3595,6 +3692,18 @@ babel-core@^6.0.14, babel-core@^6.26.0: ...@@ -3595,6 +3692,18 @@ babel-core@^6.0.14, babel-core@^6.26.0:
slash "^1.0.0" slash "^1.0.0"
source-map "^0.5.7" source-map "^0.5.7"
babel-eslint@^10.1.0:
version "10.1.0"
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==
dependencies:
"@babel/code-frame" "^7.0.0"
"@babel/parser" "^7.7.0"
"@babel/traverse" "^7.7.0"
"@babel/types" "^7.7.0"
eslint-visitor-keys "^1.0.0"
resolve "^1.12.0"
babel-generator@^6.26.0: babel-generator@^6.26.0:
version "6.26.1" version "6.26.1"
resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
...@@ -4692,6 +4801,14 @@ chalk@^4.0.0, chalk@^4.1.0: ...@@ -4692,6 +4801,14 @@ chalk@^4.0.0, chalk@^4.1.0:
ansi-styles "^4.1.0" ansi-styles "^4.1.0"
supports-color "^7.1.0" supports-color "^7.1.0"
chalk@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"
integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chardet@^0.7.0: chardet@^0.7.0:
version "0.7.0" version "0.7.0"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
...@@ -4844,6 +4961,14 @@ cli-table@^0.3.1: ...@@ -4844,6 +4961,14 @@ cli-table@^0.3.1:
dependencies: dependencies:
colors "1.0.3" colors "1.0.3"
cli-truncate@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
dependencies:
slice-ansi "^3.0.0"
string-width "^4.2.0"
cli-width@^3.0.0: cli-width@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
...@@ -5009,6 +5134,11 @@ commander@^2.19.0, commander@^2.20.0: ...@@ -5009,6 +5134,11 @@ commander@^2.19.0, commander@^2.20.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
commander@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
comment-parser@1.1.5, comment-parser@^1.1.5: comment-parser@1.1.5, comment-parser@^1.1.5:
version "1.1.5" version "1.1.5"
resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.1.5.tgz#453627ef8f67dbcec44e79a9bd5baa37f0bce9b2" resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.1.5.tgz#453627ef8f67dbcec44e79a9bd5baa37f0bce9b2"
...@@ -5890,7 +6020,7 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: ...@@ -5890,7 +6020,7 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1:
dependencies: dependencies:
once "^1.4.0" once "^1.4.0"
enquirer@^2.3.0, enquirer@^2.3.5: enquirer@^2.3.0, enquirer@^2.3.5, enquirer@^2.3.6:
version "2.3.6" version "2.3.6"
resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
...@@ -6111,6 +6241,13 @@ eslint-plugin-prefer-arrow@^1.2.3: ...@@ -6111,6 +6241,13 @@ eslint-plugin-prefer-arrow@^1.2.3:
resolved "https://registry.yarnpkg.com/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz#e7fbb3fa4cd84ff1015b9c51ad86550e55041041" resolved "https://registry.yarnpkg.com/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz#e7fbb3fa4cd84ff1015b9c51ad86550e55041041"
integrity sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ== integrity sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==
eslint-plugin-prettier@^3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7"
integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==
dependencies:
prettier-linter-helpers "^1.0.0"
eslint-plugin-react@^7.24.0: eslint-plugin-react@^7.24.0:
version "7.24.0" version "7.24.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz#eadedfa351a6f36b490aa17f4fa9b14e842b9eb4" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz#eadedfa351a6f36b490aa17f4fa9b14e842b9eb4"
...@@ -6181,7 +6318,7 @@ eslint-utils@^3.0.0: ...@@ -6181,7 +6318,7 @@ eslint-utils@^3.0.0:
dependencies: dependencies:
eslint-visitor-keys "^2.0.0" eslint-visitor-keys "^2.0.0"
eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
version "1.3.0" version "1.3.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
...@@ -7060,6 +7197,11 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: ...@@ -7060,6 +7197,11 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
fast-diff@^1.1.2:
version "1.2.0"
resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
fast-glob@^3.0.3, fast-glob@^3.1.1: fast-glob@^3.0.3, fast-glob@^3.1.1:
version "3.2.5" version "3.2.5"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
...@@ -7538,6 +7680,11 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: ...@@ -7538,6 +7680,11 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
has "^1.0.3" has "^1.0.3"
has-symbols "^1.0.1" has-symbols "^1.0.1"
get-own-enumerable-property-symbols@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
get-pkg-repo@^1.0.0: get-pkg-repo@^1.0.0:
version "1.4.0" version "1.4.0"
resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d"
...@@ -8735,6 +8882,11 @@ is-number@^7.0.0: ...@@ -8735,6 +8882,11 @@ is-number@^7.0.0:
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
is-obj@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
is-obj@^2.0.0: is-obj@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
...@@ -8790,6 +8942,11 @@ is-regex@~1.0.5: ...@@ -8790,6 +8942,11 @@ is-regex@~1.0.5:
dependencies: dependencies:
has "^1.0.3" has "^1.0.3"
is-regexp@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
is-retry-allowed@^1.0.0: is-retry-allowed@^1.0.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
...@@ -8848,6 +9005,11 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: ...@@ -8848,6 +9005,11 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0:
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
is-unicode-supported@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
is-url@^1.2.4: is-url@^1.2.4:
version "1.2.4" version "1.2.4"
resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
...@@ -9517,6 +9679,40 @@ lines-and-columns@^1.1.6: ...@@ -9517,6 +9679,40 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
lint-staged@11.0.0:
version "11.0.0"
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.0.0.tgz#24d0a95aa316ba28e257f5c4613369a75a10c712"
integrity sha512-3rsRIoyaE8IphSUtO1RVTFl1e0SLBtxxUOPBtHxQgBHS5/i6nqvjcUfNioMa4BU9yGnPzbO+xkfLtXtxBpCzjw==
dependencies:
chalk "^4.1.1"
cli-truncate "^2.1.0"
commander "^7.2.0"
cosmiconfig "^7.0.0"
debug "^4.3.1"
dedent "^0.7.0"
enquirer "^2.3.6"
execa "^5.0.0"
listr2 "^3.8.2"
log-symbols "^4.1.0"
micromatch "^4.0.4"
normalize-path "^3.0.0"
please-upgrade-node "^3.2.0"
string-argv "0.3.1"
stringify-object "^3.3.0"
listr2@^3.8.2:
version "3.10.0"
resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.10.0.tgz#58105a53ed7fa1430d1b738c6055ef7bb006160f"
integrity sha512-eP40ZHihu70sSmqFNbNy2NL1YwImmlMmPh9WO5sLmPDleurMHt3n+SwEWNu2kzKScexZnkyFtc1VI0z/TGlmpw==
dependencies:
cli-truncate "^2.1.0"
colorette "^1.2.2"
log-update "^4.0.0"
p-map "^4.0.0"
rxjs "^6.6.7"
through "^2.3.8"
wrap-ansi "^7.0.0"
load-json-file@^1.0.0: load-json-file@^1.0.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
...@@ -9679,6 +9875,24 @@ log-symbols@4.0.0: ...@@ -9679,6 +9875,24 @@ log-symbols@4.0.0:
dependencies: dependencies:
chalk "^4.0.0" chalk "^4.0.0"
log-symbols@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
dependencies:
chalk "^4.1.0"
is-unicode-supported "^0.1.0"
log-update@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1"
integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==
dependencies:
ansi-escapes "^4.3.0"
cli-cursor "^3.1.0"
slice-ansi "^4.0.0"
wrap-ansi "^6.2.0"
looper@^2.0.0: looper@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/looper/-/looper-2.0.0.tgz#66cd0c774af3d4fedac53794f742db56da8f09ec" resolved "https://registry.yarnpkg.com/looper/-/looper-2.0.0.tgz#66cd0c774af3d4fedac53794f742db56da8f09ec"
...@@ -10085,6 +10299,14 @@ micromatch@^4.0.2: ...@@ -10085,6 +10299,14 @@ micromatch@^4.0.2:
braces "^3.0.1" braces "^3.0.1"
picomatch "^2.0.5" picomatch "^2.0.5"
micromatch@^4.0.4:
version "4.0.4"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
dependencies:
braces "^3.0.1"
picomatch "^2.2.3"
miller-rabin@^4.0.0: miller-rabin@^4.0.0:
version "4.0.1" version "4.0.1"
resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
...@@ -11564,6 +11786,11 @@ picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: ...@@ -11564,6 +11786,11 @@ picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
picomatch@^2.2.3:
version "2.3.0"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
pify@^2.0.0, pify@^2.3.0: pify@^2.0.0, pify@^2.3.0:
version "2.3.0" version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
...@@ -11669,6 +11896,13 @@ pkg-up@^2.0.0: ...@@ -11669,6 +11896,13 @@ pkg-up@^2.0.0:
dependencies: dependencies:
find-up "^2.1.0" find-up "^2.1.0"
please-upgrade-node@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==
dependencies:
semver-compare "^1.0.0"
pluralize@^8.0.0: pluralize@^8.0.0:
version "8.0.0" version "8.0.0"
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1"
...@@ -11760,6 +11994,13 @@ prepend-http@^2.0.0: ...@@ -11760,6 +11994,13 @@ prepend-http@^2.0.0:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
prettier-linter-helpers@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
dependencies:
fast-diff "^1.1.2"
prettier@^1.14.2, prettier@^1.19.1: prettier@^1.14.2, prettier@^1.19.1:
version "1.19.1" version "1.19.1"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
...@@ -11770,6 +12011,11 @@ prettier@^2.1.2, prettier@^2.2.1: ...@@ -11770,6 +12011,11 @@ prettier@^2.1.2, prettier@^2.2.1:
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
prettier@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6"
integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==
printj@~1.1.0: printj@~1.1.0:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222"
...@@ -12540,7 +12786,7 @@ resolve@1.17.0, resolve@~1.17.0: ...@@ -12540,7 +12786,7 @@ resolve@1.17.0, resolve@~1.17.0:
dependencies: dependencies:
path-parse "^1.0.6" path-parse "^1.0.6"
resolve@^1.1.6, resolve@^1.10.0, resolve@^1.13.1, resolve@^1.20.0, resolve@^1.8.1: resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.20.0, resolve@^1.8.1:
version "1.20.0" version "1.20.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
...@@ -12757,6 +13003,11 @@ semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0: ...@@ -12757,6 +13003,11 @@ semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0:
resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa"
integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==
semver-compare@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
version "5.7.1" version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
...@@ -12986,6 +13237,15 @@ slash@^3.0.0: ...@@ -12986,6 +13237,15 @@ slash@^3.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
slice-ansi@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
dependencies:
ansi-styles "^4.0.0"
astral-regex "^2.0.0"
is-fullwidth-code-point "^3.0.0"
slice-ansi@^4.0.0: slice-ansi@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
...@@ -13348,6 +13608,11 @@ strict-uri-encode@^2.0.0: ...@@ -13348,6 +13608,11 @@ strict-uri-encode@^2.0.0:
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
string-argv@0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da"
integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==
string-width@^1.0.1: string-width@^1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
...@@ -13441,6 +13706,15 @@ string_decoder@~1.1.1: ...@@ -13441,6 +13706,15 @@ string_decoder@~1.1.1:
dependencies: dependencies:
safe-buffer "~5.1.0" safe-buffer "~5.1.0"
stringify-object@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
dependencies:
get-own-enumerable-property-symbols "^3.0.0"
is-obj "^1.0.1"
is-regexp "^1.0.0"
strip-ansi@^3.0.0, strip-ansi@^3.0.1: strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
...@@ -13819,7 +14093,7 @@ through2@^4.0.0: ...@@ -13819,7 +14093,7 @@ through2@^4.0.0:
dependencies: dependencies:
readable-stream "3" readable-stream "3"
through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@~2.3.4, through@~2.3.8: through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3.4, through@~2.3.8:
version "2.3.8" version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment