Commit adc2af3b authored by Mark Tyneway's avatar Mark Tyneway Committed by GitHub

Merge pull request #2036 from ethereum-optimism/develop

Develop -> Master PR
parents 8ef34710 d4e5de52
---
'@eth-optimism/l2geth': patch
---
Add support to fully unmarshal Receipts with Optimism fields
---
'@eth-optimism/l2geth': patch
---
Add changeset for https://github.com/ethereum-optimism/optimism/pull/2011 - replicas forward write requests to the sequencer via a configured parameter `--sequencer.clienthttp` or `SEQUENCER_CLIENT_HTTP`
---
'@eth-optimism/l2geth': patch
---
Correctly parse fee enforcement via config to allow turning off L2 fees for development
...@@ -138,6 +138,66 @@ jobs: ...@@ -138,6 +138,66 @@ jobs:
verbose: true verbose: true
flags: sdk flags: sdk
depcheck:
name: Check for unused dependencies
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Fetch history
run: git fetch
- name: Setup node
uses: actions/setup-node@v1
with:
node-version: '16.x'
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install Dependencies
# only install dependencies if there was a change in the deps
# if: steps.yarn-cache.outputs.cache-hit != 'true'
run: yarn install
- name: Check packages/batch-submitter
working-directory: ./packages/batch-submitter
run: npx depcheck
- name: Check packages/contracts
working-directory: ./packages/contracts
run: npx depcheck
- name: Check packages/core-utils
working-directory: ./packages/core-utils
run: npx depcheck
- name: Check packages/data-transport-layer
working-directory: ./packages/data-transport-layer
run: npx depcheck
- name: Check packages/message-relayer
working-directory: ./packages/message-relayer
run: npx depcheck
- name: Check packages/sdk
working-directory: ./packages/sdk
run: npx depcheck
- name: Check integration-tests
working-directory: ./integration-tests
run: npx depcheck
lint: lint:
name: Linting name: Linting
runs-on: ubuntu-latest runs-on: ubuntu-latest
......
ignores: [
"@openzeppelin/contracts",
"@types/mocha",
"@types/rimraf",
"@uniswap/v3-core",
"mocha",
"typescript",
]
\ No newline at end of file
...@@ -71,5 +71,32 @@ describe('Replica Tests', () => { ...@@ -71,5 +71,32 @@ describe('Replica Tests', () => {
expect(sequencerBlock.stateRoot).to.deep.eq(replicaBlock.stateRoot) expect(sequencerBlock.stateRoot).to.deep.eq(replicaBlock.stateRoot)
expect(sequencerBlock.hash).to.deep.eq(replicaBlock.hash) expect(sequencerBlock.hash).to.deep.eq(replicaBlock.hash)
}) })
it('should forward tx to sequencer', async () => {
const tx = {
...defaultTransactionFactory(),
nonce: await env.l2Wallet.getTransactionCount(),
gasPrice: await gasPriceForL2(env),
}
const signed = await env.l2Wallet.signTransaction(tx)
const result = await env.replicaProvider.sendTransaction(signed)
let receipt: TransactionReceipt
while (!receipt) {
receipt = await env.replicaProvider.getTransactionReceipt(result.hash)
await sleep(200)
}
const sequencerBlock = (await env.l2Provider.getBlock(
result.blockNumber
)) as any
const replicaBlock = (await env.replicaProvider.getBlock(
result.blockNumber
)) as any
expect(sequencerBlock.stateRoot).to.deep.eq(replicaBlock.stateRoot)
expect(sequencerBlock.hash).to.deep.eq(replicaBlock.hash)
})
}) })
}) })
...@@ -163,6 +163,7 @@ var ( ...@@ -163,6 +163,7 @@ var (
utils.RollupEnforceFeesFlag, utils.RollupEnforceFeesFlag,
utils.RollupFeeThresholdDownFlag, utils.RollupFeeThresholdDownFlag,
utils.RollupFeeThresholdUpFlag, utils.RollupFeeThresholdUpFlag,
utils.SequencerClientHttpFlag,
} }
rpcFlags = []cli.Flag{ rpcFlags = []cli.Flag{
......
...@@ -77,6 +77,7 @@ var AppHelpFlagGroups = []flagGroup{ ...@@ -77,6 +77,7 @@ var AppHelpFlagGroups = []flagGroup{
utils.RollupEnforceFeesFlag, utils.RollupEnforceFeesFlag,
utils.RollupFeeThresholdDownFlag, utils.RollupFeeThresholdDownFlag,
utils.RollupFeeThresholdUpFlag, utils.RollupFeeThresholdUpFlag,
utils.SequencerClientHttpFlag,
}, },
}, },
{ {
......
...@@ -861,6 +861,11 @@ var ( ...@@ -861,6 +861,11 @@ var (
Usage: "Allow txs with fees above the current fee up to this amount, must be > 1", Usage: "Allow txs with fees above the current fee up to this amount, must be > 1",
EnvVar: "ROLLUP_FEE_THRESHOLD_UP", EnvVar: "ROLLUP_FEE_THRESHOLD_UP",
} }
SequencerClientHttpFlag = cli.StringFlag{
Name: "sequencer.clienthttp",
Usage: "HTTP endpoint for the sequencer client",
EnvVar: "SEQUENCER_CLIENT_HTTP",
}
) )
// MakeDataDir retrieves the currently requested data directory, terminating // MakeDataDir retrieves the currently requested data directory, terminating
...@@ -1127,7 +1132,7 @@ func setRollup(ctx *cli.Context, cfg *rollup.Config) { ...@@ -1127,7 +1132,7 @@ func setRollup(ctx *cli.Context, cfg *rollup.Config) {
cfg.Backend = backend cfg.Backend = backend
} }
if ctx.GlobalIsSet(RollupEnforceFeesFlag.Name) { if ctx.GlobalIsSet(RollupEnforceFeesFlag.Name) {
cfg.EnforceFees = true cfg.EnforceFees = ctx.GlobalBool(RollupEnforceFeesFlag.Name)
} }
if ctx.GlobalIsSet(RollupFeeThresholdDownFlag.Name) { if ctx.GlobalIsSet(RollupFeeThresholdDownFlag.Name) {
val := ctx.GlobalFloat64(RollupFeeThresholdDownFlag.Name) val := ctx.GlobalFloat64(RollupFeeThresholdDownFlag.Name)
...@@ -1137,6 +1142,9 @@ func setRollup(ctx *cli.Context, cfg *rollup.Config) { ...@@ -1137,6 +1142,9 @@ func setRollup(ctx *cli.Context, cfg *rollup.Config) {
val := ctx.GlobalFloat64(RollupFeeThresholdUpFlag.Name) val := ctx.GlobalFloat64(RollupFeeThresholdUpFlag.Name)
cfg.FeeThresholdUp = new(big.Float).SetFloat64(val) cfg.FeeThresholdUp = new(big.Float).SetFloat64(val)
} }
if ctx.GlobalIsSet(SequencerClientHttpFlag.Name) {
cfg.SequencerClientHttp = ctx.GlobalString(SequencerClientHttpFlag.Name)
}
} }
// setLes configures the les server and ultra light client settings from the command line flags. // setLes configures the les server and ultra light client settings from the command line flags.
......
...@@ -27,9 +27,9 @@ func (r Receipt) MarshalJSON() ([]byte, error) { ...@@ -27,9 +27,9 @@ func (r Receipt) MarshalJSON() ([]byte, error) {
BlockHash common.Hash `json:"blockHash,omitempty"` BlockHash common.Hash `json:"blockHash,omitempty"`
BlockNumber *hexutil.Big `json:"blockNumber,omitempty"` BlockNumber *hexutil.Big `json:"blockNumber,omitempty"`
TransactionIndex hexutil.Uint `json:"transactionIndex"` TransactionIndex hexutil.Uint `json:"transactionIndex"`
L1GasPrice *big.Int `json:"l1GasPrice" gencodec:"required"` L1GasPrice *hexutil.Big `json:"l1GasPrice" gencodec:"required"`
L1GasUsed *big.Int `json:"l1GasUsed" gencodec:"required"` L1GasUsed *hexutil.Big `json:"l1GasUsed" gencodec:"required"`
L1Fee *big.Int `json:"l1Fee" gencodec:"required"` L1Fee *hexutil.Big `json:"l1Fee" gencodec:"required"`
FeeScalar *big.Float `json:"l1FeeScalar" gencodec:"required"` FeeScalar *big.Float `json:"l1FeeScalar" gencodec:"required"`
} }
var enc Receipt var enc Receipt
...@@ -44,9 +44,9 @@ func (r Receipt) MarshalJSON() ([]byte, error) { ...@@ -44,9 +44,9 @@ func (r Receipt) MarshalJSON() ([]byte, error) {
enc.BlockHash = r.BlockHash enc.BlockHash = r.BlockHash
enc.BlockNumber = (*hexutil.Big)(r.BlockNumber) enc.BlockNumber = (*hexutil.Big)(r.BlockNumber)
enc.TransactionIndex = hexutil.Uint(r.TransactionIndex) enc.TransactionIndex = hexutil.Uint(r.TransactionIndex)
enc.L1GasPrice = r.L1GasPrice enc.L1GasPrice = (*hexutil.Big)(r.L1GasPrice)
enc.L1GasUsed = r.L1GasUsed enc.L1GasUsed = (*hexutil.Big)(r.L1GasUsed)
enc.L1Fee = r.L1Fee enc.L1Fee = (*hexutil.Big)(r.L1Fee)
enc.FeeScalar = r.FeeScalar enc.FeeScalar = r.FeeScalar
return json.Marshal(&enc) return json.Marshal(&enc)
} }
...@@ -65,9 +65,9 @@ func (r *Receipt) UnmarshalJSON(input []byte) error { ...@@ -65,9 +65,9 @@ func (r *Receipt) UnmarshalJSON(input []byte) error {
BlockHash *common.Hash `json:"blockHash,omitempty"` BlockHash *common.Hash `json:"blockHash,omitempty"`
BlockNumber *hexutil.Big `json:"blockNumber,omitempty"` BlockNumber *hexutil.Big `json:"blockNumber,omitempty"`
TransactionIndex *hexutil.Uint `json:"transactionIndex"` TransactionIndex *hexutil.Uint `json:"transactionIndex"`
L1GasPrice *big.Int `json:"l1GasPrice" gencodec:"required"` L1GasPrice *hexutil.Big `json:"l1GasPrice" gencodec:"required"`
L1GasUsed *big.Int `json:"l1GasUsed" gencodec:"required"` L1GasUsed *hexutil.Big `json:"l1GasUsed" gencodec:"required"`
L1Fee *big.Int `json:"l1Fee" gencodec:"required"` L1Fee *hexutil.Big `json:"l1Fee" gencodec:"required"`
FeeScalar *big.Float `json:"l1FeeScalar" gencodec:"required"` FeeScalar *big.Float `json:"l1FeeScalar" gencodec:"required"`
} }
var dec Receipt var dec Receipt
...@@ -115,15 +115,15 @@ func (r *Receipt) UnmarshalJSON(input []byte) error { ...@@ -115,15 +115,15 @@ func (r *Receipt) UnmarshalJSON(input []byte) error {
if dec.L1GasPrice == nil { if dec.L1GasPrice == nil {
return errors.New("missing required field 'l1GasPrice' for Receipt") return errors.New("missing required field 'l1GasPrice' for Receipt")
} }
r.L1GasPrice = dec.L1GasPrice r.L1GasPrice = (*big.Int)(dec.L1GasPrice)
if dec.L1GasUsed == nil { if dec.L1GasUsed == nil {
return errors.New("missing required field 'l1GasUsed' for Receipt") return errors.New("missing required field 'l1GasUsed' for Receipt")
} }
r.L1GasUsed = dec.L1GasUsed r.L1GasUsed = (*big.Int)(dec.L1GasUsed)
if dec.L1Fee == nil { if dec.L1Fee == nil {
return errors.New("missing required field 'l1Fee' for Receipt") return errors.New("missing required field 'l1Fee' for Receipt")
} }
r.L1Fee = dec.L1Fee r.L1Fee = (*big.Int)(dec.L1Fee)
if dec.FeeScalar == nil { if dec.FeeScalar == nil {
return errors.New("missing required field 'l1FeeScalar' for Receipt") return errors.New("missing required field 'l1FeeScalar' for Receipt")
} }
......
...@@ -81,6 +81,9 @@ type receiptMarshaling struct { ...@@ -81,6 +81,9 @@ type receiptMarshaling struct {
GasUsed hexutil.Uint64 GasUsed hexutil.Uint64
BlockNumber *hexutil.Big BlockNumber *hexutil.Big
TransactionIndex hexutil.Uint TransactionIndex hexutil.Uint
L1GasPrice *hexutil.Big
L1GasUsed *hexutil.Big
L1Fee *hexutil.Big
} }
// receiptRLP is the consensus encoding of a receipt. // receiptRLP is the consensus encoding of a receipt.
......
...@@ -136,6 +136,10 @@ func (b *EthAPIBackend) IngestTransactions(txs []*types.Transaction) error { ...@@ -136,6 +136,10 @@ func (b *EthAPIBackend) IngestTransactions(txs []*types.Transaction) error {
return nil return nil
} }
func (b *EthAPIBackend) SequencerClientHttp() string {
return b.eth.config.Rollup.SequencerClientHttp
}
func (b *EthAPIBackend) HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) { func (b *EthAPIBackend) HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) {
// Pending block is only known by the miner // Pending block is only known by the miner
if number == rpc.PendingBlockNumber { if number == rpc.PendingBlockNumber {
......
...@@ -40,6 +40,7 @@ import ( ...@@ -40,6 +40,7 @@ import (
"github.com/ethereum-optimism/optimism/l2geth/core/types" "github.com/ethereum-optimism/optimism/l2geth/core/types"
"github.com/ethereum-optimism/optimism/l2geth/core/vm" "github.com/ethereum-optimism/optimism/l2geth/core/vm"
"github.com/ethereum-optimism/optimism/l2geth/crypto" "github.com/ethereum-optimism/optimism/l2geth/crypto"
"github.com/ethereum-optimism/optimism/l2geth/ethclient"
"github.com/ethereum-optimism/optimism/l2geth/log" "github.com/ethereum-optimism/optimism/l2geth/log"
"github.com/ethereum-optimism/optimism/l2geth/p2p" "github.com/ethereum-optimism/optimism/l2geth/p2p"
"github.com/ethereum-optimism/optimism/l2geth/params" "github.com/ethereum-optimism/optimism/l2geth/params"
...@@ -51,6 +52,12 @@ import ( ...@@ -51,6 +52,12 @@ import (
var errOVMUnsupported = errors.New("OVM: Unsupported RPC Method") var errOVMUnsupported = errors.New("OVM: Unsupported RPC Method")
const (
// defaultDialTimeout is default duration the service will wait on
// startup to make a connection to either the L1 or L2 backends.
defaultDialTimeout = 5 * time.Second
)
// PublicEthereumAPI provides an API to access Ethereum related information. // PublicEthereumAPI provides an API to access Ethereum related information.
// It offers only methods that operate on public data that is freely available to anyone. // It offers only methods that operate on public data that is freely available to anyone.
type PublicEthereumAPI struct { type PublicEthereumAPI struct {
...@@ -1289,6 +1296,18 @@ func newRPCTransactionFromBlockHash(b *types.Block, hash common.Hash) *RPCTransa ...@@ -1289,6 +1296,18 @@ func newRPCTransactionFromBlockHash(b *types.Block, hash common.Hash) *RPCTransa
return nil return nil
} }
// dialSequencerClientWithTimeout attempts to dial the Sequencer using the
// provided URL. If the dial doesn't complete within defaultDialTimeout
// seconds, this method will return an error.
func dialSequencerClientWithTimeout(ctx context.Context, url string) (
*ethclient.Client, error) {
ctxt, cancel := context.WithTimeout(ctx, defaultDialTimeout)
defer cancel()
return ethclient.DialContext(ctxt, url)
}
// PublicTransactionPoolAPI exposes methods for the RPC interface // PublicTransactionPoolAPI exposes methods for the RPC interface
type PublicTransactionPoolAPI struct { type PublicTransactionPoolAPI struct {
b Backend b Backend
...@@ -1649,18 +1668,27 @@ func (s *PublicTransactionPoolAPI) FillTransaction(ctx context.Context, args Sen ...@@ -1649,18 +1668,27 @@ func (s *PublicTransactionPoolAPI) FillTransaction(ctx context.Context, args Sen
// SendRawTransaction will add the signed transaction to the transaction pool. // SendRawTransaction will add the signed transaction to the transaction pool.
// The sender is responsible for signing the transaction and using the correct nonce. // The sender is responsible for signing the transaction and using the correct nonce.
func (s *PublicTransactionPoolAPI) SendRawTransaction(ctx context.Context, encodedTx hexutil.Bytes) (common.Hash, error) { func (s *PublicTransactionPoolAPI) SendRawTransaction(ctx context.Context, encodedTx hexutil.Bytes) (common.Hash, error) {
if s.b.IsVerifier() { tx := new(types.Transaction)
return common.Hash{}, errors.New("Cannot send raw transaction in verifier mode") if err := rlp.DecodeBytes(encodedTx, tx); err != nil {
return common.Hash{}, err
} }
if s.b.IsSyncing() { if s.b.IsSyncing() {
return common.Hash{}, errors.New("Cannot send raw transaction while syncing") return common.Hash{}, errors.New("Cannot send raw transaction while syncing")
} }
tx := new(types.Transaction) if s.b.IsVerifier() {
if err := rlp.DecodeBytes(encodedTx, tx); err != nil { client, err := dialSequencerClientWithTimeout(ctx, s.b.SequencerClientHttp())
return common.Hash{}, err if err != nil {
return common.Hash{}, err
}
err = client.SendTransaction(context.Background(), tx)
if err != nil {
return common.Hash{}, err
}
return tx.Hash(), nil
} }
// L1Timestamp and L1BlockNumber will be set right before execution // L1Timestamp and L1BlockNumber will be set right before execution
txMeta := types.NewTransactionMeta(nil, 0, nil, types.QueueOriginSequencer, nil, nil, encodedTx) txMeta := types.NewTransactionMeta(nil, 0, nil, types.QueueOriginSequencer, nil, nil, encodedTx)
tx.SetTransactionMeta(txMeta) tx.SetTransactionMeta(txMeta)
......
...@@ -96,6 +96,7 @@ type Backend interface { ...@@ -96,6 +96,7 @@ type Backend interface {
SuggestL2GasPrice(context.Context) (*big.Int, error) SuggestL2GasPrice(context.Context) (*big.Int, error)
SetL2GasPrice(context.Context, *big.Int) error SetL2GasPrice(context.Context, *big.Int) error
IngestTransactions([]*types.Transaction) error IngestTransactions([]*types.Transaction) error
SequencerClientHttp() string
} }
func GetAPIs(apiBackend Backend) []rpc.API { func GetAPIs(apiBackend Backend) []rpc.API {
......
...@@ -86,6 +86,10 @@ func (b *LesApiBackend) IngestTransactions([]*types.Transaction) error { ...@@ -86,6 +86,10 @@ func (b *LesApiBackend) IngestTransactions([]*types.Transaction) error {
panic("not implemented") panic("not implemented")
} }
func (b *LesApiBackend) SequencerClientHttp() string {
return b.eth.config.Rollup.SequencerClientHttp
}
func (b *LesApiBackend) HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) { func (b *LesApiBackend) HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) {
if number == rpc.LatestBlockNumber || number == rpc.PendingBlockNumber { if number == rpc.LatestBlockNumber || number == rpc.PendingBlockNumber {
return b.eth.blockchain.CurrentHeader(), nil return b.eth.blockchain.CurrentHeader(), nil
......
...@@ -37,4 +37,6 @@ type Config struct { ...@@ -37,4 +37,6 @@ type Config struct {
// quoted and the transaction being executed // quoted and the transaction being executed
FeeThresholdDown *big.Float FeeThresholdDown *big.Float
FeeThresholdUp *big.Float FeeThresholdUp *big.Float
// HTTP endpoint of the sequencer
SequencerClientHttp string
} }
...@@ -58,6 +58,15 @@ A Makefile has been provided for convience. The following targets are available. ...@@ -58,6 +58,15 @@ A Makefile has been provided for convience. The following targets are available.
- make up-metrics - make up-metrics
- make down-metrics - make down-metrics
## Turning off L2 Fee Enforcement
Fees can be turned off at runtime by setting the environment variable
`ROLLUP_ENFORCE_FEES` to `false`.
```bash
ROLLUP_ENFORCE_FEES=false docker-compose up
```
## Using the Go Batch Submitter ## Using the Go Batch Submitter
The existing Typescript batch submitter is in the process of being reimplemented The existing Typescript batch submitter is in the process of being reimplemented
......
...@@ -101,6 +101,10 @@ services: ...@@ -101,6 +101,10 @@ services:
# no need to keep this secret, only used internally to sign blocks # no need to keep this secret, only used internally to sign blocks
BLOCK_SIGNER_KEY: "6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27" BLOCK_SIGNER_KEY: "6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d27"
BLOCK_SIGNER_ADDRESS: "0x00000398232E2064F896018496b4b44b3D62751F" BLOCK_SIGNER_ADDRESS: "0x00000398232E2064F896018496b4b44b3D62751F"
ROLLUP_ENFORCE_FEES: ${ROLLUP_ENFORCE_FEES:-true}
ROLLUP_FEE_THRESHOLD_DOWN: 0.9
ROLLUP_FEE_THRESHOLD_UP: 1.1
ports: ports:
- ${L2GETH_HTTP_PORT:-8545}:8545 - ${L2GETH_HTTP_PORT:-8545}:8545
- ${L2GETH_WS_PORT:-8546}:8546 - ${L2GETH_WS_PORT:-8546}:8546
...@@ -155,6 +159,7 @@ services: ...@@ -155,6 +159,7 @@ services:
replica: replica:
depends_on: depends_on:
- dtl - dtl
- l2geth
deploy: deploy:
replicas: 1 replicas: 1
build: build:
...@@ -165,6 +170,7 @@ services: ...@@ -165,6 +170,7 @@ services:
- ./envs/geth.env - ./envs/geth.env
environment: environment:
ETH1_HTTP: http://l1_chain:8545 ETH1_HTTP: http://l1_chain:8545
SEQUENCER_CLIENT_HTTP: http://l2geth:8545
ROLLUP_STATE_DUMP_PATH: http://deployer:8081/state-dump.latest.json ROLLUP_STATE_DUMP_PATH: http://deployer:8081/state-dump.latest.json
ROLLUP_CLIENT_HTTP: http://dtl:7878 ROLLUP_CLIENT_HTTP: http://dtl:7878
ROLLUP_BACKEND: 'l2' ROLLUP_BACKEND: 'l2'
......
...@@ -6,7 +6,6 @@ ETH1_CONFIRMATION_DEPTH=0 ...@@ -6,7 +6,6 @@ ETH1_CONFIRMATION_DEPTH=0
ROLLUP_CLIENT_HTTP= ROLLUP_CLIENT_HTTP=
ROLLUP_POLL_INTERVAL_FLAG=500ms ROLLUP_POLL_INTERVAL_FLAG=500ms
ROLLUP_ENABLE_L2_GAS_POLLING=true ROLLUP_ENABLE_L2_GAS_POLLING=true
ROLLUP_ENFORCE_FEES=true
RPC_ENABLE=true RPC_ENABLE=true
RPC_ADDR=0.0.0.0 RPC_ADDR=0.0.0.0
...@@ -36,6 +35,3 @@ BLOCK_SIGNER_KEY=6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d2 ...@@ -36,6 +35,3 @@ BLOCK_SIGNER_KEY=6587ae678cf4fc9a33000cdbf9f35226b71dcc6a4684a31203241f9bcfd55d2
BLOCK_SIGNER_ADDRESS=0x00000398232E2064F896018496b4b44b3D62751F BLOCK_SIGNER_ADDRESS=0x00000398232E2064F896018496b4b44b3D62751F
L2_BLOCK_GAS_LIMIT=15000000 L2_BLOCK_GAS_LIMIT=15000000
ROLLUP_FEE_THRESHOLD_DOWN=0.9
ROLLUP_FEE_THRESHOLD_UP=1.1
ignores: [
"@codechecks/client",
"@ethersproject/transactions",
"@openzeppelin/contracts",
"@openzeppelin/contracts-upgradeable",
"@typechain/ethers-v5",
"prettier-plugin-solidity",
"solhint-plugin-prettier",
"ts-generator",
"yargs",
]
\ No newline at end of file
ignores: [
"@eth-optimism/core-utils",
"ts-mocha",
]
\ No newline at end of file
...@@ -7928,9 +7928,9 @@ fmix@^0.1.0: ...@@ -7928,9 +7928,9 @@ fmix@^0.1.0:
imul "^1.0.0" imul "^1.0.0"
follow-redirects@^1.12.1, follow-redirects@^1.14.0: follow-redirects@^1.12.1, follow-redirects@^1.14.0:
version "1.14.3" version "1.14.7"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.3.tgz#6ada78118d8d24caee595595accdc0ac6abd022e" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685"
integrity sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw== integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==
for-each@^0.3.3, for-each@~0.3.3: for-each@^0.3.3, for-each@~0.3.3:
version "0.3.3" version "0.3.3"
...@@ -13964,9 +13964,9 @@ shebang-regex@^3.0.0: ...@@ -13964,9 +13964,9 @@ shebang-regex@^3.0.0:
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
shelljs@^0.8.3, shelljs@^0.8.4: shelljs@^0.8.3, shelljs@^0.8.4:
version "0.8.4" version "0.8.5"
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c"
integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==
dependencies: dependencies:
glob "^7.0.0" glob "^7.0.0"
interpret "^1.0.0" interpret "^1.0.0"
......
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