Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
dade91a8
Unverified
Commit
dade91a8
authored
Aug 18, 2023
by
mergify[bot]
Committed by
GitHub
Aug 18, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into jg/race_cond_in_batcher
parents
d8cda3f1
edafea3e
Changes
47
Hide whitespace changes
Inline
Side-by-side
Showing
47 changed files
with
592 additions
and
681 deletions
+592
-681
hip-olives-press.md
.changeset/hip-olives-press.md
+5
-0
config.yml
.circleci/config.yml
+2
-11
mergify.yml
.github/mergify.yml
+54
-6
Makefile
Makefile
+4
-0
__init__.py
bedrock-devnet/devnet/__init__.py
+31
-2
go.mod
go.mod
+0
-1
go.sum
go.sum
+0
-2
config.go
indexer/config/config.go
+3
-8
Makefile
op-bindings/Makefile
+1
-1
trace.sh
op-chain-ops/crossdomain/testdata/trace.sh
+1
-1
main_test.go
op-challenger/cmd/main_test.go
+23
-6
config.go
op-challenger/config/config.go
+7
-6
config_test.go
op-challenger/config/config_test.go
+10
-4
executor_test.go
op-challenger/fault/cannon/executor_test.go
+1
-1
flags.go
op-challenger/flags/flags.go
+19
-4
charlie.sh
op-challenger/scripts/alphabet/charlie.sh
+4
-1
init_game.sh
op-challenger/scripts/alphabet/init_game.sh
+1
-1
mallory.sh
op-challenger/scripts/alphabet/mallory.sh
+4
-1
parallel.sh
op-challenger/scripts/parallel.sh
+1
-1
visualize.sh
op-challenger/scripts/visualize.sh
+1
-1
alphabet_helper.go
op-e2e/e2eutils/disputegame/alphabet_helper.go
+1
-0
cannon_helper.go
op-e2e/e2eutils/disputegame/cannon_helper.go
+11
-3
game_helper.go
op-e2e/e2eutils/disputegame/game_helper.go
+7
-6
helper.go
op-e2e/e2eutils/disputegame/helper.go
+16
-15
system_test.go
op-e2e/system_test.go
+2
-2
rpc.go
op-node/client/rpc.go
+3
-3
script.sh
op-node/cmd/batch_decoder/script.sh
+3
-0
state.go
op-node/rollup/driver/state.go
+2
-2
sync_client.go
op-node/sources/sync_client.go
+6
-6
retry.go
op-program/host/prefetcher/retry.go
+12
-12
retry_test.go
op-program/host/prefetcher/retry_test.go
+5
-5
dial.go
op-service/client/dial.go
+3
-3
operation.go
op-service/retry/operation.go
+1
-1
operation_test.go
op-service/retry/operation_test.go
+1
-1
strategies.go
op-service/retry/strategies.go
+15
-16
strategies_test.go
op-service/retry/strategies_test.go
+5
-5
txmgr.go
op-service/txmgr/txmgr.go
+2
-2
package.json
packages/common-ts/package.json
+1
-1
logger.ts
packages/common-ts/src/common/logger.ts
+1
-1
slither.sh
packages/contracts-bedrock/scripts/slither.sh
+1
-1
verify-foundry-install.sh
packages/contracts-bedrock/scripts/verify-foundry-install.sh
+1
-1
.depcheckrc
packages/sdk/.depcheckrc
+1
-0
package.json
packages/sdk/package.json
+14
-13
CHANGELOG.md
packages/web3js-plugin/CHANGELOG.md
+6
-0
README.md
packages/web3js-plugin/README.md
+8
-2
package.json
packages/web3js-plugin/package.json
+1
-1
pnpm-lock.yaml
pnpm-lock.yaml
+291
-521
No files found.
.changeset/hip-olives-press.md
0 → 100644
View file @
dade91a8
---
'
@eth-optimism/sdk'
:
patch
---
Updated npm dependencies to latest
.circleci/config.yml
View file @
dade91a8
...
...
@@ -945,17 +945,8 @@ jobs:
name
:
Bring up the stack
command
:
make devnet-up
-
run
:
name
:
Check L2 config
command
:
go run cmd/check-l2/main.go --l2-rpc-url http://localhost:9545 --l1-rpc-url http://localhost:8545
working_directory
:
op-chain-ops
-
run
:
name
:
Deposit ERC20 through the bridge
command
:
timeout 8m npx hardhat deposit-erc20 --network devnetL1 --l1-contracts-json-path ../../.devnet/addresses.json
working_directory
:
packages/sdk
-
run
:
name
:
Deposit ETH through the bridge
command
:
timeout 8m npx hardhat deposit-eth --network devnetL1 --l1-contracts-json-path ../../.devnet/addresses.json
working_directory
:
packages/sdk
name
:
Test the stack
command
:
make devnet-test
-
run
:
name
:
Dump op-node logs
command
:
|
...
...
.github/mergify.yml
View file @
dade91a8
...
...
@@ -221,17 +221,14 @@ pull_request_rules:
label
:
add
:
-
A-ops
-
name
:
Add A-pkg-
sdk label and ecopod reviewers
-
name
:
Add A-pkg-
chain-mon label
conditions
:
-
'
files~=^packages/
sdk
/'
-
'
files~=^packages/
chain-mon
/'
-
'
#label<5'
actions
:
label
:
add
:
-
A-pkg-sdk
request_reviews
:
users
:
-
roninjin10
-
A-pkg-chain-mon
-
name
:
Add A-pkg-common-ts label and ecopod reviewers
conditions
:
-
'
files~=^packages/common-ts/'
...
...
@@ -250,6 +247,57 @@ pull_request_rules:
label
:
add
:
-
A-pkg-contracts-bedrock
-
name
:
Add A-pkg-contracts-ts label
conditions
:
-
'
files~=^packages/contracts-ts/'
-
'
#label<5'
actions
:
label
:
add
:
-
A-pkg-contracts-ts
-
name
:
Add A-pkg-core-utils label
conditions
:
-
'
files~=^packages/core-utils/'
-
'
#label<5'
actions
:
label
:
add
:
-
A-pkg-core-utils
-
name
:
Add A-pkg-fee-estimation label
conditions
:
-
'
files~=^packages/fee-estimation/'
-
'
#label<5'
actions
:
label
:
add
:
-
A-pkg-fee-estimation
-
name
:
Add A-pkg-sdk label and ecopod reviewers
conditions
:
-
'
files~=^packages/sdk/'
-
'
#label<5'
actions
:
label
:
add
:
-
A-pkg-sdk
request_reviews
:
users
:
-
roninjin10
-
name
:
Add A-pkg-web3js-plugin label
conditions
:
-
'
files~=^packages/web3js-plugin/'
-
'
#label<5'
actions
:
label
:
add
:
-
A-pkg-web3js-plugin
-
name
:
Add A-proxyd label
conditions
:
-
'
files~=^proxyd/'
-
'
#label<5'
actions
:
label
:
add
:
-
A-proxyd
-
name
:
Add M-docs label
conditions
:
-
'
files~=^(technical-documents|specs)\/'
...
...
Makefile
View file @
dade91a8
...
...
@@ -96,6 +96,10 @@ devnet-up:
# alias for devnet-up
devnet-up-deploy
:
devnet-up
devnet-test
:
PYTHONPATH
=
./bedrock-devnet python3 ./bedrock-devnet/main.py
--monorepo-dir
=
.
--test
.PHONY
:
devnet-test
devnet-down
:
@
(
cd
./ops-bedrock
&&
GENESIS_TIMESTAMP
=
$(
shell
date
+%s
)
docker-compose stop
)
.PHONY
:
devnet-down
...
...
bedrock-devnet/devnet/__init__.py
View file @
dade91a8
...
...
@@ -18,6 +18,7 @@ pjoin = os.path.join
parser
=
argparse
.
ArgumentParser
(
description
=
'Bedrock devnet launcher'
)
parser
.
add_argument
(
'--monorepo-dir'
,
help
=
'Directory of the monorepo'
,
default
=
os
.
getcwd
())
parser
.
add_argument
(
'--allocs'
,
help
=
'Only create the allocs and exit'
,
type
=
bool
,
action
=
argparse
.
BooleanOptionalAction
)
parser
.
add_argument
(
'--test'
,
help
=
'Tests the deployment, must already be deployed'
,
type
=
bool
,
action
=
argparse
.
BooleanOptionalAction
)
log
=
logging
.
getLogger
()
...
...
@@ -57,6 +58,8 @@ def main():
ops_bedrock_dir
=
pjoin
(
monorepo_dir
,
'ops-bedrock'
)
deploy_config_dir
=
pjoin
(
contracts_bedrock_dir
,
'deploy-config'
),
devnet_config_path
=
pjoin
(
contracts_bedrock_dir
,
'deploy-config'
,
'devnetL1.json'
)
ops_chain_ops
=
pjoin
(
monorepo_dir
,
'op-chain-ops'
)
sdk_dir
=
pjoin
(
monorepo_dir
,
'packages'
,
'sdk'
)
paths
=
Bunch
(
mono_repo_dir
=
monorepo_dir
,
...
...
@@ -68,6 +71,8 @@ def main():
devnet_config_path
=
devnet_config_path
,
op_node_dir
=
op_node_dir
,
ops_bedrock_dir
=
ops_bedrock_dir
,
ops_chain_ops
=
ops_chain_ops
,
sdk_dir
=
sdk_dir
,
genesis_l1_path
=
pjoin
(
devnet_dir
,
'genesis-l1.json'
),
genesis_l2_path
=
pjoin
(
devnet_dir
,
'genesis-l2.json'
),
allocs_path
=
pjoin
(
devnet_dir
,
'allocs-l1.json'
),
...
...
@@ -76,6 +81,11 @@ def main():
rollup_config_path
=
pjoin
(
devnet_dir
,
'rollup.json'
)
)
if
args
.
test
:
log
.
info
(
'Testing deployed devnet'
)
devnet_test
(
paths
)
return
os
.
makedirs
(
devnet_dir
,
exist_ok
=
True
)
if
args
.
allocs
:
...
...
@@ -250,8 +260,26 @@ def wait_for_rpc_server(url):
log
.
info
(
f
'Waiting for RPC server at {url}'
)
time
.
sleep
(
1
)
def
devnet_test
(
paths
):
# Check the L2 config
run_command
(
[
'go'
,
'run'
,
'cmd/check-l2/main.go'
,
'--l2-rpc-url'
,
'http://localhost:9545'
,
'--l1-rpc-url'
,
'http://localhost:8545'
],
cwd
=
paths
.
ops_chain_ops
,
)
run_command
(
[
'npx'
,
'hardhat'
,
'deposit-erc20'
,
'--network'
,
'devnetL1'
,
'--l1-contracts-json-path'
,
paths
.
addresses_json_path
],
cwd
=
paths
.
sdk_dir
,
timeout
=
8
*
60
,
)
run_command
(
[
'npx'
,
'hardhat'
,
'deposit-eth'
,
'--network'
,
'devnetL1'
,
'--l1-contracts-json-path'
,
paths
.
addresses_json_path
],
cwd
=
paths
.
sdk_dir
,
timeout
=
8
*
60
,
)
def
run_command
(
args
,
check
=
True
,
shell
=
False
,
cwd
=
None
,
env
=
None
):
def
run_command
(
args
,
check
=
True
,
shell
=
False
,
cwd
=
None
,
env
=
None
,
timeout
=
None
):
env
=
env
if
env
else
{}
return
subprocess
.
run
(
args
,
...
...
@@ -261,7 +289,8 @@ def run_command(args, check=True, shell=False, cwd=None, env=None):
**
os
.
environ
,
**
env
},
cwd
=
cwd
cwd
=
cwd
,
timeout
=
timeout
)
...
...
go.mod
View file @
dade91a8
...
...
@@ -24,7 +24,6 @@ require (
github.com/ipfs/go-ds-leveldb v0.5.0
github.com/jackc/pgtype v1.14.0
github.com/jackc/pgx/v5 v5.4.3
github.com/joho/godotenv v1.5.1
github.com/libp2p/go-libp2p v0.27.8
github.com/libp2p/go-libp2p-pubsub v0.9.3
github.com/libp2p/go-libp2p-testing v0.12.0
...
...
go.sum
View file @
dade91a8
...
...
@@ -429,8 +429,6 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
...
...
indexer/config/config.go
View file @
dade91a8
...
...
@@ -8,7 +8,6 @@ import (
"github.com/BurntSushi/toml"
"github.com/ethereum/go-ethereum/common"
geth_log
"github.com/ethereum/go-ethereum/log"
"github.com/joho/godotenv"
)
// in future presets can just be onchain config and fetched on initialization
...
...
@@ -89,13 +88,7 @@ type MetricsConfig struct {
// LoadConfig loads the `indexer.toml` config file from a given path
func
LoadConfig
(
logger
geth_log
.
Logger
,
path
string
)
(
Config
,
error
)
{
if
err
:=
godotenv
.
Load
();
err
!=
nil
{
logger
.
Warn
(
"Unable to load .env file"
,
err
)
logger
.
Info
(
"Continuing without .env file"
)
}
else
{
logger
.
Info
(
"Loaded .env file"
)
}
logger
.
Info
(
"Loading config file"
,
"path"
,
path
)
var
conf
Config
data
,
err
:=
os
.
ReadFile
(
path
)
...
...
@@ -105,6 +98,8 @@ func LoadConfig(logger geth_log.Logger, path string) (Config, error) {
data
=
[]
byte
(
os
.
ExpandEnv
(
string
(
data
)))
logger
.
Debug
(
"Decoding config file"
,
"data"
,
string
(
data
))
if
_
,
err
:=
toml
.
Decode
(
string
(
data
),
&
conf
);
err
!=
nil
{
logger
.
Info
(
"Failed to decode config file"
,
"message"
,
err
)
return
conf
,
err
...
...
op-bindings/Makefile
View file @
dade91a8
SHELL
:=
/
bin/
bash
SHELL
:=
/
usr/bin/env
bash
pkg
:=
bindings
monorepo-base
:=
$(
shell
dirname
$
(
realpath
.
))
...
...
op-chain-ops/crossdomain/testdata/trace.sh
View file @
dade91a8
#!/
bin/
bash
#!/
usr/bin/env
bash
HASH
=
$1
...
...
op-challenger/cmd/main_test.go
View file @
dade91a8
...
...
@@ -15,7 +15,7 @@ import (
var
(
l1EthRpc
=
"http://example.com:8545"
game
AddressValue
=
"0xaa
00000000000000000000000000000000000000"
game
FactoryAddressValue
=
"0xbb
00000000000000000000000000000000000000"
cannonNetwork
=
chaincfg
.
AvailableNetworks
()[
0
]
otherCannonNetwork
=
chaincfg
.
AvailableNetworks
()[
1
]
cannonBin
=
"./bin/cannon"
...
...
@@ -44,14 +44,14 @@ func TestLogLevel(t *testing.T) {
func
TestDefaultCLIOptionsMatchDefaultConfig
(
t
*
testing
.
T
)
{
cfg
:=
configForArgs
(
t
,
addRequiredArgs
(
config
.
TraceTypeAlphabet
))
defaultCfg
:=
config
.
NewConfig
(
l1EthRpc
,
common
.
HexToAddress
(
gameAddressValue
)
,
config
.
TraceTypeAlphabet
,
true
)
defaultCfg
:=
config
.
NewConfig
(
common
.
HexToAddress
(
gameFactoryAddressValue
),
l1EthRpc
,
config
.
TraceTypeAlphabet
,
true
)
// Add in the extra CLI options required when using alphabet trace type
defaultCfg
.
AlphabetTrace
=
alphabetTrace
require
.
Equal
(
t
,
defaultCfg
,
cfg
)
}
func
TestDefaultConfigIsValid
(
t
*
testing
.
T
)
{
cfg
:=
config
.
NewConfig
(
l1EthRpc
,
common
.
HexToAddress
(
gameAddressValue
)
,
config
.
TraceTypeAlphabet
,
true
)
cfg
:=
config
.
NewConfig
(
common
.
HexToAddress
(
gameFactoryAddressValue
),
l1EthRpc
,
config
.
TraceTypeAlphabet
,
true
)
// Add in options that are required based on the specific trace type
// To avoid needing to specify unused options, these aren't included in the params for NewConfig
cfg
.
AlphabetTrace
=
alphabetTrace
...
...
@@ -89,9 +89,26 @@ func TestTraceType(t *testing.T) {
})
}
func
TestGameAddress
(
t
*
testing
.
T
)
{
func
TestGame
Factory
Address
(
t
*
testing
.
T
)
{
t
.
Run
(
"Required"
,
func
(
t
*
testing
.
T
)
{
verifyArgsInvalid
(
t
,
"flag game-address is required"
,
addRequiredArgsExcept
(
config
.
TraceTypeAlphabet
,
"--game-address"
))
verifyArgsInvalid
(
t
,
"flag game-factory-address is required"
,
addRequiredArgsExcept
(
config
.
TraceTypeAlphabet
,
"--game-factory-address"
))
})
t
.
Run
(
"Valid"
,
func
(
t
*
testing
.
T
)
{
addr
:=
common
.
Address
{
0xbb
,
0xcc
,
0xdd
}
cfg
:=
configForArgs
(
t
,
addRequiredArgsExcept
(
config
.
TraceTypeAlphabet
,
"--game-factory-address"
,
"--game-factory-address="
+
addr
.
Hex
()))
require
.
Equal
(
t
,
addr
,
cfg
.
GameFactoryAddress
)
})
t
.
Run
(
"Invalid"
,
func
(
t
*
testing
.
T
)
{
verifyArgsInvalid
(
t
,
"invalid address: foo"
,
addRequiredArgsExcept
(
config
.
TraceTypeAlphabet
,
"--game-factory-address"
,
"--game-factory-address=foo"
))
})
}
func
TestGameAddress
(
t
*
testing
.
T
)
{
t
.
Run
(
"Optional"
,
func
(
t
*
testing
.
T
)
{
cfg
:=
configForArgs
(
t
,
addRequiredArgsExcept
(
config
.
TraceTypeAlphabet
,
"--game-address"
))
require
.
NoError
(
t
,
cfg
.
Check
())
})
t
.
Run
(
"Valid"
,
func
(
t
*
testing
.
T
)
{
...
...
@@ -316,7 +333,7 @@ func requiredArgs(traceType config.TraceType) map[string]string {
args
:=
map
[
string
]
string
{
"--agree-with-proposed-output"
:
agreeWithProposedOutput
,
"--l1-eth-rpc"
:
l1EthRpc
,
"--game-
address"
:
game
AddressValue
,
"--game-
factory-address"
:
gameFactory
AddressValue
,
"--trace-type"
:
traceType
.
String
(),
}
switch
traceType
{
...
...
op-challenger/config/config.go
View file @
dade91a8
...
...
@@ -18,7 +18,7 @@ var (
ErrMissingCannonAbsolutePreState
=
errors
.
New
(
"missing cannon absolute pre-state"
)
ErrMissingAlphabetTrace
=
errors
.
New
(
"missing alphabet trace"
)
ErrMissingL1EthRPC
=
errors
.
New
(
"missing l1 eth rpc url"
)
ErrMissingGame
Address
=
errors
.
New
(
"missing game
address"
)
ErrMissingGame
FactoryAddress
=
errors
.
New
(
"missing game factory
address"
)
ErrMissingCannonSnapshotFreq
=
errors
.
New
(
"missing cannon snapshot freq"
)
ErrMissingCannonRollupConfig
=
errors
.
New
(
"missing cannon network or rollup config path"
)
ErrMissingCannonL2Genesis
=
errors
.
New
(
"missing cannon network or l2 genesis path"
)
...
...
@@ -65,6 +65,7 @@ const DefaultCannonSnapshotFreq = uint(1_000_000_000)
// It is used to initialize the challenger.
type
Config
struct
{
L1EthRpc
string
// L1 RPC Url
GameFactoryAddress
common
.
Address
// Address of the dispute game factory
GameAddress
common
.
Address
// Address of the fault game
AgreeWithProposedOutput
bool
// Temporary config if we agree or disagree with the posted output
...
...
@@ -88,14 +89,14 @@ type Config struct {
}
func
NewConfig
(
gameFactoryAddress
common
.
Address
,
l1EthRpc
string
,
gameAddress
common
.
Address
,
traceType
TraceType
,
agreeWithProposedOutput
bool
,
)
Config
{
return
Config
{
L1EthRpc
:
l1EthRpc
,
Game
Address
:
game
Address
,
L1EthRpc
:
l1EthRpc
,
Game
FactoryAddress
:
gameFactory
Address
,
AgreeWithProposedOutput
:
agreeWithProposedOutput
,
...
...
@@ -111,8 +112,8 @@ func (c Config) Check() error {
if
c
.
L1EthRpc
==
""
{
return
ErrMissingL1EthRPC
}
if
c
.
GameAddress
==
(
common
.
Address
{})
{
return
ErrMissingGameAddress
if
c
.
Game
Factory
Address
==
(
common
.
Address
{})
{
return
ErrMissingGame
Factory
Address
}
if
c
.
TraceType
==
""
{
return
ErrMissingTraceType
...
...
op-challenger/config/config_test.go
View file @
dade91a8
...
...
@@ -10,7 +10,7 @@ import (
var
(
validL1EthRpc
=
"http://localhost:8545"
validGame
Address
=
common
.
HexToAddress
(
"0x7bdd3b028C4796eF0EAf07d11394d0d9d8c24139"
)
validGame
FactoryAddress
=
common
.
Address
{
0x23
}
validAlphabetTrace
=
"abcdefgh"
validCannonBin
=
"./bin/cannon"
validCannonOpProgramBin
=
"./bin/op-program"
...
...
@@ -22,7 +22,7 @@ var (
)
func
validConfig
(
traceType
TraceType
)
Config
{
cfg
:=
NewConfig
(
valid
L1EthRpc
,
validGameAddress
,
traceType
,
agreeWithProposedOutput
)
cfg
:=
NewConfig
(
valid
GameFactoryAddress
,
validL1EthRpc
,
traceType
,
agreeWithProposedOutput
)
switch
traceType
{
case
TraceTypeAlphabet
:
cfg
.
AlphabetTrace
=
validAlphabetTrace
...
...
@@ -62,10 +62,16 @@ func TestL1EthRpcRequired(t *testing.T) {
require
.
ErrorIs
(
t
,
config
.
Check
(),
ErrMissingL1EthRPC
)
}
func
TestGameAddressRequired
(
t
*
testing
.
T
)
{
func
TestGameFactoryAddressRequired
(
t
*
testing
.
T
)
{
config
:=
validConfig
(
TraceTypeCannon
)
config
.
GameFactoryAddress
=
common
.
Address
{}
require
.
ErrorIs
(
t
,
config
.
Check
(),
ErrMissingGameFactoryAddress
)
}
func
TestGameAddressNotRequired
(
t
*
testing
.
T
)
{
config
:=
validConfig
(
TraceTypeCannon
)
config
.
GameAddress
=
common
.
Address
{}
require
.
ErrorIs
(
t
,
config
.
Check
(),
ErrMissingGameAddress
)
require
.
NoError
(
t
,
config
.
Check
()
)
}
func
TestAlphabetTraceRequired
(
t
*
testing
.
T
)
{
...
...
op-challenger/fault/cannon/executor_test.go
View file @
dade91a8
...
...
@@ -21,7 +21,7 @@ const execTestCannonPrestate = "/foo/pre.json"
func
TestGenerateProof
(
t
*
testing
.
T
)
{
input
:=
"starting.json"
cfg
:=
config
.
NewConfig
(
"http://localhost:8888"
,
common
.
Address
{
0xaa
}
,
config
.
TraceTypeCannon
,
true
)
cfg
:=
config
.
NewConfig
(
common
.
Address
{
0xbb
},
"http://localhost:8888"
,
config
.
TraceTypeCannon
,
true
)
cfg
.
CannonDatadir
=
t
.
TempDir
()
cfg
.
CannonAbsolutePreState
=
"pre.json"
cfg
.
CannonBin
=
"./bin/cannon"
...
...
op-challenger/flags/flags.go
View file @
dade91a8
...
...
@@ -10,6 +10,7 @@ import (
openum
"github.com/ethereum-optimism/optimism/op-service/enum"
oplog
"github.com/ethereum-optimism/optimism/op-service/log"
"github.com/ethereum-optimism/optimism/op-service/txmgr"
"github.com/ethereum/go-ethereum/common"
"github.com/urfave/cli/v2"
)
...
...
@@ -29,7 +30,12 @@ var (
Usage
:
"HTTP provider URL for L1."
,
EnvVars
:
prefixEnvVars
(
"L1_ETH_RPC"
),
}
DGFAddressFlag
=
&
cli
.
StringFlag
{
FactoryAddressFlag
=
&
cli
.
StringFlag
{
Name
:
"game-factory-address"
,
Usage
:
"Address of the fault game factory contract."
,
EnvVars
:
prefixEnvVars
(
"GAME_FACTORY_ADDRESS"
),
}
GameAddressFlag
=
&
cli
.
StringFlag
{
Name
:
"game-address"
,
Usage
:
"Address of the Fault Game contract."
,
EnvVars
:
prefixEnvVars
(
"GAME_ADDRESS"
),
...
...
@@ -105,7 +111,7 @@ var (
// requiredFlags are checked by [CheckRequired]
var
requiredFlags
=
[]
cli
.
Flag
{
L1EthRpcFlag
,
DGF
AddressFlag
,
Factory
AddressFlag
,
TraceTypeFlag
,
AgreeWithProposedOutputFlag
,
}
...
...
@@ -113,6 +119,7 @@ var requiredFlags = []cli.Flag{
// optionalFlags is a list of unchecked cli flags
var
optionalFlags
=
[]
cli
.
Flag
{
AlphabetFlag
,
GameAddressFlag
,
CannonNetworkFlag
,
CannonRollupConfigFlag
,
CannonL2GenesisFlag
,
...
...
@@ -181,10 +188,17 @@ func NewConfigFromCLI(ctx *cli.Context) (*config.Config, error) {
if
err
:=
CheckRequired
(
ctx
);
err
!=
nil
{
return
nil
,
err
}
dgfAddress
,
err
:=
opservice
.
ParseAddress
(
ctx
.
String
(
DGF
AddressFlag
.
Name
))
gameFactoryAddress
,
err
:=
opservice
.
ParseAddress
(
ctx
.
String
(
Factory
AddressFlag
.
Name
))
if
err
!=
nil
{
return
nil
,
err
}
var
gameAddress
common
.
Address
if
ctx
.
IsSet
(
GameAddressFlag
.
Name
)
{
gameAddress
,
err
=
opservice
.
ParseAddress
(
ctx
.
String
(
GameAddressFlag
.
Name
))
if
err
!=
nil
{
return
nil
,
err
}
}
txMgrConfig
:=
txmgr
.
ReadCLIConfig
(
ctx
)
...
...
@@ -194,7 +208,8 @@ func NewConfigFromCLI(ctx *cli.Context) (*config.Config, error) {
// Required Flags
L1EthRpc
:
ctx
.
String
(
L1EthRpcFlag
.
Name
),
TraceType
:
traceTypeFlag
,
GameAddress
:
dgfAddress
,
GameFactoryAddress
:
gameFactoryAddress
,
GameAddress
:
gameAddress
,
AlphabetTrace
:
ctx
.
String
(
AlphabetFlag
.
Name
),
CannonNetwork
:
ctx
.
String
(
CannonNetworkFlag
.
Name
),
CannonRollupConfigPath
:
ctx
.
String
(
CannonRollupConfigFlag
.
Name
),
...
...
op-challenger/scripts/alphabet/charlie.sh
View file @
dade91a8
#!/
bin/
bash
#!/
usr/bin/env
bash
set
-euo
pipefail
SOURCE_DIR
=
$(
cd
$(
dirname
"
${
BASH_SOURCE
[0]
}
"
)
&&
pwd
)
CHALLENGER_DIR
=
$(
echo
${
SOURCE_DIR
%/*/*
}
)
MONOREPO_DIR
=
$(
echo
${
SOURCE_DIR
%/*/*/*
}
)
# Check that the fault game address file exists
FAULT_GAME_ADDR_FILE
=
"
$CHALLENGER_DIR
/.fault-game-address"
...
...
@@ -14,6 +15,7 @@ fi
# Charlie's Address: 0xF45B7537828CB2fffBC69996B054c2Aaf36DC778
CHARLIE_KEY
=
"74feb147d72bfae943e6b4e483410933d9e447d5dc47d52432dcc2c1454dabb7"
DISPUTE_GAME_PROXY
=
$(
jq
-r
.DisputeGameFactoryProxy
$MONOREPO_DIR
/.devnet/addresses.json
)
FAULT_GAME_ADDRESS
=
$(
cat
$FAULT_GAME_ADDR_FILE
)
echo
"Fault dispute game address:
$FAULT_GAME_ADDRESS
"
...
...
@@ -21,6 +23,7 @@ $CHALLENGER_DIR/bin/op-challenger \
--l1-eth-rpc
http://localhost:8545
\
--trace-type
=
"alphabet"
\
--alphabet
"abcdefgh"
\
--game-factory-address
$DISPUTE_GAME_PROXY
\
--game-address
$FAULT_GAME_ADDRESS
\
--private-key
$CHARLIE_KEY
\
--num-confirmations
1
\
...
...
op-challenger/scripts/alphabet/init_game.sh
View file @
dade91a8
#!/
bin/
bash
#!/
usr/bin/env
bash
set
-euo
pipefail
...
...
op-challenger/scripts/alphabet/mallory.sh
View file @
dade91a8
#!/
bin/
bash
#!/
usr/bin/env
bash
set
-euo
pipefail
SOURCE_DIR
=
$(
cd
$(
dirname
"
${
BASH_SOURCE
[0]
}
"
)
&&
pwd
)
CHALLENGER_DIR
=
$(
echo
${
SOURCE_DIR
%/*/*
}
)
MONOREPO_DIR
=
$(
echo
${
SOURCE_DIR
%/*/*/*
}
)
# Check that the fault game address file exists
FAULT_GAME_ADDR_FILE
=
"
$CHALLENGER_DIR
/.fault-game-address"
...
...
@@ -14,6 +15,7 @@ fi
# Mallory's Address: 0x4641c704a6c743f73ee1f36C7568Fbf4b80681e4
MALLORY_KEY
=
"28d7045146193f5f4eeb151c4843544b1b0d30a7ac1680c845a416fac65a7715"
DISPUTE_GAME_PROXY
=
$(
jq
-r
.DisputeGameFactoryProxy
$MONOREPO_DIR
/.devnet/addresses.json
)
FAULT_GAME_ADDRESS
=
$(
cat
$FAULT_GAME_ADDR_FILE
)
echo
"Fault dispute game address:
$FAULT_GAME_ADDRESS
"
...
...
@@ -21,6 +23,7 @@ $CHALLENGER_DIR/bin/op-challenger \
--l1-eth-rpc
http://localhost:8545
\
--trace-type
=
"alphabet"
\
--alphabet
"abcdexyz"
\
--game-factory-address
$DISPUTE_GAME_PROXY
\
--game-address
$FAULT_GAME_ADDRESS
\
--private-key
$MALLORY_KEY
\
--num-confirmations
1
\
...
...
op-challenger/scripts/parallel.sh
View file @
dade91a8
#!/
bin/
bash
#!/
usr/bin/env
bash
# set -x
...
...
op-challenger/scripts/visualize.sh
View file @
dade91a8
#!/
bin/
bash
#!/
usr/bin/env
bash
set
-euo
pipefail
...
...
op-e2e/e2eutils/disputegame/alphabet_helper.go
View file @
dade91a8
...
...
@@ -15,6 +15,7 @@ type AlphabetGameHelper struct {
func
(
g
*
AlphabetGameHelper
)
StartChallenger
(
ctx
context
.
Context
,
l1Endpoint
string
,
name
string
,
options
...
challenger
.
Option
)
*
challenger
.
Helper
{
opts
:=
[]
challenger
.
Option
{
func
(
c
*
config
.
Config
)
{
c
.
GameFactoryAddress
=
g
.
factoryAddr
c
.
GameAddress
=
g
.
addr
c
.
TraceType
=
config
.
TraceTypeAlphabet
// By default the challenger agrees with the root claim (thus disagrees with the proposed output)
...
...
op-e2e/e2eutils/disputegame/cannon_helper.go
View file @
dade91a8
...
...
@@ -24,7 +24,7 @@ type CannonGameHelper struct {
}
func
(
g
*
CannonGameHelper
)
StartChallenger
(
ctx
context
.
Context
,
rollupCfg
*
rollup
.
Config
,
l2Genesis
*
core
.
Genesis
,
l1Endpoint
string
,
l2Endpoint
string
,
name
string
,
options
...
challenger
.
Option
)
*
challenger
.
Helper
{
opts
:=
[]
challenger
.
Option
{
createConfigOption
(
g
.
t
,
rollupCfg
,
l2Genesis
,
g
.
addr
,
l2Endpoint
)}
opts
:=
[]
challenger
.
Option
{
createConfigOption
(
g
.
t
,
rollupCfg
,
l2Genesis
,
g
.
factoryAddr
,
g
.
addr
,
l2Endpoint
)}
opts
=
append
(
opts
,
options
...
)
c
:=
challenger
.
NewChallenger
(
g
.
t
,
ctx
,
l1Endpoint
,
name
,
opts
...
)
g
.
t
.
Cleanup
(
func
()
{
...
...
@@ -34,7 +34,7 @@ func (g *CannonGameHelper) StartChallenger(ctx context.Context, rollupCfg *rollu
}
func
(
g
*
CannonGameHelper
)
CreateHonestActor
(
ctx
context
.
Context
,
rollupCfg
*
rollup
.
Config
,
l2Genesis
*
core
.
Genesis
,
l1Client
bind
.
ContractCaller
,
l1Endpoint
string
,
l2Endpoint
string
,
options
...
challenger
.
Option
)
*
HonestHelper
{
opts
:=
[]
challenger
.
Option
{
createConfigOption
(
g
.
t
,
rollupCfg
,
l2Genesis
,
g
.
addr
,
l2Endpoint
)}
opts
:=
[]
challenger
.
Option
{
createConfigOption
(
g
.
t
,
rollupCfg
,
l2Genesis
,
g
.
factoryAddr
,
g
.
addr
,
l2Endpoint
)}
opts
=
append
(
opts
,
options
...
)
cfg
:=
challenger
.
NewChallengerConfig
(
g
.
t
,
l1Endpoint
,
opts
...
)
provider
,
err
:=
cannon
.
NewTraceProvider
(
ctx
,
testlog
.
Logger
(
g
.
t
,
log
.
LvlInfo
)
.
New
(
"role"
,
"CorrectTrace"
),
cfg
,
l1Client
)
...
...
@@ -48,9 +48,17 @@ func (g *CannonGameHelper) CreateHonestActor(ctx context.Context, rollupCfg *rol
}
}
func
createConfigOption
(
t
*
testing
.
T
,
rollupCfg
*
rollup
.
Config
,
l2Genesis
*
core
.
Genesis
,
gameAddr
common
.
Address
,
l2Endpoint
string
)
challenger
.
Option
{
func
createConfigOption
(
t
*
testing
.
T
,
rollupCfg
*
rollup
.
Config
,
l2Genesis
*
core
.
Genesis
,
factoryAddr
common
.
Address
,
gameAddr
common
.
Address
,
l2Endpoint
string
,
)
challenger
.
Option
{
return
func
(
c
*
config
.
Config
)
{
require
:=
require
.
New
(
t
)
c
.
GameFactoryAddress
=
factoryAddr
c
.
GameAddress
=
gameAddr
c
.
TraceType
=
config
.
TraceTypeCannon
c
.
AgreeWithProposedOutput
=
false
...
...
op-e2e/e2eutils/disputegame/game_helper.go
View file @
dade91a8
...
...
@@ -17,12 +17,13 @@ import (
)
type
FaultGameHelper
struct
{
t
*
testing
.
T
require
*
require
.
Assertions
client
*
ethclient
.
Client
opts
*
bind
.
TransactOpts
game
*
bindings
.
FaultDisputeGame
addr
common
.
Address
t
*
testing
.
T
require
*
require
.
Assertions
client
*
ethclient
.
Client
opts
*
bind
.
TransactOpts
game
*
bindings
.
FaultDisputeGame
factoryAddr
common
.
Address
addr
common
.
Address
}
func
(
g
*
FaultGameHelper
)
GameDuration
(
ctx
context
.
Context
)
time
.
Duration
{
...
...
op-e2e/e2eutils/disputegame/helper.go
View file @
dade91a8
...
...
@@ -119,12 +119,13 @@ func (h *FactoryHelper) StartAlphabetGame(ctx context.Context, claimedAlphabet s
return
&
AlphabetGameHelper
{
FaultGameHelper
:
FaultGameHelper
{
t
:
h
.
t
,
require
:
h
.
require
,
client
:
h
.
client
,
opts
:
h
.
opts
,
game
:
game
,
addr
:
createdEvent
.
DisputeProxy
,
t
:
h
.
t
,
require
:
h
.
require
,
client
:
h
.
client
,
opts
:
h
.
opts
,
game
:
game
,
factoryAddr
:
h
.
factoryAddr
,
addr
:
createdEvent
.
DisputeProxy
,
},
claimedAlphabet
:
claimedAlphabet
,
}
...
...
@@ -137,7 +138,7 @@ func (h *FactoryHelper) StartCannonGame(ctx context.Context, rootClaim common.Ha
func
(
h
*
FactoryHelper
)
StartCannonGameWithCorrectRoot
(
ctx
context
.
Context
,
rollupCfg
*
rollup
.
Config
,
l2Genesis
*
core
.
Genesis
,
l1Endpoint
string
,
l2Endpoint
string
,
options
...
challenger
.
Option
)
(
*
CannonGameHelper
,
*
HonestHelper
)
{
l2BlockNumber
,
l1Head
:=
h
.
prepareCannonGame
(
ctx
)
challengerOpts
:=
[]
challenger
.
Option
{
createConfigOption
(
h
.
t
,
rollupCfg
,
l2Genesis
,
common
.
Address
{
0xaa
},
l2Endpoint
)}
challengerOpts
:=
[]
challenger
.
Option
{
createConfigOption
(
h
.
t
,
rollupCfg
,
l2Genesis
,
h
.
factoryAddr
,
common
.
Address
{
0xaa
},
l2Endpoint
)}
challengerOpts
=
append
(
challengerOpts
,
options
...
)
cfg
:=
challenger
.
NewChallengerConfig
(
h
.
t
,
l1Endpoint
,
challengerOpts
...
)
opts
:=
&
bind
.
CallOpts
{
Context
:
ctx
}
...
...
@@ -200,20 +201,20 @@ func (h *FactoryHelper) createCannonGame(ctx context.Context, l2BlockNumber uint
return
&
CannonGameHelper
{
FaultGameHelper
:
FaultGameHelper
{
t
:
h
.
t
,
require
:
h
.
require
,
client
:
h
.
client
,
opts
:
h
.
opts
,
game
:
game
,
addr
:
createdEvent
.
DisputeProxy
,
t
:
h
.
t
,
require
:
h
.
require
,
client
:
h
.
client
,
opts
:
h
.
opts
,
game
:
game
,
factoryAddr
:
h
.
factoryAddr
,
addr
:
createdEvent
.
DisputeProxy
,
},
}
}
func
(
h
*
FactoryHelper
)
StartChallenger
(
ctx
context
.
Context
,
l1Endpoint
string
,
name
string
,
options
...
challenger
.
Option
)
*
challenger
.
Helper
{
opts
:=
[]
challenger
.
Option
{
func
(
c
*
config
.
Config
)
{
// Uncomment when challenger actually supports setting the game factory address
//c.FactoryAddress = h.factoryAddr
c
.
GameFactoryAddress
=
h
.
factoryAddr
c
.
TraceType
=
config
.
TraceTypeAlphabet
},
}
...
...
op-e2e/system_test.go
View file @
dade91a8
...
...
@@ -34,9 +34,9 @@ import (
"github.com/ethereum-optimism/optimism/op-node/rollup/driver"
"github.com/ethereum-optimism/optimism/op-node/sources"
"github.com/ethereum-optimism/optimism/op-node/testlog"
"github.com/ethereum-optimism/optimism/op-service/backoff"
"github.com/ethereum-optimism/optimism/op-service/eth"
oppprof
"github.com/ethereum-optimism/optimism/op-service/pprof"
"github.com/ethereum-optimism/optimism/op-service/retry"
)
func
TestL2OutputSubmitter
(
t
*
testing
.
T
)
{
...
...
@@ -533,7 +533,7 @@ func TestSystemMockP2P(t *testing.T) {
// poll to see if the verifier node is connected & meshed on gossip.
// Without this verifier, we shouldn't start sending blocks around, or we'll miss them and fail the test.
backOffStrategy
:=
backoff
.
Exponential
()
backOffStrategy
:=
retry
.
Exponential
()
for
i
:=
0
;
i
<
10
;
i
++
{
if
check
()
{
break
...
...
op-node/client/rpc.go
View file @
dade91a8
...
...
@@ -8,7 +8,7 @@ import (
"regexp"
"time"
"github.com/ethereum-optimism/optimism/op-service/
backoff
"
"github.com/ethereum-optimism/optimism/op-service/
retry
"
"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/log"
"github.com/prometheus/client_golang/prometheus"
...
...
@@ -103,8 +103,8 @@ func NewRPC(ctx context.Context, lgr log.Logger, addr string, opts ...RPCOption)
// Dials a JSON-RPC endpoint repeatedly, with a backoff, until a client connection is established. Auth is optional.
func
dialRPCClientWithBackoff
(
ctx
context
.
Context
,
log
log
.
Logger
,
addr
string
,
attempts
int
,
opts
...
rpc
.
ClientOption
)
(
*
rpc
.
Client
,
error
)
{
bOff
:=
backoff
.
Exponential
()
return
backoff
.
Do
(
ctx
,
attempts
,
bOff
,
func
()
(
*
rpc
.
Client
,
error
)
{
bOff
:=
retry
.
Exponential
()
return
retry
.
Do
(
ctx
,
attempts
,
bOff
,
func
()
(
*
rpc
.
Client
,
error
)
{
if
!
IsURLAvailable
(
addr
)
{
log
.
Warn
(
"failed to dial address, but may connect later"
,
"addr"
,
addr
)
return
nil
,
fmt
.
Errorf
(
"address unavailable (%s)"
,
addr
)
...
...
op-node/cmd/batch_decoder/script.sh
0 → 100755
View file @
dade91a8
echo
$1
jq
'.frames[] | {timestamp, inclusion_block}'
$1
jq
'.batches[]|.Timestamp'
$1
op-node/rollup/driver/state.go
View file @
dade91a8
...
...
@@ -15,8 +15,8 @@ import (
"github.com/ethereum-optimism/optimism/op-node/rollup"
"github.com/ethereum-optimism/optimism/op-node/rollup/derive"
"github.com/ethereum-optimism/optimism/op-service/backoff"
"github.com/ethereum-optimism/optimism/op-service/eth"
"github.com/ethereum-optimism/optimism/op-service/retry"
)
// Deprecated: use eth.SyncStatus instead.
...
...
@@ -178,7 +178,7 @@ func (s *Driver) eventLoop() {
var
delayedStepReq
<-
chan
time
.
Time
// keep track of consecutive failed attempts, to adjust the backoff time accordingly
bOffStrategy
:=
backoff
.
Exponential
()
bOffStrategy
:=
retry
.
Exponential
()
stepAttempts
:=
0
// step requests a derivation step to be taken. Won't deadlock if the channel is full.
...
...
op-node/sources/sync_client.go
View file @
dade91a8
...
...
@@ -11,8 +11,8 @@ import (
"github.com/ethereum-optimism/optimism/op-node/client"
"github.com/ethereum-optimism/optimism/op-node/rollup"
"github.com/ethereum-optimism/optimism/op-node/sources/caching"
"github.com/ethereum-optimism/optimism/op-service/backoff"
"github.com/ethereum-optimism/optimism/op-service/eth"
"github.com/ethereum-optimism/optimism/op-service/retry"
"github.com/ethereum/go-ethereum/log"
"github.com/libp2p/go-libp2p/core/peer"
...
...
@@ -130,10 +130,10 @@ func (s *SyncClient) eventLoop() {
defer
s
.
wg
.
Done
()
s
.
log
.
Info
(
"Starting sync client event loop"
)
backoffStrategy
:=
&
backoff
.
ExponentialStrategy
{
Min
:
1000
,
Max
:
20
_000
,
MaxJitter
:
250
,
backoffStrategy
:=
&
retry
.
ExponentialStrategy
{
Min
:
1000
*
time
.
Millisecond
,
Max
:
20
_000
*
time
.
Millisecond
,
MaxJitter
:
250
*
time
.
Millisecond
,
}
for
{
...
...
@@ -142,7 +142,7 @@ func (s *SyncClient) eventLoop() {
s
.
log
.
Debug
(
"Shutting down RPC sync worker"
)
return
case
reqNum
:=
<-
s
.
requests
:
_
,
err
:=
backoff
.
Do
(
s
.
resCtx
,
5
,
backoffStrategy
,
func
()
(
interface
{},
error
)
{
_
,
err
:=
retry
.
Do
(
s
.
resCtx
,
5
,
backoffStrategy
,
func
()
(
interface
{},
error
)
{
// Limit the maximum time for fetching payloads
ctx
,
cancel
:=
context
.
WithTimeout
(
s
.
resCtx
,
time
.
Second
*
10
)
defer
cancel
()
...
...
op-program/host/prefetcher/retry.go
View file @
dade91a8
...
...
@@ -4,8 +4,8 @@ import (
"context"
"math"
"github.com/ethereum-optimism/optimism/op-service/backoff"
"github.com/ethereum-optimism/optimism/op-service/eth"
"github.com/ethereum-optimism/optimism/op-service/retry"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/log"
...
...
@@ -16,19 +16,19 @@ const maxAttempts = math.MaxInt // Succeed or die trying
type
RetryingL1Source
struct
{
logger
log
.
Logger
source
L1Source
strategy
backoff
.
Strategy
strategy
retry
.
Strategy
}
func
NewRetryingL1Source
(
logger
log
.
Logger
,
source
L1Source
)
*
RetryingL1Source
{
return
&
RetryingL1Source
{
logger
:
logger
,
source
:
source
,
strategy
:
backoff
.
Exponential
(),
strategy
:
retry
.
Exponential
(),
}
}
func
(
s
*
RetryingL1Source
)
InfoByHash
(
ctx
context
.
Context
,
blockHash
common
.
Hash
)
(
eth
.
BlockInfo
,
error
)
{
return
backoff
.
Do
(
ctx
,
maxAttempts
,
s
.
strategy
,
func
()
(
eth
.
BlockInfo
,
error
)
{
return
retry
.
Do
(
ctx
,
maxAttempts
,
s
.
strategy
,
func
()
(
eth
.
BlockInfo
,
error
)
{
res
,
err
:=
s
.
source
.
InfoByHash
(
ctx
,
blockHash
)
if
err
!=
nil
{
s
.
logger
.
Warn
(
"Failed to retrieve info"
,
"hash"
,
blockHash
,
"err"
,
err
)
...
...
@@ -38,7 +38,7 @@ func (s *RetryingL1Source) InfoByHash(ctx context.Context, blockHash common.Hash
}
func
(
s
*
RetryingL1Source
)
InfoAndTxsByHash
(
ctx
context
.
Context
,
blockHash
common
.
Hash
)
(
eth
.
BlockInfo
,
types
.
Transactions
,
error
)
{
return
backoff
.
Do2
(
ctx
,
maxAttempts
,
s
.
strategy
,
func
()
(
eth
.
BlockInfo
,
types
.
Transactions
,
error
)
{
return
retry
.
Do2
(
ctx
,
maxAttempts
,
s
.
strategy
,
func
()
(
eth
.
BlockInfo
,
types
.
Transactions
,
error
)
{
i
,
t
,
err
:=
s
.
source
.
InfoAndTxsByHash
(
ctx
,
blockHash
)
if
err
!=
nil
{
s
.
logger
.
Warn
(
"Failed to retrieve l1 info and txs"
,
"hash"
,
blockHash
,
"err"
,
err
)
...
...
@@ -48,7 +48,7 @@ func (s *RetryingL1Source) InfoAndTxsByHash(ctx context.Context, blockHash commo
}
func
(
s
*
RetryingL1Source
)
FetchReceipts
(
ctx
context
.
Context
,
blockHash
common
.
Hash
)
(
eth
.
BlockInfo
,
types
.
Receipts
,
error
)
{
return
backoff
.
Do2
(
ctx
,
maxAttempts
,
s
.
strategy
,
func
()
(
eth
.
BlockInfo
,
types
.
Receipts
,
error
)
{
return
retry
.
Do2
(
ctx
,
maxAttempts
,
s
.
strategy
,
func
()
(
eth
.
BlockInfo
,
types
.
Receipts
,
error
)
{
i
,
r
,
err
:=
s
.
source
.
FetchReceipts
(
ctx
,
blockHash
)
if
err
!=
nil
{
s
.
logger
.
Warn
(
"Failed to fetch receipts"
,
"hash"
,
blockHash
,
"err"
,
err
)
...
...
@@ -62,11 +62,11 @@ var _ L1Source = (*RetryingL1Source)(nil)
type
RetryingL2Source
struct
{
logger
log
.
Logger
source
L2Source
strategy
backoff
.
Strategy
strategy
retry
.
Strategy
}
func
(
s
*
RetryingL2Source
)
InfoAndTxsByHash
(
ctx
context
.
Context
,
blockHash
common
.
Hash
)
(
eth
.
BlockInfo
,
types
.
Transactions
,
error
)
{
return
backoff
.
Do2
(
ctx
,
maxAttempts
,
s
.
strategy
,
func
()
(
eth
.
BlockInfo
,
types
.
Transactions
,
error
)
{
return
retry
.
Do2
(
ctx
,
maxAttempts
,
s
.
strategy
,
func
()
(
eth
.
BlockInfo
,
types
.
Transactions
,
error
)
{
i
,
t
,
err
:=
s
.
source
.
InfoAndTxsByHash
(
ctx
,
blockHash
)
if
err
!=
nil
{
s
.
logger
.
Warn
(
"Failed to retrieve l2 info and txs"
,
"hash"
,
blockHash
,
"err"
,
err
)
...
...
@@ -76,7 +76,7 @@ func (s *RetryingL2Source) InfoAndTxsByHash(ctx context.Context, blockHash commo
}
func
(
s
*
RetryingL2Source
)
NodeByHash
(
ctx
context
.
Context
,
hash
common
.
Hash
)
([]
byte
,
error
)
{
return
backoff
.
Do
(
ctx
,
maxAttempts
,
s
.
strategy
,
func
()
([]
byte
,
error
)
{
return
retry
.
Do
(
ctx
,
maxAttempts
,
s
.
strategy
,
func
()
([]
byte
,
error
)
{
n
,
err
:=
s
.
source
.
NodeByHash
(
ctx
,
hash
)
if
err
!=
nil
{
s
.
logger
.
Warn
(
"Failed to retrieve node"
,
"hash"
,
hash
,
"err"
,
err
)
...
...
@@ -86,7 +86,7 @@ func (s *RetryingL2Source) NodeByHash(ctx context.Context, hash common.Hash) ([]
}
func
(
s
*
RetryingL2Source
)
CodeByHash
(
ctx
context
.
Context
,
hash
common
.
Hash
)
([]
byte
,
error
)
{
return
backoff
.
Do
(
ctx
,
maxAttempts
,
s
.
strategy
,
func
()
([]
byte
,
error
)
{
return
retry
.
Do
(
ctx
,
maxAttempts
,
s
.
strategy
,
func
()
([]
byte
,
error
)
{
c
,
err
:=
s
.
source
.
CodeByHash
(
ctx
,
hash
)
if
err
!=
nil
{
s
.
logger
.
Warn
(
"Failed to retrieve code"
,
"hash"
,
hash
,
"err"
,
err
)
...
...
@@ -96,7 +96,7 @@ func (s *RetryingL2Source) CodeByHash(ctx context.Context, hash common.Hash) ([]
}
func
(
s
*
RetryingL2Source
)
OutputByRoot
(
ctx
context
.
Context
,
root
common
.
Hash
)
(
eth
.
Output
,
error
)
{
return
backoff
.
Do
(
ctx
,
maxAttempts
,
s
.
strategy
,
func
()
(
eth
.
Output
,
error
)
{
return
retry
.
Do
(
ctx
,
maxAttempts
,
s
.
strategy
,
func
()
(
eth
.
Output
,
error
)
{
o
,
err
:=
s
.
source
.
OutputByRoot
(
ctx
,
root
)
if
err
!=
nil
{
s
.
logger
.
Warn
(
"Failed to fetch l2 output"
,
"root"
,
root
,
"err"
,
err
)
...
...
@@ -110,7 +110,7 @@ func NewRetryingL2Source(logger log.Logger, source L2Source) *RetryingL2Source {
return
&
RetryingL2Source
{
logger
:
logger
,
source
:
source
,
strategy
:
backoff
.
Exponential
(),
strategy
:
retry
.
Exponential
(),
}
}
...
...
op-program/host/prefetcher/retry_test.go
View file @
dade91a8
...
...
@@ -7,8 +7,8 @@ import (
"github.com/ethereum-optimism/optimism/op-node/testlog"
"github.com/ethereum-optimism/optimism/op-node/testutils"
"github.com/ethereum-optimism/optimism/op-service/backoff"
"github.com/ethereum-optimism/optimism/op-service/eth"
"github.com/ethereum-optimism/optimism/op-service/retry"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/log"
...
...
@@ -104,8 +104,8 @@ func createL1Source(t *testing.T) (*RetryingL1Source, *testutils.MockL1Source) {
logger
:=
testlog
.
Logger
(
t
,
log
.
LvlDebug
)
mock
:=
&
testutils
.
MockL1Source
{}
source
:=
NewRetryingL1Source
(
logger
,
mock
)
// Avoid sleeping in tests by using a fixed
backoff
strategy with no delay
source
.
strategy
=
backoff
.
Fixed
(
0
)
// Avoid sleeping in tests by using a fixed
retry
strategy with no delay
source
.
strategy
=
retry
.
Fixed
(
0
)
return
source
,
mock
}
...
...
@@ -217,8 +217,8 @@ func createL2Source(t *testing.T) (*RetryingL2Source, *MockL2Source) {
logger
:=
testlog
.
Logger
(
t
,
log
.
LvlDebug
)
mock
:=
&
MockL2Source
{}
source
:=
NewRetryingL2Source
(
logger
,
mock
)
// Avoid sleeping in tests by using a fixed
backoff
strategy with no delay
source
.
strategy
=
backoff
.
Fixed
(
0
)
// Avoid sleeping in tests by using a fixed
retry
strategy with no delay
source
.
strategy
=
retry
.
Fixed
(
0
)
return
source
,
mock
}
...
...
op-service/client/dial.go
View file @
dade91a8
...
...
@@ -7,7 +7,7 @@ import (
"github.com/ethereum-optimism/optimism/op-node/client"
"github.com/ethereum-optimism/optimism/op-node/sources"
"github.com/ethereum-optimism/optimism/op-service/
backoff
"
"github.com/ethereum-optimism/optimism/op-service/
retry
"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/rpc"
...
...
@@ -49,8 +49,8 @@ func DialRollupClientWithTimeout(timeout time.Duration, log log.Logger, url stri
// Dials a JSON-RPC endpoint repeatedly, with a backoff, until a client connection is established. Auth is optional.
func
dialRPCClientWithBackoff
(
ctx
context
.
Context
,
log
log
.
Logger
,
addr
string
)
(
*
rpc
.
Client
,
error
)
{
bOff
:=
backoff
.
Fixed
(
defaultRetryTime
)
return
backoff
.
Do
(
ctx
,
defaultRetryCount
,
bOff
,
func
()
(
*
rpc
.
Client
,
error
)
{
bOff
:=
retry
.
Fixed
(
defaultRetryTime
)
return
retry
.
Do
(
ctx
,
defaultRetryCount
,
bOff
,
func
()
(
*
rpc
.
Client
,
error
)
{
if
!
client
.
IsURLAvailable
(
addr
)
{
log
.
Warn
(
"failed to dial address, but may connect later"
,
"addr"
,
addr
)
return
nil
,
fmt
.
Errorf
(
"address unavailable (%s)"
,
addr
)
...
...
op-service/
backoff
/operation.go
→
op-service/
retry
/operation.go
View file @
dade91a8
package
backoff
package
retry
import
(
"context"
...
...
op-service/
backoff
/operation_test.go
→
op-service/
retry
/operation_test.go
View file @
dade91a8
package
backoff
package
retry
import
(
"context"
...
...
op-service/
backoff
/strategies.go
→
op-service/
retry
/strategies.go
View file @
dade91a8
package
backoff
package
retry
import
(
"math"
...
...
@@ -16,35 +16,34 @@ type Strategy interface {
// ExponentialStrategy performs exponential backoff. The exponential backoff
// function is min(e.Min + (2^attempt * 1000) + randBetween(0, e.MaxJitter), e.Max)
type
ExponentialStrategy
struct
{
// Min is the minimum amount of time to wait between attempts
in ms
.
Min
float64
// Min is the minimum amount of time to wait between attempts.
Min
time
.
Duration
// Max is the maximum amount of time to wait between attempts
in ms
.
Max
float64
// Max is the maximum amount of time to wait between attempts.
Max
time
.
Duration
// MaxJitter is the maximum amount of random jitter to insert between
// attempts in ms.
MaxJitter
int
// MaxJitter is the maximum amount of random jitter to insert between attempts.
MaxJitter
time
.
Duration
}
func
(
e
*
ExponentialStrategy
)
Duration
(
attempt
int
)
time
.
Duration
{
var
jitter
int
var
jitter
time
.
Duration
if
e
.
MaxJitter
>
0
{
jitter
=
rand
.
Intn
(
e
.
MaxJitter
)
jitter
=
time
.
Duration
(
rand
.
Int63n
(
e
.
MaxJitter
.
Nanoseconds
())
)
}
dur
:=
e
.
Min
+
(
math
.
Pow
(
2
,
float64
(
attempt
))
*
1000
)
dur
+=
float64
(
jitter
)
dur
:=
e
.
Min
+
time
.
Duration
(
int
(
math
.
Pow
(
2
,
float64
(
attempt
))
*
1000
))
*
time
.
Millisecond
dur
+=
jitter
if
dur
>
e
.
Max
{
return
time
.
Millisecond
*
time
.
Duration
(
e
.
Max
)
return
e
.
Max
}
return
time
.
Millisecond
*
time
.
Duration
(
dur
)
return
dur
}
func
Exponential
()
Strategy
{
return
&
ExponentialStrategy
{
Max
:
10000
,
MaxJitter
:
250
,
Max
:
time
.
Duration
(
10000
*
time
.
Millisecond
)
,
MaxJitter
:
time
.
Duration
(
250
*
time
.
Millisecond
)
,
}
}
...
...
op-service/
backoff
/strategies_test.go
→
op-service/
retry
/strategies_test.go
View file @
dade91a8
package
backoff
package
retry
import
(
"testing"
...
...
@@ -9,13 +9,13 @@ import (
func
TestExponential
(
t
*
testing
.
T
)
{
strategy
:=
&
ExponentialStrategy
{
Min
:
3000
,
Max
:
10000
,
Min
:
3000
*
time
.
Millisecond
,
Max
:
10000
*
time
.
Millisecond
,
MaxJitter
:
0
,
}
durations
:=
[]
int
{
4
,
5
,
7
,
10
,
10
}
durations
:=
[]
time
.
Duration
{
4
,
5
,
7
,
10
,
10
}
for
i
,
dur
:=
range
durations
{
require
.
Equal
(
t
,
time
.
Millisecond
*
time
.
Duration
(
dur
*
1000
)
,
strategy
.
Duration
(
i
))
require
.
Equal
(
t
,
dur
*
time
.
Second
,
strategy
.
Duration
(
i
))
}
}
op-service/txmgr/txmgr.go
View file @
dade91a8
...
...
@@ -17,7 +17,7 @@ import (
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum-optimism/optimism/op-service/
backoff
"
"github.com/ethereum-optimism/optimism/op-service/
retry
"
"github.com/ethereum-optimism/optimism/op-service/txmgr/metrics"
)
...
...
@@ -176,7 +176,7 @@ func (m *SimpleTxManager) send(ctx context.Context, candidate TxCandidate) (*typ
ctx
,
cancel
=
context
.
WithTimeout
(
ctx
,
m
.
cfg
.
TxSendTimeout
)
defer
cancel
()
}
tx
,
err
:=
backoff
.
Do
(
ctx
,
30
,
backoff
.
Fixed
(
2
*
time
.
Second
),
func
()
(
*
types
.
Transaction
,
error
)
{
tx
,
err
:=
retry
.
Do
(
ctx
,
30
,
retry
.
Fixed
(
2
*
time
.
Second
),
func
()
(
*
types
.
Transaction
,
error
)
{
tx
,
err
:=
m
.
craftTx
(
ctx
,
candidate
)
if
err
!=
nil
{
m
.
l
.
Warn
(
"Failed to create a transaction, will retry"
,
"err"
,
err
)
...
...
packages/common-ts/package.json
View file @
dade91a8
...
...
@@ -46,7 +46,7 @@
"express-prom-bundle"
:
"^6.4.1"
,
"lodash"
:
"^4.17.21"
,
"morgan"
:
"^1.10.0"
,
"pino"
:
"^
6.11.3
"
,
"pino"
:
"^
8.15.0
"
,
"pino-multi-stream"
:
"^5.3.0"
,
"pino-sentry"
:
"^0.14.0"
,
"prom-client"
:
"^13.1.0"
...
...
packages/common-ts/src/common/logger.ts
View file @
dade91a8
...
...
@@ -11,7 +11,7 @@ export const logLevels = [
'
error
'
,
'
fatal
'
,
]
as
const
export
type
LogLevel
=
typeof
logLevels
[
number
]
export
type
LogLevel
=
(
typeof
logLevels
)
[
number
]
export
interface
LoggerOptions
{
name
:
string
...
...
packages/contracts-bedrock/scripts/slither.sh
View file @
dade91a8
#!/
bin/
bash
#!/
usr/bin/env
bash
rm
-rf
artifacts forge-artifacts
...
...
packages/contracts-bedrock/scripts/verify-foundry-install.sh
View file @
dade91a8
#!/
bin/
bash
#!/
usr/bin/env
bash
if
!
command
-v
forge &> /dev/null
then
...
...
packages/sdk/.depcheckrc
View file @
dade91a8
...
...
@@ -12,6 +12,7 @@ ignores: [
"chai",
"ts-node",
"typedoc",
"typescript",
"ethereum-waffle",
"nyc"
]
packages/sdk/package.json
View file @
dade91a8
...
...
@@ -41,30 +41,31 @@
"@ethersproject/transactions"
:
"^5.7.0"
,
"@nomiclabs/hardhat-ethers"
:
"^2.0.2"
,
"@nomiclabs/hardhat-waffle"
:
"^2.0.1"
,
"@types/chai"
:
"^4.3.5"
,
"@types/chai-as-promised"
:
"^7.1.5"
,
"@types/mocha"
:
"^10.0.1"
,
"@types/node"
:
"^20.5.0"
,
"chai-as-promised"
:
"^7.1.1"
,
"ethereum-waffle"
:
"^4.0.10"
,
"ethers"
:
"^5.7.
0
"
,
"ethers"
:
"^5.7.
2
"
,
"hardhat"
:
"^2.9.6"
,
"hardhat-deploy"
:
"^0.11.4"
,
"isomorphic-fetch"
:
"^3.0.0"
,
"mocha"
:
"^10.
0
.0"
,
"mocha"
:
"^10.
2
.0"
,
"nyc"
:
"^15.1.0"
,
"ts-node"
:
"^10.9.1"
,
"typedoc"
:
"^0.22.13"
,
"viem"
:
"^0.3.30"
,
"vitest"
:
"^0.28.3"
,
"zod"
:
"^3.11.6"
"typedoc"
:
"^0.24.8"
,
"typescript"
:
"^5.1.6"
,
"viem"
:
"^1.6.0"
,
"vitest"
:
"^0.34.2"
,
"zod"
:
"^3.22.1"
},
"dependencies"
:
{
"@eth-optimism/contracts"
:
"0.6.0"
,
"@eth-optimism/contracts-bedrock"
:
"0.16.0"
,
"@eth-optimism/core-utils"
:
"0.12.3"
,
"@types/chai"
:
"^4.2.18"
,
"@types/chai-as-promised"
:
"^7.1.4"
,
"@types/mocha"
:
"^10.0.1"
,
"@types/node"
:
"^20.5.0"
,
"@eth-optimism/contracts-bedrock"
:
"workspace:*"
,
"@eth-optimism/core-utils"
:
"workspace:*"
,
"lodash"
:
"^4.17.21"
,
"merkletreejs"
:
"^0.
2.27
"
,
"merkletreejs"
:
"^0.
3.10
"
,
"rlp"
:
"^2.2.7"
},
"peerDependencies"
:
{
...
...
packages/web3js-plugin/CHANGELOG.md
View file @
dade91a8
# @eth-optimism/web3.js-plugin
## 0.1.2
### Patch Changes
-
[
#6873
](
https://github.com/ethereum-optimism/optimism/pull/6873
)
[
`fdab6caa7`
]
(https://github.com/ethereum-optimism/optimism/commit/fdab6caa7e6684b08882d2a766ccd727068c2b2f) Thanks
[
@spacesailor24
](
https://github.com/spacesailor24
)
! - Update code exmaples in README
## 0.1.1
### Patch Changes
...
...
packages/web3js-plugin/README.md
View file @
dade91a8
...
...
@@ -28,10 +28,10 @@ yarn add @eth-optimism/web3.js-plugin
```
typescript
import
Web3
from
'
web3
'
import
OptimismFeeEstimationPlugin
from
'
@eth-optimism/web3.js-plugin
'
import
{
OptimismPlugin
}
from
'
@eth-optimism/web3.js-plugin
'
const
web3
=
new
Web3
(
'
http://yourProvider.com
'
)
web3
.
registerPlugin
(
new
Optimism
FeeEstimation
Plugin
())
web3
.
registerPlugin
(
new
OptimismPlugin
())
```
You will now have access to the following functions under the
`op`
namespace, i.e.
`web3.op.someMethod`
...
...
@@ -76,12 +76,15 @@ async estimateFees(transaction: Transaction, returnFormat?: ReturnFormat)
```
typescript
import
Web3
from
'
web3
'
import
{
OptimismPlugin
}
from
'
@eth-optimism/web3.js-plugin
'
import
{
l2StandardBridgeABI
,
l2StandardBridgeAddress
,
}
from
'
@eth-optimism/contracts-ts
'
const
web3
=
new
Web3
(
'
https://mainnet.optimism.io
'
)
web3
.
registerPlugin
(
new
OptimismPlugin
())
const
l2BridgeContract
=
new
web3
.
eth
.
Contract
(
l2StandardBridgeABI
,
optimistAddress
[
420
]
...
...
@@ -117,12 +120,15 @@ console.log(totalFee) // 26608988767659n
```
typescript
import
Web3
from
'
web3
'
import
{
OptimismPlugin
}
from
'
@eth-optimism/web3.js-plugin
'
import
{
l2StandardBridgeABI
,
l2StandardBridgeAddress
,
}
from
'
@eth-optimism/contracts-ts
'
const
web3
=
new
Web3
(
'
https://mainnet.optimism.io
'
)
web3
.
registerPlugin
(
new
OptimismPlugin
())
const
l2BridgeContract
=
new
web3
.
eth
.
Contract
(
l2StandardBridgeABI
,
optimistAddress
[
420
]
...
...
packages/web3js-plugin/package.json
View file @
dade91a8
{
"name"
:
"@eth-optimism/web3.js-plugin"
,
"version"
:
"0.1.
1
"
,
"version"
:
"0.1.
2
"
,
"description"
:
"A Web3.js plugin for doing OP-Chain gas estimation"
,
"license"
:
"MIT"
,
"repository"
:
{
...
...
pnpm-lock.yaml
View file @
dade91a8
...
...
@@ -77,7 +77,7 @@ importers:
version
:
1.2.3(eslint@8.47.0)
eslint-plugin-prettier
:
specifier
:
^4.0.0
version
:
4.0.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.8.
1
)
version
:
4.0.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.8.
8
)
eslint-plugin-promise
:
specifier
:
^5.1.0
version
:
5.2.0(eslint@8.47.0)
...
...
@@ -119,10 +119,10 @@ importers:
version
:
6.4.7
prettier
:
specifier
:
^2.8.0
version
:
2.8.
1
version
:
2.8.
8
prettier-plugin-solidity
:
specifier
:
^1.0.0-beta.13
version
:
1.0.0-beta.18(prettier@2.8.
1
)
version
:
1.0.0-beta.18(prettier@2.8.
8
)
rimraf
:
specifier
:
^5.0.1
version
:
5.0.1
...
...
@@ -228,8 +228,8 @@ importers:
specifier
:
^1.10.0
version
:
1.10.0
pino
:
specifier
:
^
6.11.3
version
:
6.13.1
specifier
:
^
8.15.0
version
:
8.15.0
pino-multi-stream
:
specifier
:
^5.3.0
version
:
5.3.0
...
...
@@ -293,7 +293,7 @@ importers:
version
:
18.2.0(react@18.2.0)
viem
:
specifier
:
^1.3.1
version
:
1.3.1(typescript@5.1.6)
(zod@3.22.0)
version
:
1.3.1(typescript@5.1.6)
wagmi
:
specifier
:
'
>1.0.0'
version
:
1.0.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6)(viem@1.3.1)
...
...
@@ -321,7 +321,7 @@ importers:
version
:
1.3.8(react@18.2.0)(typescript@5.1.6)(viem@1.3.1)
abitype
:
specifier
:
^0.9.3
version
:
0.9.3(typescript@5.1.6)(zod@3.22.
0
)
version
:
0.9.3(typescript@5.1.6)(zod@3.22.
1
)
glob
:
specifier
:
^10.3.3
version
:
10.3.3
...
...
@@ -415,7 +415,7 @@ importers:
version
:
0.34.1(vitest@0.33.0)
abitype
:
specifier
:
^0.9.3
version
:
0.9.3(typescript@5.1.6)(zod@3.22.
0
)
version
:
0.9.3(typescript@5.1.6)(zod@3.22.
1
)
isomorphic-fetch
:
specifier
:
^3.0.0
version
:
3.0.0
...
...
@@ -433,7 +433,7 @@ importers:
version
:
5.1.6
viem
:
specifier
:
^1.3.1
version
:
1.3.1(typescript@5.1.6)
(zod@3.22.0)
version
:
1.3.1(typescript@5.1.6)
vite
:
specifier
:
^4.4.6
version
:
4.4.6(@types/node@12.20.20)
...
...
@@ -445,31 +445,19 @@ importers:
dependencies
:
'
@eth-optimism/contracts'
:
specifier
:
0.6.0
version
:
0.6.0(ethers@5.7.
1
)
version
:
0.6.0(ethers@5.7.
2
)
'
@eth-optimism/contracts-bedrock'
:
specifier
:
0.16.0
specifier
:
workspace:*
version
:
link:../contracts-bedrock
'
@eth-optimism/core-utils'
:
specifier
:
0.12.3
specifier
:
workspace:*
version
:
link:../core-utils
'
@types/chai'
:
specifier
:
^4.2.18
version
:
4.3.5
'
@types/chai-as-promised'
:
specifier
:
^7.1.4
version
:
7.1.5
'
@types/mocha'
:
specifier
:
^10.0.1
version
:
10.0.1
'
@types/node'
:
specifier
:
^20.5.0
version
:
20.5.0
lodash
:
specifier
:
^4.17.21
version
:
4.17.21
merkletreejs
:
specifier
:
^0.
2.27
version
:
0.
2.27
specifier
:
^0.
3.10
version
:
0.
3.10
rlp
:
specifier
:
^2.2.7
version
:
2.2.7
...
...
@@ -485,19 +473,31 @@ importers:
version
:
5.7.0
'
@nomiclabs/hardhat-ethers'
:
specifier
:
^2.0.2
version
:
2.0.2(ethers@5.7.
1
)(hardhat@2.9.6)
version
:
2.0.2(ethers@5.7.
2
)(hardhat@2.9.6)
'
@nomiclabs/hardhat-waffle'
:
specifier
:
^2.0.1
version
:
2.0.1(@nomiclabs/hardhat-ethers@2.0.2)(ethereum-waffle@4.0.10)(ethers@5.7.1)(hardhat@2.9.6)
version
:
2.0.1(@nomiclabs/hardhat-ethers@2.0.2)(ethereum-waffle@4.0.10)(ethers@5.7.2)(hardhat@2.9.6)
'
@types/chai'
:
specifier
:
^4.3.5
version
:
4.3.5
'
@types/chai-as-promised'
:
specifier
:
^7.1.5
version
:
7.1.5
'
@types/mocha'
:
specifier
:
^10.0.1
version
:
10.0.1
'
@types/node'
:
specifier
:
^20.5.0
version
:
20.5.0
chai-as-promised
:
specifier
:
^7.1.1
version
:
7.1.1(chai@4.3.7)
ethereum-waffle
:
specifier
:
^4.0.10
version
:
4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.
1
)(typescript@5.1.6)
version
:
4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.
2
)(typescript@5.1.6)
ethers
:
specifier
:
^5.7.
0
version
:
5.7.
1
specifier
:
^5.7.
2
version
:
5.7.
2
hardhat
:
specifier
:
^2.9.6
version
:
2.9.6(chai@4.3.7)
...
...
@@ -508,8 +508,8 @@ importers:
specifier
:
^3.0.0
version
:
3.0.0
mocha
:
specifier
:
^10.
0
.0
version
:
10.
0
.0
specifier
:
^10.
2
.0
version
:
10.
2
.0
nyc
:
specifier
:
^15.1.0
version
:
15.1.0
...
...
@@ -517,17 +517,20 @@ importers:
specifier
:
^10.9.1
version
:
10.9.1(@types/node@20.5.0)(typescript@5.1.6)
typedoc
:
specifier
:
^0.22.13
version
:
0.22.13(typescript@5.1.6)
specifier
:
^0.24.8
version
:
0.24.8(typescript@5.1.6)
typescript
:
specifier
:
^5.1.6
version
:
5.1.6
viem
:
specifier
:
^
0.3.3
0
version
:
0.3.30(typescript@5.1.6)(zod@3.20.2
)
specifier
:
^
1.6.
0
version
:
1.6.0(typescript@5.1.6)(zod@3.22.1
)
vitest
:
specifier
:
^0.
28.3
version
:
0.
28.3
specifier
:
^0.
34.2
version
:
0.
34.2
zod
:
specifier
:
^3.
11.6
version
:
3.2
0.2
specifier
:
^3.
22.1
version
:
3.2
2.1
packages/web3js-plugin
:
dependencies
:
...
...
@@ -1012,7 +1015,7 @@ packages:
fs-extra
:
7.0.1
lodash.startcase
:
4.4.0
outdent
:
0.5.0
prettier
:
2.8.
1
prettier
:
2.8.
8
resolve-from
:
5.0.0
semver
:
5.7.2
dev
:
false
...
...
@@ -1198,7 +1201,7 @@ packages:
'
@changesets/types'
:
5.2.1
fs-extra
:
7.0.1
human-id
:
1.0.2
prettier
:
2.8.
1
prettier
:
2.8.
8
dev
:
false
/@codechecks/client@0.1.11(typescript@5.1.6)
:
...
...
@@ -1771,7 +1774,7 @@ packages:
resolution
:
{
integrity
:
sha512-n8a9rmlMxl1lWSiC1zHUlr5Qk6qy85nhsmSgpU12El1WY75MOIPknSTQKj+yJhEmrTtI0PViWlKfgviY09pwUg==
}
dev
:
false
/@eth-optimism/contracts@0.6.0(ethers@5.7.
1
)
:
/@eth-optimism/contracts@0.6.0(ethers@5.7.
2
)
:
resolution
:
{
integrity
:
sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==
}
peerDependencies
:
ethers
:
^5
...
...
@@ -1779,7 +1782,7 @@ packages:
'
@eth-optimism/core-utils'
:
0.12.0
'
@ethersproject/abstract-provider'
:
5.7.0
'
@ethersproject/abstract-signer'
:
5.7.0
ethers
:
5.7.
1
ethers
:
5.7.
2
transitivePeerDependencies
:
-
bufferutil
-
utf-8-validate
...
...
@@ -1809,22 +1812,6 @@ packages:
-
utf-8-validate
dev
:
false
/@ethereum-waffle/chai@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(ethers@5.7.1)
:
resolution
:
{
integrity
:
sha512-X5RepE7Dn8KQLFO7HHAAe+KeGaX/by14hn90wePGBhzL54tq4Y8JscZFu+/LCwCl6TnkAAy5ebiMoqJ37sFtWw==
}
engines
:
{
node
:
'
>=10.0'
}
peerDependencies
:
ethers
:
'
*'
dependencies
:
'
@ethereum-waffle/provider'
:
4.0.5(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(ethers@5.7.1)
debug
:
4.3.4(supports-color@8.1.1)
ethers
:
5.7.1
json-bigint
:
1.0.0
transitivePeerDependencies
:
-
'
@ensdomains/ens'
-
'
@ensdomains/resolver'
-
supports-color
dev
:
true
/@ethereum-waffle/chai@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(ethers@5.7.2)
:
resolution
:
{
integrity
:
sha512-X5RepE7Dn8KQLFO7HHAAe+KeGaX/by14hn90wePGBhzL54tq4Y8JscZFu+/LCwCl6TnkAAy5ebiMoqJ37sFtWw==
}
engines
:
{
node
:
'
>=10.0'
}
...
...
@@ -1841,32 +1828,6 @@ packages:
-
supports-color
dev
:
true
/@ethereum-waffle/compiler@4.0.3(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.1)(solc@0.8.15)(typechain@8.3.1)(typescript@5.1.6)
:
resolution
:
{
integrity
:
sha512-5x5U52tSvEVJS6dpCeXXKvRKyf8GICDwiTwUvGD3/WD+DpvgvaoHOL82XqpTSUHgV3bBq6ma5/8gKUJUIAnJCw==
}
engines
:
{
node
:
'
>=10.0'
}
peerDependencies
:
ethers
:
'
*'
solc
:
'
*'
typechain
:
^8.0.0
dependencies
:
'
@resolver-engine/imports'
:
0.3.3
'
@resolver-engine/imports-fs'
:
0.3.3
'
@typechain/ethers-v5'
:
10.2.1(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.1)(typechain@8.3.1)(typescript@5.1.6)
'
@types/mkdirp'
:
0.5.2
'
@types/node-fetch'
:
2.6.4
ethers
:
5.7.1
mkdirp
:
0.5.6
node-fetch
:
2.6.12
solc
:
0.8.15
typechain
:
8.3.1(typescript@5.1.6)
transitivePeerDependencies
:
-
'
@ethersproject/abi'
-
'
@ethersproject/providers'
-
encoding
-
supports-color
-
typescript
dev
:
true
/@ethereum-waffle/compiler@4.0.3(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.2)(solc@0.8.15)(typechain@8.3.1)(typescript@5.1.6)
:
resolution
:
{
integrity
:
sha512-5x5U52tSvEVJS6dpCeXXKvRKyf8GICDwiTwUvGD3/WD+DpvgvaoHOL82XqpTSUHgV3bBq6ma5/8gKUJUIAnJCw==
}
engines
:
{
node
:
'
>=10.0'
}
...
...
@@ -1893,19 +1854,6 @@ packages:
-
typescript
dev
:
true
/@ethereum-waffle/ens@4.0.3(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(ethers@5.7.1)
:
resolution
:
{
integrity
:
sha512-PVLcdnTbaTfCrfSOrvtlA9Fih73EeDvFS28JQnT5M5P4JMplqmchhcZB1yg/fCtx4cvgHlZXa0+rOCAk2Jk0Jw==
}
engines
:
{
node
:
'
>=10.0'
}
peerDependencies
:
'
@ensdomains/ens'
:
^0.4.4
'
@ensdomains/resolver'
:
^0.2.4
ethers
:
'
*'
dependencies
:
'
@ensdomains/ens'
:
0.4.5
'
@ensdomains/resolver'
:
0.2.4
ethers
:
5.7.1
dev
:
true
/@ethereum-waffle/ens@4.0.3(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(ethers@5.7.2)
:
resolution
:
{
integrity
:
sha512-PVLcdnTbaTfCrfSOrvtlA9Fih73EeDvFS28JQnT5M5P4JMplqmchhcZB1yg/fCtx4cvgHlZXa0+rOCAk2Jk0Jw==
}
engines
:
{
node
:
'
>=10.0'
}
...
...
@@ -1919,15 +1867,6 @@ packages:
ethers
:
5.7.2
dev
:
true
/@ethereum-waffle/mock-contract@4.0.4(ethers@5.7.1)
:
resolution
:
{
integrity
:
sha512-LwEj5SIuEe9/gnrXgtqIkWbk2g15imM/qcJcxpLyAkOj981tQxXmtV4XmQMZsdedEsZ/D/rbUAOtZbgwqgUwQA==
}
engines
:
{
node
:
'
>=10.0'
}
peerDependencies
:
ethers
:
'
*'
dependencies
:
ethers
:
5.7.1
dev
:
true
/@ethereum-waffle/mock-contract@4.0.4(ethers@5.7.2)
:
resolution
:
{
integrity
:
sha512-LwEj5SIuEe9/gnrXgtqIkWbk2g15imM/qcJcxpLyAkOj981tQxXmtV4XmQMZsdedEsZ/D/rbUAOtZbgwqgUwQA==
}
engines
:
{
node
:
'
>=10.0'
}
...
...
@@ -1937,23 +1876,6 @@ packages:
ethers
:
5.7.2
dev
:
true
/@ethereum-waffle/provider@4.0.5(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(ethers@5.7.1)
:
resolution
:
{
integrity
:
sha512-40uzfyzcrPh+Gbdzv89JJTMBlZwzya1YLDyim8mVbEqYLP5VRYWoGp0JMyaizgV3hMoUFRqJKVmIUw4v7r3hYw==
}
engines
:
{
node
:
'
>=10.0'
}
peerDependencies
:
ethers
:
'
*'
dependencies
:
'
@ethereum-waffle/ens'
:
4.0.3(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(ethers@5.7.1)
'
@ganache/ethereum-options'
:
0.1.4
debug
:
4.3.4(supports-color@8.1.1)
ethers
:
5.7.1
ganache
:
7.4.3
transitivePeerDependencies
:
-
'
@ensdomains/ens'
-
'
@ensdomains/resolver'
-
supports-color
dev
:
true
/@ethereum-waffle/provider@4.0.5(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(ethers@5.7.2)
:
resolution
:
{
integrity
:
sha512-40uzfyzcrPh+Gbdzv89JJTMBlZwzya1YLDyim8mVbEqYLP5VRYWoGp0JMyaizgV3hMoUFRqJKVmIUw4v7r3hYw==
}
engines
:
{
node
:
'
>=10.0'
}
...
...
@@ -2051,7 +1973,6 @@ packages:
'
@ethereumjs/rlp'
:
4.0.1
ethereum-cryptography
:
2.1.2
micro-ftch
:
0.3.1
dev
:
true
/@ethereumjs/vm@5.6.0
:
resolution
:
{
integrity
:
sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ==
}
...
...
@@ -2272,6 +2193,7 @@ packages:
transitivePeerDependencies
:
-
bufferutil
-
utf-8-validate
dev
:
false
/@ethersproject/providers@5.7.2
:
resolution
:
{
integrity
:
sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==
}
...
...
@@ -2705,7 +2627,7 @@ packages:
/@manypkg/find-root@1.1.0
:
resolution
:
{
integrity
:
sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==
}
dependencies
:
'
@babel/runtime'
:
7.2
0.7
'
@babel/runtime'
:
7.2
2.6
'
@types/node'
:
12.20.55
find-up
:
4.1.0
fs-extra
:
8.1.0
...
...
@@ -2835,13 +2757,13 @@ packages:
'
@nodelib/fs.scandir'
:
2.1.5
fastq
:
1.15.0
/@nomiclabs/hardhat-ethers@2.0.2(ethers@5.7.
1
)(hardhat@2.9.6)
:
/@nomiclabs/hardhat-ethers@2.0.2(ethers@5.7.
2
)(hardhat@2.9.6)
:
resolution
:
{
integrity
:
sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg==
}
peerDependencies
:
ethers
:
^5.0.0
hardhat
:
^2.0.0
dependencies
:
ethers
:
5.7.
1
ethers
:
5.7.
2
hardhat
:
2.9.6(chai@4.3.7)
dev
:
true
...
...
@@ -2855,7 +2777,7 @@ packages:
hardhat
:
2.9.6(chai@4.3.7)
dev
:
true
/@nomiclabs/hardhat-waffle@2.0.1(@nomiclabs/hardhat-ethers@2.0.2)(ethereum-waffle@4.0.10)(ethers@5.7.
1
)(hardhat@2.9.6)
:
/@nomiclabs/hardhat-waffle@2.0.1(@nomiclabs/hardhat-ethers@2.0.2)(ethereum-waffle@4.0.10)(ethers@5.7.
2
)(hardhat@2.9.6)
:
resolution
:
{
integrity
:
sha512-2YR2V5zTiztSH9n8BYWgtv3Q+EL0N5Ltm1PAr5z20uAY4SkkfylJ98CIqt18XFvxTD5x4K2wKBzddjV9ViDAZQ==
}
peerDependencies
:
'
@nomiclabs/hardhat-ethers'
:
^2.0.0
...
...
@@ -2863,11 +2785,11 @@ packages:
ethers
:
^5.0.0
hardhat
:
^2.0.0
dependencies
:
'
@nomiclabs/hardhat-ethers'
:
2.0.2(ethers@5.7.
1
)(hardhat@2.9.6)
'
@nomiclabs/hardhat-ethers'
:
2.0.2(ethers@5.7.
2
)(hardhat@2.9.6)
'
@types/sinon-chai'
:
3.2.5
'
@types/web3'
:
1.0.19
ethereum-waffle
:
4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.
1
)(typescript@5.1.6)
ethers
:
5.7.
1
ethereum-waffle
:
4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.
2
)(typescript@5.1.6)
ethers
:
5.7.
2
hardhat
:
2.9.6(chai@4.3.7)
dev
:
true
...
...
@@ -3312,7 +3234,7 @@ packages:
resolution
:
{
integrity
:
sha512-gYw0ki/EAuV1oSyMxpqandHjnthZjYYy+YWpTAzf8BqfXM3ItcZLpjxfg+3+mXW8HIO+3jw6T9iiqEXsqHaMMw==
}
dependencies
:
'
@safe-global/safe-gateway-typescript-sdk'
:
3.7.3
viem
:
1.6.0(typescript@5.1.6)(zod@3.22.
0
)
viem
:
1.6.0(typescript@5.1.6)(zod@3.22.
1
)
transitivePeerDependencies
:
-
bufferutil
-
encoding
...
...
@@ -3981,24 +3903,6 @@ packages:
minimatch
:
9.0.3
dev
:
true
/@typechain/ethers-v5@10.2.1(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.1)(typechain@8.3.1)(typescript@5.1.6)
:
resolution
:
{
integrity
:
sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==
}
peerDependencies
:
'
@ethersproject/abi'
:
^5.0.0
'
@ethersproject/providers'
:
^5.0.0
ethers
:
^5.1.3
typechain
:
^8.1.1
typescript
:
'
>=4.3.0'
dependencies
:
'
@ethersproject/abi'
:
5.7.0
'
@ethersproject/providers'
:
5.7.2
ethers
:
5.7.1
lodash
:
4.17.21
ts-essentials
:
7.0.3(typescript@5.1.6)
typechain
:
8.3.1(typescript@5.1.6)
typescript
:
5.1.6
dev
:
true
/@typechain/ethers-v5@10.2.1(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.2)(typechain@8.3.1)(typescript@5.1.6)
:
resolution
:
{
integrity
:
sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==
}
peerDependencies
:
...
...
@@ -4048,6 +3952,7 @@ packages:
resolution
:
{
integrity
:
sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==
}
dependencies
:
'
@types/chai'
:
4.3.5
dev
:
true
/@types/chai-subset@1.3.3
:
resolution
:
{
integrity
:
sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==
}
...
...
@@ -4061,6 +3966,7 @@ packages:
/@types/chai@4.3.5
:
resolution
:
{
integrity
:
sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==
}
dev
:
true
/@types/connect@3.4.35
:
resolution
:
{
integrity
:
sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==
}
...
...
@@ -4187,6 +4093,7 @@ packages:
/@types/mocha@10.0.1
:
resolution
:
{
integrity
:
sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==
}
dev
:
true
/@types/morgan@1.9.3
:
resolution
:
{
integrity
:
sha512-BiLcfVqGBZCyNCnCH3F4o2GmDLrpy0HeBVnNlyZG4fo88ZiE9SoiBe3C+2ezuwbjlEyT+PDZ17//TAlRxAn75Q==
}
...
...
@@ -4686,14 +4593,6 @@ packages:
-
supports-color
dev
:
true
/@vitest/expect@0.28.3
:
resolution
:
{
integrity
:
sha512-dnxllhfln88DOvpAK1fuI7/xHwRgTgR4wdxHldPaoTaBu6Rh9zK5b//v/cjTkhOfNP/AJ8evbNO8H7c3biwd1g==
}
dependencies
:
'
@vitest/spy'
:
0.28.3
'
@vitest/utils'
:
0.28.3
chai
:
4.3.7
dev
:
true
/@vitest/expect@0.33.0
:
resolution
:
{
integrity
:
sha512-sVNf+Gla3mhTCxNJx+wJLDPp/WcstOe0Ksqz4Vec51MmgMth/ia0MGFEkIZmVGeTL5HtjYR4Wl/ZxBxBXZJTzQ==
}
dependencies
:
...
...
@@ -4710,12 +4609,12 @@ packages:
chai
:
4.3.7
dev
:
true
/@vitest/
runner@0.28.3
:
resolution
:
{
integrity
:
sha512-
P0qYbATaemy1midOLkw7qf8jraJszCoEvjQOSlseiXZyEDaZTZ50J+lolz2hWiWv6RwDu1iNseL9XLsG0Jm2KQ
==
}
/@vitest/
expect@0.34.2
:
resolution
:
{
integrity
:
sha512-
EZm2dMNlLyIfDMha17QHSQcg2KjeAZaXd65fpPzXY5bvnfx10Lcaz3N55uEe8PhF+w4pw+hmrlHLLlRn9vkBJg
==
}
dependencies
:
'
@vitest/
utils'
:
0.28.3
p-limit
:
4.0.0
pathe
:
1.1.1
'
@vitest/
spy'
:
0.34.2
'
@vitest/utils'
:
0.34.2
chai
:
4.3.7
dev
:
true
/@vitest/runner@0.33.0
:
...
...
@@ -4734,6 +4633,14 @@ packages:
pathe
:
1.1.1
dev
:
true
/@vitest/runner@0.34.2
:
resolution
:
{
integrity
:
sha512-8ydGPACVX5tK3Dl0SUwxfdg02h+togDNeQX3iXVFYgzF5odxvaou7HnquALFZkyVuYskoaHUOqOyOLpOEj5XTA==
}
dependencies
:
'
@vitest/utils'
:
0.34.2
p-limit
:
4.0.0
pathe
:
1.1.1
dev
:
true
/@vitest/snapshot@0.33.0
:
resolution
:
{
integrity
:
sha512-tJjrl//qAHbyHajpFvr8Wsk8DIOODEebTu7pgBrP07iOepR5jYkLFiqLq2Ltxv+r0uptUb4izv1J8XBOwKkVYA==
}
dependencies
:
...
...
@@ -4750,10 +4657,12 @@ packages:
pretty-format
:
29.6.1
dev
:
true
/@vitest/s
py@0.28.3
:
resolution
:
{
integrity
:
sha512-
jULA6suS6CCr9VZfr7/9x97pZ0hC55prnUNHNrg5/q16ARBY38RsjsfhuUXt6QOwvIN3BhSS0QqPzyh5Di8g6w
==
}
/@vitest/s
napshot@0.34.2
:
resolution
:
{
integrity
:
sha512-
qhQ+xy3u4mwwLxltS4Pd4SR+XHv4EajiTPNY3jkIBLUApE6/ce72neJPSUQZ7bL3EBuKI+NhvzhGj3n5baRQUQ
==
}
dependencies
:
tinyspy
:
1.0.2
magic-string
:
0.30.1
pathe
:
1.1.1
pretty-format
:
29.6.1
dev
:
true
/@vitest/spy@0.33.0
:
...
...
@@ -4768,14 +4677,10 @@ packages:
tinyspy
:
2.1.1
dev
:
true
/@vitest/
utils@0.28.3
:
resolution
:
{
integrity
:
sha512-
YHiQEHQqXyIbhDqETOJUKx9/psybF7SFFVCNfOvap0FvyUqbzTSDCa3S5lL4C0CLXkwVZttz9xknDoyHMguFRQ
==
}
/@vitest/
spy@0.34.2
:
resolution
:
{
integrity
:
sha512-
yd4L9OhfH6l0Av7iK3sPb3MykhtcRN5c5K5vm1nTbuN7gYn+yvUVVsyvzpHrjqS7EWqn9WsPJb7+0c3iuY60tA
==
}
dependencies
:
cli-truncate
:
3.1.0
diff
:
5.1.0
loupe
:
2.3.6
picocolors
:
1.0.0
pretty-format
:
27.5.1
tinyspy
:
2.1.1
dev
:
true
/@vitest/utils@0.33.0
:
...
...
@@ -4794,6 +4699,14 @@ packages:
pretty-format
:
29.6.1
dev
:
true
/@vitest/utils@0.34.2
:
resolution
:
{
integrity
:
sha512-Lzw+kAsTPubhoQDp1uVAOP6DhNia1GMDsI9jgB0yMn+/nDaPieYQ88lKqz/gGjSHL4zwOItvpehec9OY+rS73w==
}
dependencies
:
diff-sequences
:
29.4.3
loupe
:
2.3.6
pretty-format
:
29.6.1
dev
:
true
/@vue/compiler-core@3.2.36
:
resolution
:
{
integrity
:
sha512-bbyZM5hvBicv0PW3KUfVi+x3ylHnfKG7DOn5wM+f2OztTzTjLEyBb/5yrarIYpmnGitVGbjZqDbODyW4iK8hqw==
}
dependencies
:
...
...
@@ -4846,17 +4759,6 @@ packages:
resolution
:
{
integrity
:
sha512-JtB41wXl7Au3+Nl3gD16Cfpj7k/6aCroZ6BbOiCMFCMvrOpkg/qQUXTso2XowaNqBbnkuGHurLAqkLBxNGc1hQ==
}
dev
:
true
/@wagmi/chains@0.2.16(typescript@5.1.6)
:
resolution
:
{
integrity
:
sha512-rkWaI2PxCnbD8G07ZZff5QXftnSkYL0h5f4DkHCG3fGYYr/ZDvmCL4bMae7j7A9sAif1csPPBmbCzHp3R5ogCQ==
}
peerDependencies
:
typescript
:
'
>=4.9.4'
peerDependenciesMeta
:
typescript
:
optional
:
true
dependencies
:
typescript
:
5.1.6
dev
:
true
/@wagmi/chains@0.2.22(typescript@5.1.6)
:
resolution
:
{
integrity
:
sha512-TdiOzJT6TO1JrztRNjTA5Quz+UmQlbvWFG8N41u9tta0boHA1JCAzGGvU6KuIcOmJfRJkKOUIt67wlbopCpVHg==
}
peerDependencies
:
...
...
@@ -4958,7 +4860,7 @@ packages:
abitype
:
0.8.1(typescript@5.1.6)
eventemitter3
:
4.0.7
typescript
:
5.1.6
viem
:
1.3.1(typescript@5.1.6)
(zod@3.22.0)
viem
:
1.3.1(typescript@5.1.6)
transitivePeerDependencies
:
-
'
@react-native-async-storage/async-storage'
-
bufferutil
...
...
@@ -4994,7 +4896,7 @@ packages:
abitype
:
0.8.7(typescript@5.1.6)(zod@3.22.0)
eventemitter3
:
4.0.7
typescript
:
5.1.6
viem
:
1.3.1(typescript@5.1.6)
(zod@3.22.0)
viem
:
1.3.1(typescript@5.1.6)
transitivePeerDependencies
:
-
'
@react-native-async-storage/async-storage'
-
bufferutil
...
...
@@ -5020,7 +4922,7 @@ packages:
abitype
:
0.8.1(typescript@5.1.6)
eventemitter3
:
4.0.7
typescript
:
5.1.6
viem
:
1.3.1(typescript@5.1.6)
(zod@3.22.0)
viem
:
1.3.1(typescript@5.1.6)
zustand
:
4.3.9(react@18.2.0)
transitivePeerDependencies
:
-
'
@react-native-async-storage/async-storage'
...
...
@@ -5048,7 +4950,7 @@ packages:
abitype
:
0.8.7(typescript@5.1.6)(zod@3.22.0)
eventemitter3
:
4.0.7
typescript
:
5.1.6
viem
:
1.3.1(typescript@5.1.6)
(zod@3.22.0)
viem
:
1.3.1(typescript@5.1.6)
zustand
:
4.3.9(react@18.2.0)
transitivePeerDependencies
:
-
'
@react-native-async-storage/async-storage'
...
...
@@ -5621,8 +5523,8 @@ packages:
dependencies
:
typescript
:
5.1.6
/abitype@0.8.
2(typescript@5.1.6)(zod@3.20.2
)
:
resolution
:
{
integrity
:
sha512-
B1ViNMGpfx/qjVQi0RTc2HEFHuR9uoCoTEkwELT5Y7pBPtBbctYijz9BK6+Kd0hQ3S70FhYTO2dWWk0QNUEXMA
==
}
/abitype@0.8.
7(typescript@5.1.6)(zod@3.22.0
)
:
resolution
:
{
integrity
:
sha512-
wQ7hV8Yg/yKmGyFpqrNZufCxbszDe5es4AZGYPBitocfSqXtjrTG9JMWFcc4N30ukl2ve48aBTwt7NJxVQdU3w
==
}
peerDependencies
:
typescript
:
'
>=5.0.4'
zod
:
^3 >=3.19.1
...
...
@@ -5631,15 +5533,17 @@ packages:
optional
:
true
dependencies
:
typescript
:
5.1.6
zod
:
3.2
0.2
zod
:
3.2
2.0
dev
:
true
/abitype@0.
8.7
(typescript@5.1.6)(zod@3.22.0)
:
resolution
:
{
integrity
:
sha512-
wQ7hV8Yg/yKmGyFpqrNZufCxbszDe5es4AZGYPBitocfSqXtjrTG9JMWFcc4N30ukl2ve48aBTwt7NJxVQdU3
w==
}
/abitype@0.
9.3
(typescript@5.1.6)(zod@3.22.0)
:
resolution
:
{
integrity
:
sha512-
dz4qCQLurx97FQhnb/EIYTk/ldQ+oafEDUqC0VVIeQS1Q48/YWt/9YNfMmp9SLFqN41ktxny3c8aYxHjmFIB/
w==
}
peerDependencies
:
typescript
:
'
>=5.0.4'
zod
:
^3 >=3.19.1
peerDependenciesMeta
:
typescript
:
optional
:
true
zod
:
optional
:
true
dependencies
:
...
...
@@ -5647,7 +5551,7 @@ packages:
zod
:
3.22.0
dev
:
true
/abitype@0.9.3(typescript@5.1.6)(zod@3.22.
0
)
:
/abitype@0.9.3(typescript@5.1.6)(zod@3.22.
1
)
:
resolution
:
{
integrity
:
sha512-dz4qCQLurx97FQhnb/EIYTk/ldQ+oafEDUqC0VVIeQS1Q48/YWt/9YNfMmp9SLFqN41ktxny3c8aYxHjmFIB/w==
}
peerDependencies
:
typescript
:
'
>=5.0.4'
...
...
@@ -5659,14 +5563,13 @@ packages:
optional
:
true
dependencies
:
typescript
:
5.1.6
zod
:
3.22.
0
zod
:
3.22.
1
/abort-controller@3.0.0
:
resolution
:
{
integrity
:
sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
}
engines
:
{
node
:
'
>=6.5'
}
dependencies
:
event-target-shim
:
5.0.1
dev
:
true
/abstract-leveldown@6.2.3
:
resolution
:
{
integrity
:
sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==
}
...
...
@@ -5729,12 +5632,6 @@ packages:
hasBin
:
true
dev
:
true
/acorn@8.9.0
:
resolution
:
{
integrity
:
sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==
}
engines
:
{
node
:
'
>=0.4.0'
}
hasBin
:
true
dev
:
true
/add-stream@1.0.0
:
resolution
:
{
integrity
:
sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==
}
dev
:
true
...
...
@@ -5825,6 +5722,10 @@ packages:
engines
:
{
node
:
'
>=12'
}
dev
:
true
/ansi-sequence-parser@1.1.1
:
resolution
:
{
integrity
:
sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==
}
dev
:
true
/ansi-styles@3.2.1
:
resolution
:
{
integrity
:
sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
}
engines
:
{
node
:
'
>=4'
}
...
...
@@ -6358,10 +6259,6 @@ packages:
resolution
:
{
integrity
:
sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==
}
dev
:
false
/buffer-to-arraybuffer@0.0.5
:
resolution
:
{
integrity
:
sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==
}
dev
:
false
/buffer-xor@1.0.3
:
resolution
:
{
integrity
:
sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==
}
dev
:
true
...
...
@@ -6753,14 +6650,6 @@ packages:
string-width
:
4.2.3
dev
:
true
/cli-truncate@3.1.0
:
resolution
:
{
integrity
:
sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==
}
engines
:
{
node
:
^12.20.0 || ^14.13.1 || >=16.0.0
}
dependencies
:
slice-ansi
:
5.0.0
string-width
:
5.1.2
dev
:
true
/cli-width@3.0.0
:
resolution
:
{
integrity
:
sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
}
engines
:
{
node
:
'
>=
10'
}
...
...
@@ -7345,13 +7234,6 @@ packages:
resolution
:
{
integrity
:
sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
}
engines
:
{
node
:
'
>=0.10'
}
/decompress-response@3.3.0
:
resolution
:
{
integrity
:
sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==
}
engines
:
{
node
:
'
>=4'
}
dependencies
:
mimic-response
:
1.0.1
dev
:
false
/dedent@0.7.0
:
resolution
:
{
integrity
:
sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==
}
dev
:
true
...
...
@@ -7547,11 +7429,6 @@ packages:
engines
:
{
node
:
'
>=0.3.1'
}
dev
:
true
/diff@5.1.0
:
resolution
:
{
integrity
:
sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==
}
engines
:
{
node
:
'
>=0.3.1'
}
dev
:
true
/dijkstrajs@1.0.3
:
resolution
:
{
integrity
:
sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==
}
...
...
@@ -7600,10 +7477,6 @@ packages:
entities
:
2.2.0
dev
:
true
/dom-walk@0.1.2
:
resolution
:
{
integrity
:
sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==
}
dev
:
false
/domelementtype@2.3.0
:
resolution
:
{
integrity
:
sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
}
dev
:
true
...
...
@@ -8366,7 +8239,7 @@ packages:
eslint
:
8.47.0
dev
:
true
/eslint-plugin-prettier@4.0.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.8.
1
)
:
/eslint-plugin-prettier@4.0.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.8.
8
)
:
resolution
:
{
integrity
:
sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==
}
engines
:
{
node
:
'
>=6.0.0'
}
peerDependencies
:
...
...
@@ -8379,7 +8252,7 @@ packages:
dependencies
:
eslint
:
8.47.0
eslint-config-prettier
:
8.3.0(eslint@8.47.0)
prettier
:
2.8.
1
prettier
:
2.8.
8
prettier-linter-helpers
:
1.0.0
dev
:
true
...
...
@@ -8617,14 +8490,6 @@ packages:
json-rpc-engine
:
6.1.0
pify
:
5.0.0
/eth-lib@0.2.8
:
resolution
:
{
integrity
:
sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==
}
dependencies
:
bn.js
:
4.12.0
elliptic
:
6.5.4
xhr-request-promise
:
0.1.3
dev
:
false
/eth-query@2.1.2
:
resolution
:
{
integrity
:
sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==
}
dependencies
:
...
...
@@ -8669,31 +8534,6 @@ packages:
'
@scure/bip32'
:
1.3.1
'
@scure/bip39'
:
1.2.1
/ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.1)(typescript@5.1.6)
:
resolution
:
{
integrity
:
sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ==
}
engines
:
{
node
:
'
>=10.0'
}
hasBin
:
true
peerDependencies
:
ethers
:
'
*'
dependencies
:
'
@ethereum-waffle/chai'
:
4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(ethers@5.7.1)
'
@ethereum-waffle/compiler'
:
4.0.3(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.1)(solc@0.8.15)(typechain@8.3.1)(typescript@5.1.6)
'
@ethereum-waffle/mock-contract'
:
4.0.4(ethers@5.7.1)
'
@ethereum-waffle/provider'
:
4.0.5(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(ethers@5.7.1)
ethers
:
5.7.1
solc
:
0.8.15
typechain
:
8.3.1(typescript@5.1.6)
transitivePeerDependencies
:
-
'
@ensdomains/ens'
-
'
@ensdomains/resolver'
-
'
@ethersproject/abi'
-
'
@ethersproject/providers'
-
debug
-
encoding
-
supports-color
-
typescript
dev
:
true
/ethereum-waffle@4.0.10(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.2)(typescript@5.1.6)
:
resolution
:
{
integrity
:
sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ==
}
engines
:
{
node
:
'
>=10.0'
}
...
...
@@ -8796,6 +8636,7 @@ packages:
transitivePeerDependencies
:
-
bufferutil
-
utf-8-validate
dev
:
false
/ethers@5.7.2
:
resolution
:
{
integrity
:
sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==
}
...
...
@@ -8852,7 +8693,6 @@ packages:
/event-target-shim@5.0.1
:
resolution
:
{
integrity
:
sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
}
engines
:
{
node
:
'
>=6'
}
dev
:
true
/eventemitter3@4.0.7
:
resolution
:
{
integrity
:
sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
}
...
...
@@ -9053,11 +8893,6 @@ packages:
resolution
:
{
integrity
:
sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
}
dev
:
true
/fast-redact@3.0.1
:
resolution
:
{
integrity
:
sha512-kYpn4Y/valC9MdrISg47tZOpYBNoTXKgT9GYXFpHN/jYFs+lFkPoisY+LcBODdKVMY96ATzvzsWv+ES/4Kmufw==
}
engines
:
{
node
:
'
>=6'
}
dev
:
false
/fast-redact@3.2.0
:
resolution
:
{
integrity
:
sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==
}
engines
:
{
node
:
'
>=6'
}
...
...
@@ -9712,13 +9547,6 @@ packages:
path-scurry
:
1.10.1
dev
:
true
/global@4.4.0
:
resolution
:
{
integrity
:
sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==
}
dependencies
:
min-document
:
2.19.0
process
:
0.11.10
dev
:
false
/globals@11.12.0
:
resolution
:
{
integrity
:
sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
}
engines
:
{
node
:
'
>=4'
}
...
...
@@ -10424,15 +10252,6 @@ packages:
resolution
:
{
integrity
:
sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
}
engines
:
{
node
:
'
>=8'
}
/is-fullwidth-code-point@4.0.0
:
resolution
:
{
integrity
:
sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==
}
engines
:
{
node
:
'
>=12'
}
dev
:
true
/is-function@1.0.2
:
resolution
:
{
integrity
:
sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==
}
dev
:
false
/is-generator-function@1.0.10
:
resolution
:
{
integrity
:
sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==
}
engines
:
{
node
:
'
>=
0.4'
}
...
...
@@ -11830,8 +11649,8 @@ packages:
hasBin
:
true
dev
:
false
/marked@4.
0.12
:
resolution
:
{
integrity
:
sha512-
hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ
==
}
/marked@4.
3.0
:
resolution
:
{
integrity
:
sha512-
PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A
==
}
engines
:
{
node
:
'
>=
12'
}
hasBin
:
true
dev
:
true
...
...
@@ -12029,15 +11848,15 @@ packages:
semaphore-async-await
:
1.5.1
dev
:
true
/merkletreejs@0.
2.27
:
resolution
:
{
integrity
:
sha512-
6fPGBdfbDyTiprK5JBBAxg+0u33xI3UM8EOeIz7Zy+5czuXH8vOhLMK1hMZFWPdCNgETWkpj+GOMKKhKZPOvaQ
==
}
/merkletreejs@0.
3.10
:
resolution
:
{
integrity
:
sha512-
lin42tKfRdkW+6iE5pjtQ9BnH+1Hk3sJ5Fn9hUUSjcXRcJbSISHgPCfYvMNEXiNqZPhz/TyRPEV30qgnujsQ7A
==
}
engines
:
{
node
:
'
>=
7.6.0'
}
dependencies
:
bignumber.js
:
9.0.1
buffer-reverse
:
1.0.1
crypto-js
:
3.3.0
treeify
:
1.1.0
web3-utils
:
1.
5.2
web3-utils
:
1.
10.1
dev
:
false
/methods@1.1.2
:
...
...
@@ -12046,7 +11865,6 @@ packages:
/micro-ftch@0.3.1
:
resolution
:
{
integrity
:
sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==
}
dev
:
true
/micromark-extension-footnote@0.3.2
:
resolution
:
{
integrity
:
sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==
}
...
...
@@ -12175,17 +11993,6 @@ packages:
engines
:
{
node
:
'
>=12'
}
dev
:
true
/mimic-response@1.0.1
:
resolution
:
{
integrity
:
sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
}
engines
:
{
node
:
'
>=4'
}
dev
:
false
/min-document@2.19.0
:
resolution
:
{
integrity
:
sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==
}
dependencies
:
dom-walk
:
0.1.2
dev
:
false
/min-indent@1.0.1
:
resolution
:
{
integrity
:
sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
}
engines
:
{
node
:
'
>=4'
}
...
...
@@ -12378,35 +12185,6 @@ packages:
obliterator
:
1.6.1
dev
:
true
/mocha@10.0.0
:
resolution
:
{
integrity
:
sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==
}
engines
:
{
node
:
'
>=
14.0.0'
}
hasBin
:
true
dependencies
:
'
@ungap/promise-all-settled'
:
1.1.2
ansi-colors
:
4.1.1
browser-stdout
:
1.3.1
chokidar
:
3.5.3
debug
:
4.3.4(supports-color@8.1.1)
diff
:
5.0.0
escape-string-regexp
:
4.0.0
find-up
:
5.0.0
glob
:
7.2.0
he
:
1.2.0
js-yaml
:
4.1.0
log-symbols
:
4.1.0
minimatch
:
5.0.1
ms
:
2.1.3
nanoid
:
3.3.3
serialize-javascript
:
6.0.0
strip-json-comments
:
3.1.1
supports-color
:
8.1.1
workerpool
:
6.2.1
yargs
:
16.2.0
yargs-parser
:
20.2.4
yargs-unparser
:
2.0.0
dev
:
true
/mocha@10.2.0
:
resolution
:
{
integrity
:
sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==
}
engines
:
{
node
:
'
>=
14.0.0'
}
...
...
@@ -13010,6 +12788,7 @@ packages:
/object-assign@4.1.1
:
resolution
:
{
integrity
:
sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
}
engines
:
{
node
:
'
>=0.10.0'
}
dev
:
true
/object-inspect@1.12.3
:
resolution
:
{
integrity
:
sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
}
...
...
@@ -13097,6 +12876,10 @@ packages:
/on-exit-leak-free@0.2.0
:
resolution
:
{
integrity
:
sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==
}
/on-exit-leak-free@2.1.0
:
resolution
:
{
integrity
:
sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==
}
dev
:
false
/on-finished@2.3.0
:
resolution
:
{
integrity
:
sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==
}
engines
:
{
node
:
'
>=
0.8'
}
...
...
@@ -13400,10 +13183,6 @@ packages:
is-hexadecimal
:
1.0.4
dev
:
true
/parse-headers@2.0.4
:
resolution
:
{
integrity
:
sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==
}
dev
:
false
/parse-json@2.2.0
:
resolution
:
{
integrity
:
sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==
}
engines
:
{
node
:
'
>=0.10.0'
}
...
...
@@ -13627,6 +13406,13 @@ packages:
duplexify
:
4.1.2
split2
:
4.2.0
/pino-abstract-transport@1.0.0
:
resolution
:
{
integrity
:
sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==
}
dependencies
:
readable-stream
:
4.4.2
split2
:
4.2.0
dev
:
false
/pino-multi-stream@5.3.0
:
resolution
:
{
integrity
:
sha512-4fAGCRll18I+JmoAbxDvU9zc5sera/3c+VgTtUdoNMOZ/VSHB+HMAYtixKpeRmZTDHDDdE2rtwjVkuwWB8mYQA==
}
deprecated
:
No longer supported. Use the multi-stream support in the latest core Pino
...
...
@@ -13655,16 +13441,20 @@ packages:
/pino-std-serializers@4.0.0
:
resolution
:
{
integrity
:
sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==
}
/pino-std-serializers@6.2.2
:
resolution
:
{
integrity
:
sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==
}
dev
:
false
/pino@6.13.1
:
resolution
:
{
integrity
:
sha512-QQf67BU+cANnc/2U+wzUV20UjO5oBryWpnNyKshdLfT9BdeiXlh9wxLGmOjAuBWMYITdMs+BtJSQQNlGRNbWpA==
}
hasBin
:
true
dependencies
:
fast-redact
:
3.
0.1
fast-redact
:
3.
2.0
fast-safe-stringify
:
2.0.8
fastify-warning
:
0.2.0
flatstr
:
1.0.12
pino-std-serializers
:
3.2.0
quick-format-unescaped
:
4.0.
3
quick-format-unescaped
:
4.0.
4
sonic-boom
:
1.4.1
dev
:
false
...
...
@@ -13684,6 +13474,23 @@ packages:
sonic-boom
:
2.8.0
thread-stream
:
0.15.2
/pino@8.15.0
:
resolution
:
{
integrity
:
sha512-olUADJByk4twxccmAxb1RiGKOSvddHugCV3wkqjyv+3Sooa2KLrmXrKEWOKi0XPCLasRR5jBXxioE1jxUa4KzQ==
}
hasBin
:
true
dependencies
:
atomic-sleep
:
1.0.0
fast-redact
:
3.2.0
on-exit-leak-free
:
2.1.0
pino-abstract-transport
:
1.0.0
pino-std-serializers
:
6.2.2
process-warning
:
2.2.0
quick-format-unescaped
:
4.0.4
real-require
:
0.2.0
safe-stable-stringify
:
2.4.3
sonic-boom
:
3.3.0
thread-stream
:
2.4.0
dev
:
false
/pirates@4.0.6
:
resolution
:
{
integrity
:
sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
}
engines
:
{
node
:
'
>=
6'
}
...
...
@@ -13768,7 +13575,7 @@ packages:
fast-diff
:
1.2.0
dev
:
true
/prettier-plugin-solidity@1.0.0-beta.18(prettier@2.8.
1
)
:
/prettier-plugin-solidity@1.0.0-beta.18(prettier@2.8.
8
)
:
resolution
:
{
integrity
:
sha512-ezWdsG/jIeClmYBzg8V9Voy8jujt+VxWF8OS3Vld+C3c+3cPVib8D9l8ahTod7O5Df1anK9zo+WiiS5wb1mLmg==
}
engines
:
{
node
:
'
>=12'
}
peerDependencies
:
...
...
@@ -13777,22 +13584,16 @@ packages:
'
@solidity-parser/parser'
:
0.13.2
emoji-regex
:
9.2.2
escape-string-regexp
:
4.0.0
prettier
:
2.8.
1
prettier
:
2.8.
8
semver
:
7.5.3
solidity-comments-extractor
:
0.0.7
string-width
:
4.2.3
dev
:
true
/prettier@2.8.1
:
resolution
:
{
integrity
:
sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==
}
engines
:
{
node
:
'
>=10.13.0'
}
hasBin
:
true
/prettier@2.8.8
:
resolution
:
{
integrity
:
sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
}
engines
:
{
node
:
'
>=10.13.0'
}
hasBin
:
true
dev
:
true
/pretty-format@27.5.1
:
resolution
:
{
integrity
:
sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
}
...
...
@@ -13801,6 +13602,7 @@ packages:
ansi-regex
:
5.0.1
ansi-styles
:
5.2.0
react-is
:
17.0.2
dev
:
false
/pretty-format@29.6.1
:
resolution
:
{
integrity
:
sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==
}
...
...
@@ -13830,6 +13632,10 @@ packages:
/process-warning@1.0.0
:
resolution
:
{
integrity
:
sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==
}
/process-warning@2.2.0
:
resolution
:
{
integrity
:
sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==
}
dev
:
false
/process@0.11.10
:
resolution
:
{
integrity
:
sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
}
engines
:
{
node
:
'
>=
0.6.0'
}
...
...
@@ -13984,15 +13790,6 @@ packages:
lodash
:
4.17.21
dev
:
true
/query-string@5.1.1
:
resolution
:
{
integrity
:
sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==
}
engines
:
{
node
:
'
>=0.10.0'
}
dependencies
:
decode-uri-component
:
0.2.2
object-assign
:
4.1.1
strict-uri-encode
:
1.1.0
dev
:
false
/query-string@6.14.1
:
resolution
:
{
integrity
:
sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==
}
engines
:
{
node
:
'
>=6'
}
...
...
@@ -14018,10 +13815,6 @@ packages:
/queue-microtask@1.2.3
:
resolution
:
{
integrity
:
sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
}
/quick-format-unescaped@4.0.3
:
resolution
:
{
integrity
:
sha512-MaL/oqh02mhEo5m5J2rwsVL23Iw2PEaGVHgT2vFt8AAsr0lfvQA5dpXo9TPu0rz7tSBdUPgkbam0j/fj5ZM8yg==
}
dev
:
false
/quick-format-unescaped@4.0.4
:
resolution
:
{
integrity
:
sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==
}
...
...
@@ -14104,6 +13897,7 @@ packages:
/react-is@17.0.2
:
resolution
:
{
integrity
:
sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
}
dev
:
false
/react-is@18.2.0
:
resolution
:
{
integrity
:
sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
}
...
...
@@ -14243,6 +14037,17 @@ packages:
string_decoder
:
1.3.0
util-deprecate
:
1.0.2
/readable-stream@4.4.2
:
resolution
:
{
integrity
:
sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==
}
engines
:
{
node
:
^12.22.0 || ^14.17.0 || >=16.0.0
}
dependencies
:
abort-controller
:
3.0.0
buffer
:
6.0.3
events
:
3.3.0
process
:
0.11.10
string_decoder
:
1.3.0
dev
:
false
/readdirp@3.6.0
:
resolution
:
{
integrity
:
sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
}
engines
:
{
node
:
'
>=8.10.0'
}
...
...
@@ -14254,6 +14059,11 @@ packages:
resolution
:
{
integrity
:
sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==
}
engines
:
{
node
:
'
>=
12.13.0'
}
/real-require@0.2.0
:
resolution
:
{
integrity
:
sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==
}
engines
:
{
node
:
'
>=
12.13.0'
}
dev
:
false
/redent@3.0.0
:
resolution
:
{
integrity
:
sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
}
engines
:
{
node
:
'
>=8'
}
...
...
@@ -14818,12 +14628,13 @@ packages:
engines
:
{
node
:
'
>=8'
}
dev
:
true
/shiki@0.1
0.1
:
resolution
:
{
integrity
:
sha512-
VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMn
g==
}
/shiki@0.1
4.3
:
resolution
:
{
integrity
:
sha512-
U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+
g==
}
dependencies
:
ansi-sequence-parser
:
1.1.1
jsonc-parser
:
3.2.0
vscode-oniguruma
:
1.
6.2
vscode-textmate
:
5.2
.0
vscode-oniguruma
:
1.
7.0
vscode-textmate
:
8.0
.0
dev
:
true
/side-channel@1.0.4
:
...
...
@@ -14858,18 +14669,6 @@ packages:
-
supports-color
dev
:
true
/simple-concat@1.0.1
:
resolution
:
{
integrity
:
sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
}
dev
:
false
/simple-get@2.8.2
:
resolution
:
{
integrity
:
sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==
}
dependencies
:
decompress-response
:
3.3.0
once
:
1.4.0
simple-concat
:
1.0.1
dev
:
false
/slash@2.0.0
:
resolution
:
{
integrity
:
sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
}
engines
:
{
node
:
'
>=6'
}
...
...
@@ -14902,14 +14701,6 @@ packages:
is-fullwidth-code-point
:
3.0.0
dev
:
true
/slice-ansi@5.0.0
:
resolution
:
{
integrity
:
sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==
}
engines
:
{
node
:
'
>=12'
}
dependencies
:
ansi-styles
:
6.2.1
is-fullwidth-code-point
:
4.0.0
dev
:
true
/smart-buffer@4.2.0
:
resolution
:
{
integrity
:
sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
}
engines
:
{
node
:
'
>=
6.0.0'
,
npm
:
'
>=
3.0.0'
}
...
...
@@ -15021,6 +14812,12 @@ packages:
dependencies
:
atomic-sleep
:
1.0.0
/sonic-boom@3.3.0
:
resolution
:
{
integrity
:
sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==
}
dependencies
:
atomic-sleep
:
1.0.0
dev
:
false
/sort-keys@2.0.0
:
resolution
:
{
integrity
:
sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==
}
engines
:
{
node
:
'
>=4'
}
...
...
@@ -15208,11 +15005,6 @@ packages:
mixme
:
0.5.4
dev
:
false
/strict-uri-encode@1.1.0
:
resolution
:
{
integrity
:
sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==
}
engines
:
{
node
:
'
>=0.10.0'
}
dev
:
false
/strict-uri-encode@2.0.0
:
resolution
:
{
integrity
:
sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==
}
engines
:
{
node
:
'
>=4'
}
...
...
@@ -15578,6 +15370,12 @@ packages:
dependencies
:
real-require
:
0.1.0
/thread-stream@2.4.0
:
resolution
:
{
integrity
:
sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw==
}
dependencies
:
real-require
:
0.2.0
dev
:
false
/through2@2.0.5
:
resolution
:
{
integrity
:
sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
}
dependencies
:
...
...
@@ -15595,24 +15393,10 @@ packages:
/through@2.3.8
:
resolution
:
{
integrity
:
sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
}
/timed-out@4.0.1
:
resolution
:
{
integrity
:
sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==
}
engines
:
{
node
:
'
>=0.10.0'
}
dev
:
false
/tinybench@2.3.1
:
resolution
:
{
integrity
:
sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==
}
dev
:
true
/tinybench@2.5.0
:
resolution
:
{
integrity
:
sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==
}
dev
:
true
/tinypool@0.3.1
:
resolution
:
{
integrity
:
sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==
}
engines
:
{
node
:
'
>=14.0.0'
}
dev
:
true
/tinypool@0.6.0
:
resolution
:
{
integrity
:
sha512-FdswUUo5SxRizcBc6b1GSuLpLjisa8N8qMyYoP3rl+bym+QauhtJP5bvZY1ytt8krKGmMLYIRl36HBZfeAoqhQ==
}
engines
:
{
node
:
'
>=14.0.0'
}
...
...
@@ -15623,11 +15407,6 @@ packages:
engines
:
{
node
:
'
>=14.0.0'
}
dev
:
true
/tinyspy@1.0.2
:
resolution
:
{
integrity
:
sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==
}
engines
:
{
node
:
'
>=14.0.0'
}
dev
:
true
/tinyspy@2.1.1
:
resolution
:
{
integrity
:
sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==
}
engines
:
{
node
:
'
>=14.0.0'
}
...
...
@@ -16099,18 +15878,17 @@ packages:
resolution
:
{
integrity
:
sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
}
dev
:
true
/typedoc@0.2
2.13
(typescript@5.1.6)
:
resolution
:
{
integrity
:
sha512-
NHNI7Dr6JHa/I3+c62gdRNXBIyX7P33O9TafGLd07ur3MqzcKgwTvpg18EtvCLHJyfeSthAtCLpM7WkStUmDuQ
==
}
engines
:
{
node
:
'
>=
1
2.10.0
'
}
/typedoc@0.2
4.8
(typescript@5.1.6)
:
resolution
:
{
integrity
:
sha512-
ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w
==
}
engines
:
{
node
:
'
>=
1
4.14
'
}
hasBin
:
true
peerDependencies
:
typescript
:
4.
0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x || 4.6
.x
typescript
:
4.
6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1
.x
dependencies
:
glob
:
7.2.3
lunr
:
2.3.9
marked
:
4.
0.12
minimatch
:
5.0.1
shiki
:
0.1
0.1
marked
:
4.
3.0
minimatch
:
9.0.3
shiki
:
0.1
4.3
typescript
:
5.1.6
dev
:
true
...
...
@@ -16302,10 +16080,6 @@ packages:
requires-port
:
1.0.0
dev
:
true
/url-set-query@1.0.0
:
resolution
:
{
integrity
:
sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==
}
dev
:
false
/url-value-parser@2.0.3
:
resolution
:
{
integrity
:
sha512-FjIX+Q9lYmDM9uYIGdMYfQW0uLbWVwN2NrL2ayAI7BTOvEwzH+VoDdNquwB9h4dFAx+u6mb0ONLa3sHD5DvyvA==
}
engines
:
{
node
:
'
>=6.0.0'
}
...
...
@@ -16458,24 +16232,28 @@ packages:
vfile-message
:
2.0.4
dev
:
true
/viem@0.3.30(typescript@5.1.6)(zod@3.20.2)
:
resolution
:
{
integrity
:
sha512-4jokEVR2vtDl6zSpZiPUaHviK2dzW6uxCAVUArlh0Jhrc4ms0dkhn5E4iwk1CWMto8+YeLFEgY4gr9P10ryoEQ==
}
/viem@1.3.1(typescript@5.1.6)
:
resolution
:
{
integrity
:
sha512-Yv+y3/exrrEN4EAkVUtUuQxsjF4+3taHY2aSinJnNWtcA4fBZ+WfPJBTywcnFIa/Q5oDcQN85yqPFBbkXqWHdw==
}
peerDependencies
:
typescript
:
'
>=5.0.4'
peerDependenciesMeta
:
typescript
:
optional
:
true
dependencies
:
'
@adraffy/ens-normalize'
:
1.9.0
'
@noble/curves'
:
1.0.0
'
@noble/hashes'
:
1.3.0
'
@scure/bip32'
:
1.3.0
'
@scure/bip39'
:
1.2.0
'
@wagmi/chains'
:
0.2.16
(typescript@5.1.6)
abitype
:
0.
8.2(typescript@5.1.6)(zod@3.20.2
)
'
@wagmi/chains'
:
1.6.0
(typescript@5.1.6)
abitype
:
0.
9.3(typescript@5.1.6)(zod@3.22.1
)
isomorphic-ws
:
5.0.0(ws@8.12.0)
typescript
:
5.1.6
ws
:
8.12.0
transitivePeerDependencies
:
-
bufferutil
-
typescript
-
utf-8-validate
-
zod
dev
:
true
/viem@1.3.1(typescript@5.1.6)(zod@3.22.0)
:
resolution
:
{
integrity
:
sha512-Yv+y3/exrrEN4EAkVUtUuQxsjF4+3taHY2aSinJnNWtcA4fBZ+WfPJBTywcnFIa/Q5oDcQN85yqPFBbkXqWHdw==
}
...
...
@@ -16499,6 +16277,7 @@ packages:
-
bufferutil
-
utf-8-validate
-
zod
dev
:
true
/viem@1.6.0(typescript@5.1.6)(zod@3.22.0)
:
resolution
:
{
integrity
:
sha512-ae9Twkd0q2Qlj4yYpWjb4DzYAhKY0ibEpRH8FJaTywZXNpTjFidSdBaT0CVn1BaH7O7cnX4/O47zvDUMGJD1AA==
}
...
...
@@ -16525,9 +16304,34 @@ packages:
-
zod
dev
:
true
/vite-node@0.28.3(@types/node@20.5.0)
:
resolution
:
{
integrity
:
sha512-uJJAOkgVwdfCX8PUQhqLyDOpkBS5+j+FdbsXoPVPDlvVjRkb/W/mLYQPSL6J+t8R0UV8tJSe8c9VyxVQNsDSyg==
}
engines
:
{
node
:
'
>=v14.16.0'
}
/viem@1.6.0(typescript@5.1.6)(zod@3.22.1)
:
resolution
:
{
integrity
:
sha512-ae9Twkd0q2Qlj4yYpWjb4DzYAhKY0ibEpRH8FJaTywZXNpTjFidSdBaT0CVn1BaH7O7cnX4/O47zvDUMGJD1AA==
}
peerDependencies
:
typescript
:
'
>=5.0.4'
peerDependenciesMeta
:
typescript
:
optional
:
true
dependencies
:
'
@adraffy/ens-normalize'
:
1.9.0
'
@noble/curves'
:
1.1.0
'
@noble/hashes'
:
1.3.0
'
@scure/bip32'
:
1.3.0
'
@scure/bip39'
:
1.2.0
'
@types/ws'
:
8.5.5
'
@wagmi/chains'
:
1.6.0(typescript@5.1.6)
abitype
:
0.9.3(typescript@5.1.6)(zod@3.22.1)
isomorphic-ws
:
5.0.0(ws@8.12.0)
typescript
:
5.1.6
ws
:
8.12.0
transitivePeerDependencies
:
-
bufferutil
-
utf-8-validate
-
zod
dev
:
true
/vite-node@0.33.0(@types/node@20.5.0)
:
resolution
:
{
integrity
:
sha512-19FpHYbwWWxDr73ruNahC+vtEdza52kA90Qb3La98yZ0xULqV8A5JLNPUff0f5zID4984tW7l3DH2przTJUZSw==
}
engines
:
{
node
:
'
>=v14.18.0'
}
hasBin
:
true
dependencies
:
cac
:
6.7.14
...
...
@@ -16535,8 +16339,6 @@ packages:
mlly
:
1.4.0
pathe
:
1.1.1
picocolors
:
1.0.0
source-map
:
0.6.1
source-map-support
:
0.5.21
vite
:
4.4.9(@types/node@20.5.0)
transitivePeerDependencies
:
-
'
@types/node'
...
...
@@ -16549,8 +16351,8 @@ packages:
-
terser
dev
:
true
/vite-node@0.3
3.0
(@types/node@20.5.0)
:
resolution
:
{
integrity
:
sha512-
19FpHYbwWWxDr73ruNahC+vtEdza52kA90Qb3La98yZ0xULqV8A5JLNPUff0f5zID4984tW7l3DH2przTJUZS
w==
}
/vite-node@0.3
4.1
(@types/node@20.5.0)
:
resolution
:
{
integrity
:
sha512-
odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6
w==
}
engines
:
{
node
:
'
>=v14.18.0'
}
hasBin
:
true
dependencies
:
...
...
@@ -16571,8 +16373,8 @@ packages:
-
terser
dev
:
true
/vite-node@0.34.
1
(@types/node@20.5.0)
:
resolution
:
{
integrity
:
sha512-
odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w
==
}
/vite-node@0.34.
2
(@types/node@20.5.0)
:
resolution
:
{
integrity
:
sha512-
JtW249Zm3FB+F7pQfH56uWSdlltCo1IOkZW5oHBzeQo0iX4jtC7o1t9aILMGd9kVekXBP2lfJBEQt9rBh07ebA
==
}
engines
:
{
node
:
'
>=v14.18.0'
}
hasBin
:
true
dependencies
:
...
...
@@ -16701,9 +16503,9 @@ packages:
fsevents
:
2.3.2
dev
:
true
/vitest@0.
28.3
:
resolution
:
{
integrity
:
sha512-
N41VPNf3VGJlWQizGvl1P5MGyv3ZZA2Zvh+2V8L6tYBAAuqqDK4zExunT1Cdb6dGfZ4gr+IMrnG8d4Z6j9ctPw
==
}
engines
:
{
node
:
'
>=v14.1
6
.0'
}
/vitest@0.
33.0(jsdom@22.1.0)
:
resolution
:
{
integrity
:
sha512-
1CxaugJ50xskkQ0e969R/hW47za4YXDUfWJDxip1hwbnhUjYolpfUn2AMOulqG/Dtd9WYAtkHmM/m3yKVrEejQ
==
}
engines
:
{
node
:
'
>=v14.1
8
.0'
}
hasBin
:
true
peerDependencies
:
'
@edge-runtime/vm'
:
'
*'
...
...
@@ -16711,6 +16513,9 @@ packages:
'
@vitest/ui'
:
'
*'
happy-dom
:
'
*'
jsdom
:
'
*'
playwright
:
'
*'
safaridriver
:
'
*'
webdriverio
:
'
*'
peerDependenciesMeta
:
'
@edge-runtime/vm'
:
optional
:
true
...
...
@@ -16722,30 +16527,37 @@ packages:
optional
:
true
jsdom
:
optional
:
true
playwright
:
optional
:
true
safaridriver
:
optional
:
true
webdriverio
:
optional
:
true
dependencies
:
'
@types/chai'
:
4.3.5
'
@types/chai-subset'
:
1.3.3
'
@types/node'
:
20.5.0
'
@vitest/expect'
:
0.28.3
'
@vitest/runner'
:
0.28.3
'
@vitest/spy'
:
0.28.3
'
@vitest/utils'
:
0.28.3
acorn
:
8.9.0
'
@vitest/expect'
:
0.33.0
'
@vitest/runner'
:
0.33.0
'
@vitest/snapshot'
:
0.33.0
'
@vitest/spy'
:
0.33.0
'
@vitest/utils'
:
0.33.0
acorn
:
8.10.0
acorn-walk
:
8.2.0
cac
:
6.7.14
chai
:
4.3.7
debug
:
4.3.4(supports-color@8.1.1)
jsdom
:
22.1.0
local-pkg
:
0.4.3
magic-string
:
0.30.1
pathe
:
1.1.1
picocolors
:
1.0.0
source-map
:
0.6.1
std-env
:
3.3.3
strip-literal
:
1.0.1
tinybench
:
2.3.1
tinypool
:
0.3.1
tinyspy
:
1.0.2
tinybench
:
2.5.0
tinypool
:
0.6.0
vite
:
4.4.9(@types/node@20.5.0)
vite-node
:
0.
28.3
(@types/node@20.5.0)
vite-node
:
0.
33.0
(@types/node@20.5.0)
why-is-node-running
:
2.2.2
transitivePeerDependencies
:
-
less
...
...
@@ -16757,8 +16569,8 @@ packages:
-
terser
dev
:
true
/vitest@0.3
3.0(jsdom@22.1.0)
:
resolution
:
{
integrity
:
sha512-
1CxaugJ50xskkQ0e969R/hW47za4YXDUfWJDxip1hwbnhUjYolpfUn2AMOulqG/Dtd9WYAtkHmM/m3yKVrEej
Q==
}
/vitest@0.3
4.1
:
resolution
:
{
integrity
:
sha512-
G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVl
Q==
}
engines
:
{
node
:
'
>=v14.18.0'
}
hasBin
:
true
peerDependencies
:
...
...
@@ -16791,17 +16603,16 @@ packages:
'
@types/chai'
:
4.3.5
'
@types/chai-subset'
:
1.3.3
'
@types/node'
:
20.5.0
'
@vitest/expect'
:
0.3
3.0
'
@vitest/runner'
:
0.3
3.0
'
@vitest/snapshot'
:
0.3
3.0
'
@vitest/spy'
:
0.3
3.0
'
@vitest/utils'
:
0.3
3.0
'
@vitest/expect'
:
0.3
4.1
'
@vitest/runner'
:
0.3
4.1
'
@vitest/snapshot'
:
0.3
4.1
'
@vitest/spy'
:
0.3
4.1
'
@vitest/utils'
:
0.3
4.1
acorn
:
8.10.0
acorn-walk
:
8.2.0
cac
:
6.7.14
chai
:
4.3.7
debug
:
4.3.4(supports-color@8.1.1)
jsdom
:
22.1.0
local-pkg
:
0.4.3
magic-string
:
0.30.1
pathe
:
1.1.1
...
...
@@ -16809,9 +16620,9 @@ packages:
std-env
:
3.3.3
strip-literal
:
1.0.1
tinybench
:
2.5.0
tinypool
:
0.
6
.0
tinypool
:
0.
7
.0
vite
:
4.4.9(@types/node@20.5.0)
vite-node
:
0.3
3.0
(@types/node@20.5.0)
vite-node
:
0.3
4.1
(@types/node@20.5.0)
why-is-node-running
:
2.2.2
transitivePeerDependencies
:
-
less
...
...
@@ -16823,8 +16634,8 @@ packages:
-
terser
dev
:
true
/vitest@0.34.
1
:
resolution
:
{
integrity
:
sha512-
G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVl
Q==
}
/vitest@0.34.
2
:
resolution
:
{
integrity
:
sha512-
WgaIvBbjsSYMq/oiMlXUI7KflELmzM43BEvkdC/8b5CAod4ryAiY2z8uR6Crbi5Pjnu5oOmhKa9sy7uk6paBx
Q==
}
engines
:
{
node
:
'
>=v14.18.0'
}
hasBin
:
true
peerDependencies
:
...
...
@@ -16857,11 +16668,11 @@ packages:
'
@types/chai'
:
4.3.5
'
@types/chai-subset'
:
1.3.3
'
@types/node'
:
20.5.0
'
@vitest/expect'
:
0.34.
1
'
@vitest/runner'
:
0.34.
1
'
@vitest/snapshot'
:
0.34.
1
'
@vitest/spy'
:
0.34.
1
'
@vitest/utils'
:
0.34.
1
'
@vitest/expect'
:
0.34.
2
'
@vitest/runner'
:
0.34.
2
'
@vitest/snapshot'
:
0.34.
2
'
@vitest/spy'
:
0.34.
2
'
@vitest/utils'
:
0.34.
2
acorn
:
8.10.0
acorn-walk
:
8.2.0
cac
:
6.7.14
...
...
@@ -16876,7 +16687,7 @@ packages:
tinybench
:
2.5.0
tinypool
:
0.7.0
vite
:
4.4.9(@types/node@20.5.0)
vite-node
:
0.34.
1
(@types/node@20.5.0)
vite-node
:
0.34.
2
(@types/node@20.5.0)
why-is-node-running
:
2.2.2
transitivePeerDependencies
:
-
less
...
...
@@ -16888,12 +16699,12 @@ packages:
-
terser
dev
:
true
/vscode-oniguruma@1.
6.2
:
resolution
:
{
integrity
:
sha512-
KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvL
A==
}
/vscode-oniguruma@1.
7.0
:
resolution
:
{
integrity
:
sha512-
L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6c
A==
}
dev
:
true
/vscode-textmate@
5.2
.0
:
resolution
:
{
integrity
:
sha512-
Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ
==
}
/vscode-textmate@
8.0
.0
:
resolution
:
{
integrity
:
sha512-
AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg
==
}
dev
:
true
/w3c-xmlserializer@4.0.0
:
...
...
@@ -16921,7 +16732,7 @@ packages:
react
:
18.2.0
typescript
:
5.1.6
use-sync-external-store
:
1.2.0(react@18.2.0)
viem
:
1.3.1(typescript@5.1.6)
(zod@3.22.0)
viem
:
1.3.1(typescript@5.1.6)
transitivePeerDependencies
:
-
'
@react-native-async-storage/async-storage'
-
bufferutil
...
...
@@ -17194,20 +17005,6 @@ packages:
number-to-bn
:
1.7.0
randombytes
:
2.1.0
utf8
:
3.0.0
dev
:
true
/web3-utils@1.5.2
:
resolution
:
{
integrity
:
sha512-quTtTeQJHYSxAwIBOCGEcQtqdVcFWX6mCFNoqnp+mRbq+Hxbs8CGgO/6oqfBx4OvxIOfCpgJWYVHswRXnbEu9Q==
}
engines
:
{
node
:
'
>=8.0.0'
}
dependencies
:
bn.js
:
4.12.0
eth-lib
:
0.2.8
ethereum-bloom-filters
:
1.0.10
ethjs-unit
:
0.1.6
number-to-bn
:
1.7.0
randombytes
:
2.1.0
utf8
:
3.0.0
dev
:
false
/web3-utils@4.0.4
:
resolution
:
{
integrity
:
sha512-DuoAMY6RQkiKsQ0fAHv+oAAYmCPWRv4PJMDsy5CJN5JaW021JtXtPsEQtVIQ3iYzgQgr3SRBfGyE78WyroIkdg==
}
...
...
@@ -17238,7 +17035,7 @@ packages:
util
:
0.12.5
web3-errors
:
1.1.0
web3-types
:
1.1.0
zod
:
3.22.
0
zod
:
3.22.
1
dev
:
false
/web3@4.0.3
:
...
...
@@ -17247,7 +17044,7 @@ packages:
dependencies
:
web3-core
:
4.1.0
web3-errors
:
1.1.0
web3-eth
:
4.
0.3
web3-eth
:
4.
1.0
web3-eth-abi
:
4.1.0
web3-eth-accounts
:
4.0.3
web3-eth-contract
:
4.0.4
...
...
@@ -17569,33 +17366,6 @@ packages:
bufferutil
:
4.0.7
utf-8-validate
:
5.0.10
/xhr-request-promise@0.1.3
:
resolution
:
{
integrity
:
sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==
}
dependencies
:
xhr-request
:
1.1.0
dev
:
false
/xhr-request@1.1.0
:
resolution
:
{
integrity
:
sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==
}
dependencies
:
buffer-to-arraybuffer
:
0.0.5
object-assign
:
4.1.1
query-string
:
5.1.1
simple-get
:
2.8.2
timed-out
:
4.0.1
url-set-query
:
1.0.0
xhr
:
2.6.0
dev
:
false
/xhr@2.6.0
:
resolution
:
{
integrity
:
sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==
}
dependencies
:
global
:
4.4.0
is-function
:
1.0.2
parse-headers
:
2.0.4
xtend
:
4.0.2
dev
:
false
/xml-name-validator@4.0.0
:
resolution
:
{
integrity
:
sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==
}
engines
:
{
node
:
'
>=12'
}
...
...
@@ -17765,12 +17535,12 @@ packages:
ethers
:
5.7.2
dev
:
true
/zod@3.20.2
:
resolution
:
{
integrity
:
sha512-1MzNQdAvO+54H+EaK5YpyEy0T+Ejo/7YLHS93G3RnYWh5gaotGHwGeN/ZO687qEDU2y4CdStQYXVHIgrUl5UVQ==
}
dev
:
true
/zod@3.22.0
:
resolution
:
{
integrity
:
sha512-y5KZY/ssf5n7hCGDGGtcJO/EBJEm5Pa+QQvFBeyMOtnFYOSflalxIFFvdaYevPhePcmcKC4aTbFkCcXN7D0O8Q==
}
dev
:
true
/zod@3.22.1
:
resolution
:
{
integrity
:
sha512-+qUhAMl414+Elh+fRNtpU+byrwjDFOS1N7NioLY+tSlcADTx4TkCUua/hxJvxwDXcV4397/nZ420jy4n4+3WUg==
}
/zustand@4.3.9(react@18.2.0)
:
resolution
:
{
integrity
:
sha512-Tat5r8jOMG1Vcsj8uldMyqYKC5IZvQif8zetmLHs9WoZlntTHmIoNM8TpLRY31ExncuUvUOXehd0kvahkuHjDw==
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment