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
27cd7ae4
Unverified
Commit
27cd7ae4
authored
Aug 22, 2023
by
mergify[bot]
Committed by
GitHub
Aug 22, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into dependabot/npm_and_yarn/qs-6.5.3
parents
f6edb7fc
a98dc9fc
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
451 additions
and
205 deletions
+451
-205
blocks.go
indexer/database/blocks.go
+4
-4
bridge_messages.go
indexer/database/bridge_messages.go
+3
-3
bridge_transactions.go
indexer/database/bridge_transactions.go
+6
-7
bridge_transfers.go
indexer/database/bridge_transfers.go
+10
-10
contract_events.go
indexer/database/contract_events.go
+4
-4
db.go
indexer/database/db.go
+2
-0
bytes.go
indexer/database/serializers/bytes.go
+74
-0
rlp.go
indexer/database/serializers/rlp.go
+56
-0
types.go
indexer/database/types.go
+9
-0
main.go
op-chain-ops/cmd/registry-data/main.go
+261
-0
package.json
packages/contracts-ts/package.json
+1
-1
package.json
packages/fee-estimation/package.json
+1
-1
pnpm-lock.yaml
pnpm-lock.yaml
+20
-175
No files found.
indexer/database/blocks.go
View file @
27cd7ae4
...
...
@@ -18,8 +18,8 @@ import (
*/
type
BlockHeader
struct
{
Hash
common
.
Hash
`gorm:"primaryKey;serializer:
json
"`
ParentHash
common
.
Hash
`gorm:"serializer:
json
"`
Hash
common
.
Hash
`gorm:"primaryKey;serializer:
bytes
"`
ParentHash
common
.
Hash
`gorm:"serializer:
bytes
"`
Number
U256
Timestamp
uint64
...
...
@@ -50,14 +50,14 @@ type LegacyStateBatch struct {
// violating the primary key constraint.
Index
uint64
`gorm:"primaryKey;default:0"`
Root
common
.
Hash
`gorm:"serializer:
json
"`
Root
common
.
Hash
`gorm:"serializer:
bytes
"`
Size
uint64
PrevTotal
uint64
L1ContractEventGUID
uuid
.
UUID
}
type
OutputProposal
struct
{
OutputRoot
common
.
Hash
`gorm:"primaryKey;serializer:
json
"`
OutputRoot
common
.
Hash
`gorm:"primaryKey;serializer:
bytes
"`
L2OutputIndex
U256
L2BlockNumber
U256
...
...
indexer/database/bridge_messages.go
View file @
27cd7ae4
...
...
@@ -16,7 +16,7 @@ import (
*/
type
BridgeMessage
struct
{
MessageHash
common
.
Hash
`gorm:"primaryKey;serializer:
json
"`
MessageHash
common
.
Hash
`gorm:"primaryKey;serializer:
bytes
"`
Nonce
U256
SentMessageEventGUID
uuid
.
UUID
...
...
@@ -28,12 +28,12 @@ type BridgeMessage struct {
type
L1BridgeMessage
struct
{
BridgeMessage
`gorm:"embedded"`
TransactionSourceHash
common
.
Hash
`gorm:"serializer:
json
"`
TransactionSourceHash
common
.
Hash
`gorm:"serializer:
bytes
"`
}
type
L2BridgeMessage
struct
{
BridgeMessage
`gorm:"embedded"`
TransactionWithdrawalHash
common
.
Hash
`gorm:"serializer:
json
"`
TransactionWithdrawalHash
common
.
Hash
`gorm:"serializer:
bytes
"`
}
type
BridgeMessagesView
interface
{
...
...
indexer/database/bridge_transactions.go
View file @
27cd7ae4
...
...
@@ -8,7 +8,6 @@ import (
"gorm.io/gorm"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
)
/**
...
...
@@ -16,16 +15,16 @@ import (
*/
type
Transaction
struct
{
FromAddress
common
.
Address
`gorm:"serializer:
json
"`
ToAddress
common
.
Address
`gorm:"serializer:
json
"`
FromAddress
common
.
Address
`gorm:"serializer:
bytes
"`
ToAddress
common
.
Address
`gorm:"serializer:
bytes
"`
Amount
U256
Data
hexutil
.
Bytes
`gorm:"serializer:json
"`
Data
Bytes
`gorm:"serializer:bytes
"`
Timestamp
uint64
}
type
L1TransactionDeposit
struct
{
SourceHash
common
.
Hash
`gorm:"serializer:
json
;primaryKey"`
L2TransactionHash
common
.
Hash
`gorm:"serializer:
json
"`
SourceHash
common
.
Hash
`gorm:"serializer:
bytes
;primaryKey"`
L2TransactionHash
common
.
Hash
`gorm:"serializer:
bytes
"`
InitiatedL1EventGUID
uuid
.
UUID
Tx
Transaction
`gorm:"embedded"`
...
...
@@ -33,7 +32,7 @@ type L1TransactionDeposit struct {
}
type
L2TransactionWithdrawal
struct
{
WithdrawalHash
common
.
Hash
`gorm:"serializer:
json
;primaryKey"`
WithdrawalHash
common
.
Hash
`gorm:"serializer:
bytes
;primaryKey"`
Nonce
U256
InitiatedL2EventGUID
uuid
.
UUID
...
...
indexer/database/bridge_transfers.go
View file @
27cd7ae4
...
...
@@ -19,12 +19,12 @@ var (
*/
type
TokenPair
struct
{
LocalTokenAddress
common
.
Address
`gorm:"serializer:
json
"`
RemoteTokenAddress
common
.
Address
`gorm:"serializer:
json
"`
LocalTokenAddress
common
.
Address
`gorm:"serializer:
bytes
"`
RemoteTokenAddress
common
.
Address
`gorm:"serializer:
bytes
"`
}
type
BridgeTransfer
struct
{
CrossDomainMessageHash
*
common
.
Hash
`gorm:"serializer:
json
"`
CrossDomainMessageHash
*
common
.
Hash
`gorm:"serializer:
bytes
"`
Tx
Transaction
`gorm:"embedded"`
TokenPair
TokenPair
`gorm:"embedded"`
...
...
@@ -32,27 +32,27 @@ type BridgeTransfer struct {
type
L1BridgeDeposit
struct
{
BridgeTransfer
`gorm:"embedded"`
TransactionSourceHash
common
.
Hash
`gorm:"primaryKey;serializer:
json
"`
TransactionSourceHash
common
.
Hash
`gorm:"primaryKey;serializer:
bytes
"`
}
type
L1BridgeDepositWithTransactionHashes
struct
{
L1BridgeDeposit
L1BridgeDeposit
`gorm:"embedded"`
L1TransactionHash
common
.
Hash
`gorm:"serializer:
json
"`
L2TransactionHash
common
.
Hash
`gorm:"serializer:
json
"`
L1TransactionHash
common
.
Hash
`gorm:"serializer:
bytes
"`
L2TransactionHash
common
.
Hash
`gorm:"serializer:
bytes
"`
}
type
L2BridgeWithdrawal
struct
{
BridgeTransfer
`gorm:"embedded"`
TransactionWithdrawalHash
common
.
Hash
`gorm:"primaryKey;serializer:
json
"`
TransactionWithdrawalHash
common
.
Hash
`gorm:"primaryKey;serializer:
bytes
"`
}
type
L2BridgeWithdrawalWithTransactionHashes
struct
{
L2BridgeWithdrawal
L2BridgeWithdrawal
`gorm:"embedded"`
L2TransactionHash
common
.
Hash
`gorm:"serializer:
json
"`
L2TransactionHash
common
.
Hash
`gorm:"serializer:
bytes
"`
ProvenL1TransactionHash
common
.
Hash
`gorm:"serializer:
json
"`
FinalizedL1TransactionHash
common
.
Hash
`gorm:"serializer:
json
"`
ProvenL1TransactionHash
common
.
Hash
`gorm:"serializer:
bytes
"`
FinalizedL1TransactionHash
common
.
Hash
`gorm:"serializer:
bytes
"`
}
type
BridgeTransfersView
interface
{
...
...
indexer/database/contract_events.go
View file @
27cd7ae4
...
...
@@ -21,12 +21,12 @@ type ContractEvent struct {
GUID
uuid
.
UUID
`gorm:"primaryKey"`
// Some useful derived fields
BlockHash
common
.
Hash
`gorm:"serializer:
json
"`
ContractAddress
common
.
Address
`gorm:"serializer:
json
"`
TransactionHash
common
.
Hash
`gorm:"serializer:
json
"`
BlockHash
common
.
Hash
`gorm:"serializer:
bytes
"`
ContractAddress
common
.
Address
`gorm:"serializer:
bytes
"`
TransactionHash
common
.
Hash
`gorm:"serializer:
bytes
"`
LogIndex
uint64
EventSignature
common
.
Hash
`gorm:"serializer:
json
"`
EventSignature
common
.
Hash
`gorm:"serializer:
bytes
"`
Timestamp
uint64
// NOTE: NOT ALL THE DERIVED FIELDS ON `types.Log` ARE
...
...
indexer/database/db.go
View file @
27cd7ae4
...
...
@@ -5,6 +5,8 @@ import (
"fmt"
"github.com/ethereum-optimism/optimism/indexer/config"
_
"github.com/ethereum-optimism/optimism/indexer/database/serializers"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"gorm.io/gorm/logger"
...
...
indexer/database/serializers/bytes.go
0 → 100644
View file @
27cd7ae4
package
serializers
import
(
"context"
"fmt"
"reflect"
"github.com/ethereum/go-ethereum/common/hexutil"
"gorm.io/gorm/schema"
)
type
BytesSerializer
struct
{}
type
BytesInterface
interface
{
Bytes
()
[]
byte
}
type
SetBytesInterface
interface
{
SetBytes
([]
byte
)
}
func
init
()
{
schema
.
RegisterSerializer
(
"bytes"
,
BytesSerializer
{})
}
func
(
BytesSerializer
)
Scan
(
ctx
context
.
Context
,
field
*
schema
.
Field
,
dst
reflect
.
Value
,
dbValue
interface
{})
error
{
if
dbValue
==
nil
{
return
nil
}
hexStr
,
ok
:=
dbValue
.
(
string
)
if
!
ok
{
return
fmt
.
Errorf
(
"expected hex string as the database value: %T"
,
dbValue
)
}
b
,
err
:=
hexutil
.
Decode
(
hexStr
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to decode database value: %w"
,
err
)
}
fieldValue
:=
reflect
.
New
(
field
.
FieldType
)
fieldInterface
:=
fieldValue
.
Interface
()
// Detect if we're deserializing into a pointer. If so, we'll need to
// also allocate memory to where the allocated pointer should point to
if
field
.
FieldType
.
Kind
()
==
reflect
.
Pointer
{
nestedField
:=
fieldValue
.
Elem
()
if
nestedField
.
Elem
()
.
Kind
()
==
reflect
.
Pointer
{
return
fmt
.
Errorf
(
"double pointers are the max depth supported: %T"
,
fieldValue
)
}
// We'll want to call `SetBytes` on the pointer to
// the allocated memory and not the double pointer
nestedField
.
Set
(
reflect
.
New
(
field
.
FieldType
.
Elem
()))
fieldInterface
=
nestedField
.
Interface
()
}
fieldSetBytes
,
ok
:=
fieldInterface
.
(
SetBytesInterface
)
if
!
ok
{
return
fmt
.
Errorf
(
"field does not satisfy the `SetBytes([]byte)` interface: %T"
,
fieldInterface
)
}
fieldSetBytes
.
SetBytes
(
b
)
field
.
ReflectValueOf
(
ctx
,
dst
)
.
Set
(
fieldValue
.
Elem
())
return
nil
}
func
(
BytesSerializer
)
Value
(
ctx
context
.
Context
,
field
*
schema
.
Field
,
dst
reflect
.
Value
,
fieldValue
interface
{})
(
interface
{},
error
)
{
if
fieldValue
==
nil
||
(
field
.
FieldType
.
Kind
()
==
reflect
.
Pointer
&&
reflect
.
ValueOf
(
fieldValue
)
.
IsNil
())
{
return
nil
,
nil
}
fieldBytes
,
ok
:=
fieldValue
.
(
BytesInterface
)
if
!
ok
{
return
nil
,
fmt
.
Errorf
(
"field does not satisfy the `Bytes() []byte` interface"
)
}
hexStr
:=
hexutil
.
Encode
(
fieldBytes
.
Bytes
())
return
hexStr
,
nil
}
indexer/database/
rlp_serializer
.go
→
indexer/database/
serializers/rlp
.go
View file @
27cd7ae4
package
database
package
serializers
import
(
"context"
...
...
@@ -13,38 +13,28 @@ import (
type
RLPSerializer
struct
{}
type
RLPInterface
interface
{
rlp
.
Encoder
rlp
.
Decoder
}
func
init
()
{
schema
.
RegisterSerializer
(
"rlp"
,
RLPSerializer
{})
}
func
(
RLPSerializer
)
Scan
(
ctx
context
.
Context
,
field
*
schema
.
Field
,
dst
reflect
.
Value
,
dbValue
interface
{})
error
{
fieldValue
:=
reflect
.
New
(
field
.
FieldType
)
if
dbValue
!=
nil
{
var
bytes
[]
byte
switch
v
:=
dbValue
.
(
type
)
{
case
[]
byte
:
bytes
=
v
case
string
:
b
,
err
:=
hexutil
.
Decode
(
v
)
if
err
!=
nil
{
return
err
}
bytes
=
b
default
:
return
fmt
.
Errorf
(
"unrecognized RLP bytes: %#v"
,
dbValue
)
}
if
dbValue
==
nil
{
return
nil
}
hexStr
,
ok
:=
dbValue
.
(
string
)
if
!
ok
{
return
fmt
.
Errorf
(
"expected hex string as the database value: %T"
,
dbValue
)
}
if
len
(
bytes
)
>
0
{
err
:=
rlp
.
DecodeBytes
(
bytes
,
fieldValue
.
Interface
())
if
err
!=
nil
{
return
err
}
}
b
,
err
:=
hexutil
.
Decode
(
hexStr
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to decode database value: %w"
,
err
)
}
fieldValue
:=
reflect
.
New
(
field
.
FieldType
)
if
err
:=
rlp
.
DecodeBytes
(
b
,
fieldValue
.
Interface
());
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to decode rlp bytes: %w"
,
err
)
}
field
.
ReflectValueOf
(
ctx
,
dst
)
.
Set
(
fieldValue
.
Elem
())
...
...
@@ -52,18 +42,15 @@ func (RLPSerializer) Scan(ctx context.Context, field *schema.Field, dst reflect.
}
func
(
RLPSerializer
)
Value
(
ctx
context
.
Context
,
field
*
schema
.
Field
,
dst
reflect
.
Value
,
fieldValue
interface
{})
(
interface
{},
error
)
{
// Even though rlp.Encode takes an interface and will error out if the passed interface does not
// satisfy the interface, we check here since we also want to make sure this type satisfies the
// rlp.Decoder interface as well
i
:=
reflect
.
TypeOf
(
new
(
RLPInterface
))
.
Elem
()
if
!
reflect
.
TypeOf
(
fieldValue
)
.
Implements
(
i
)
{
return
nil
,
fmt
.
Errorf
(
"%T does not satisfy RLP Encoder & Decoder interface"
,
fieldValue
)
if
fieldValue
==
nil
||
(
field
.
FieldType
.
Kind
()
==
reflect
.
Pointer
&&
reflect
.
ValueOf
(
fieldValue
)
.
IsNil
())
{
return
nil
,
nil
}
rlpBytes
,
err
:=
rlp
.
EncodeToBytes
(
fieldValue
)
if
err
!=
nil
{
return
nil
,
err
return
nil
,
fmt
.
Errorf
(
"failed to encode rlp bytes: %w"
,
err
)
}
return
hexutil
.
Bytes
(
rlpBytes
)
.
MarshalText
()
hexStr
:=
hexutil
.
Encode
(
rlpBytes
)
return
hexStr
,
nil
}
indexer/database/types.go
View file @
27cd7ae4
...
...
@@ -93,3 +93,12 @@ func (h *RLPHeader) Header() *types.Header {
func
(
h
*
RLPHeader
)
Hash
()
common
.
Hash
{
return
h
.
Header
()
.
Hash
()
}
type
Bytes
[]
byte
func
(
b
Bytes
)
Bytes
()
[]
byte
{
return
b
[
:
]
}
func
(
b
*
Bytes
)
SetBytes
(
bytes
[]
byte
)
{
*
b
=
bytes
}
op-chain-ops/cmd/registry-data/main.go
0 → 100644
View file @
27cd7ae4
package
main
import
(
"bytes"
"compress/flate"
"compress/gzip"
"encoding/json"
"errors"
"fmt"
"os"
"path/filepath"
opservice
"github.com/ethereum-optimism/optimism/op-service"
"github.com/ethereum-optimism/optimism/op-service/jsonutil"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/log"
"github.com/mattn/go-isatty"
"github.com/urfave/cli/v2"
)
const
EnvPrefix
=
"OP_CHAIN_OPS_REGISTRY_DATA"
var
(
L2GenesisFlag
=
&
cli
.
PathFlag
{
Name
:
"l2-genesis"
,
Value
:
"genesis.json"
,
Usage
:
"Path to genesis json (go-ethereum format)"
,
EnvVars
:
opservice
.
PrefixEnvVar
(
EnvPrefix
,
"L2_GENESIS"
),
}
L2GenesisHeaderFlag
=
&
cli
.
PathFlag
{
Name
:
"l2-genesis-header"
,
Value
:
"genesis-header.json"
,
Usage
:
"Alternative to l2-genesis flag, if genesis-state is omitted. Path to block header at genesis"
,
EnvVars
:
opservice
.
PrefixEnvVar
(
EnvPrefix
,
"L2_GENESIS_HEADER"
),
}
BytecodesDirFlag
=
&
cli
.
PathFlag
{
Name
:
"bytecodes-dir"
,
Value
:
"superchain-registry/superchain/bytecodes"
,
Usage
:
"Collection of gzipped L2 bytecodes"
,
EnvVars
:
opservice
.
PrefixEnvVar
(
EnvPrefix
,
"BYTECODES_DIR"
),
}
OutputFlag
=
&
cli
.
PathFlag
{
Name
:
"output"
,
Value
:
"out.json.gz"
,
Usage
:
"output gzipped JSON file path to write to"
,
EnvVars
:
opservice
.
PrefixEnvVar
(
EnvPrefix
,
"OUTPUT"
),
}
)
func
main
()
{
log
.
Root
()
.
SetHandler
(
log
.
StreamHandler
(
os
.
Stderr
,
log
.
TerminalFormat
(
isatty
.
IsTerminal
(
os
.
Stderr
.
Fd
()))))
app
:=
&
cli
.
App
{
Name
:
"registry-genesis"
,
Usage
:
"Prepare superchain-registry genesis data files based on full genesis dump"
,
Flags
:
[]
cli
.
Flag
{
L2GenesisFlag
,
L2GenesisHeaderFlag
,
BytecodesDirFlag
,
OutputFlag
,
},
Action
:
entrypoint
,
}
if
err
:=
app
.
Run
(
os
.
Args
);
err
!=
nil
{
log
.
Crit
(
"error while generating registry data"
,
"err"
,
err
)
}
}
type
GenesisAccount
struct
{
CodeHash
common
.
Hash
`json:"codeHash,omitempty"`
Storage
jsonutil
.
LazySortedJsonMap
[
common
.
Hash
,
common
.
Hash
]
`json:"storage,omitempty"`
Balance
*
hexutil
.
Big
`json:"balance,omitempty"`
Nonce
uint64
`json:"nonce,omitempty"`
}
type
Genesis
struct
{
Nonce
uint64
`json:"nonce"`
Timestamp
uint64
`json:"timestamp"`
ExtraData
[]
byte
`json:"extraData"`
GasLimit
uint64
`json:"gasLimit"`
Difficulty
*
hexutil
.
Big
`json:"difficulty"`
Mixhash
common
.
Hash
`json:"mixHash"`
Coinbase
common
.
Address
`json:"coinbase"`
Number
uint64
`json:"number"`
GasUsed
uint64
`json:"gasUsed"`
ParentHash
common
.
Hash
`json:"parentHash"`
BaseFee
*
hexutil
.
Big
`json:"baseFeePerGas"`
Alloc
jsonutil
.
LazySortedJsonMap
[
common
.
Address
,
GenesisAccount
]
`json:"alloc"`
// For genesis definitions without full state (OP-Mainnet, OP-Goerli)
StateHash
*
common
.
Hash
`json:"stateHash,omitempty"`
}
func
loadJSON
[
X
any
](
inputPath
string
)
(
*
X
,
error
)
{
if
inputPath
==
""
{
return
nil
,
errors
.
New
(
"no path specified"
)
}
f
,
err
:=
os
.
OpenFile
(
inputPath
,
os
.
O_RDONLY
,
0
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to open file %q: %w"
,
inputPath
,
err
)
}
defer
f
.
Close
()
var
obj
X
if
err
:=
json
.
NewDecoder
(
f
)
.
Decode
(
&
obj
);
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to decode file %q: %w"
,
inputPath
,
err
)
}
return
&
obj
,
nil
}
func
writeGzipJSON
(
outputPath
string
,
value
any
)
error
{
f
,
err
:=
os
.
OpenFile
(
outputPath
,
os
.
O_WRONLY
|
os
.
O_CREATE
|
os
.
O_TRUNC
,
0755
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to open output file: %w"
,
err
)
}
defer
f
.
Close
()
w
,
err
:=
gzip
.
NewWriterLevel
(
f
,
flate
.
BestCompression
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to create gzip writer: %w"
,
err
)
}
defer
w
.
Close
()
enc
:=
json
.
NewEncoder
(
w
)
if
err
:=
enc
.
Encode
(
value
);
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to encode to JSON: %w"
,
err
)
}
return
nil
}
func
entrypoint
(
ctx
*
cli
.
Context
)
error
{
genesisPath
:=
ctx
.
Path
(
L2GenesisFlag
.
Name
)
if
genesisPath
==
""
{
// When the genesis-state is too large, or not meant to be available, only the header data is made available.
// This allows the user to verify the header-chain starting from genesis, and state-sync the latest state,
// skipping the historical state.
// Archive nodes that depend on this historical state should instantiate the chain from a full genesis dump
// with allocation data, or datadir.
genesisHeaderPath
:=
ctx
.
Path
(
L2GenesisHeaderFlag
.
Name
)
genesisHeader
,
err
:=
loadJSON
[
types
.
Header
](
genesisHeaderPath
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"genesis-header %q failed to load: %w"
,
genesisHeaderPath
,
err
)
}
if
genesisHeader
.
TxHash
!=
types
.
EmptyTxsHash
{
return
errors
.
New
(
"genesis-header based genesis must have no transactions"
)
}
if
genesisHeader
.
ReceiptHash
!=
types
.
EmptyReceiptsHash
{
return
errors
.
New
(
"genesis-header based genesis must have no receipts"
)
}
if
genesisHeader
.
UncleHash
!=
types
.
EmptyUncleHash
{
return
errors
.
New
(
"genesis-header based genesis must have no uncle hashes"
)
}
if
genesisHeader
.
WithdrawalsHash
!=
nil
&&
*
genesisHeader
.
WithdrawalsHash
!=
types
.
EmptyWithdrawalsHash
{
return
errors
.
New
(
"genesis-header based genesis must have no withdrawals"
)
}
out
:=
Genesis
{
Nonce
:
genesisHeader
.
Nonce
.
Uint64
(),
Timestamp
:
genesisHeader
.
Time
,
ExtraData
:
genesisHeader
.
Extra
,
GasLimit
:
genesisHeader
.
GasLimit
,
Difficulty
:
(
*
hexutil
.
Big
)(
genesisHeader
.
Difficulty
),
Mixhash
:
genesisHeader
.
MixDigest
,
Coinbase
:
genesisHeader
.
Coinbase
,
Number
:
genesisHeader
.
Number
.
Uint64
(),
GasUsed
:
genesisHeader
.
GasUsed
,
ParentHash
:
genesisHeader
.
ParentHash
,
BaseFee
:
(
*
hexutil
.
Big
)(
genesisHeader
.
BaseFee
),
Alloc
:
make
(
jsonutil
.
LazySortedJsonMap
[
common
.
Address
,
GenesisAccount
]),
StateHash
:
&
genesisHeader
.
Root
,
}
if
err
:=
writeGzipJSON
(
ctx
.
Path
(
OutputFlag
.
Name
),
out
);
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to write output: %w"
,
err
)
}
return
nil
}
genesis
,
err
:=
loadJSON
[
core
.
Genesis
](
genesisPath
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to load L2 genesis: %w"
,
err
)
}
// export all contract bytecodes, write them to bytecodes collection
bytecodesDir
:=
ctx
.
Path
(
BytecodesDirFlag
.
Name
)
if
err
:=
os
.
MkdirAll
(
bytecodesDir
,
0755
);
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to make bytecodes dir: %w"
,
err
)
}
for
addr
,
account
:=
range
genesis
.
Alloc
{
if
len
(
account
.
Code
)
>
0
{
codeHash
:=
crypto
.
Keccak256Hash
(
account
.
Code
)
name
:=
filepath
.
Join
(
bytecodesDir
,
fmt
.
Sprintf
(
"%s.bin.gz"
,
codeHash
))
_
,
err
:=
os
.
Stat
(
name
)
if
err
!=
nil
{
if
os
.
IsNotExist
(
err
)
{
var
buf
bytes
.
Buffer
w
,
err
:=
gzip
.
NewWriterLevel
(
&
buf
,
9
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to construct gzip writer for bytecode %s: %w"
,
codeHash
,
err
)
}
if
_
,
err
:=
w
.
Write
(
account
.
Code
);
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to write bytecode %s to gzip writer: %w"
,
codeHash
,
err
)
}
if
err
:=
w
.
Close
();
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to close gzip writer: %w"
,
err
)
}
// new bytecode
if
err
:=
os
.
WriteFile
(
name
,
buf
.
Bytes
(),
0755
);
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to write bytecode %s of account %s: %w"
,
codeHash
,
addr
,
err
)
}
}
else
{
return
fmt
.
Errorf
(
"failed to check for pre-existing bytecode %s for address %s: %w"
,
codeHash
,
addr
,
err
)
}
}
// else: already exists
}
}
// convert into allocation data
out
:=
Genesis
{
Nonce
:
genesis
.
Nonce
,
Timestamp
:
genesis
.
Timestamp
,
ExtraData
:
genesis
.
ExtraData
,
GasLimit
:
genesis
.
GasLimit
,
Difficulty
:
(
*
hexutil
.
Big
)(
genesis
.
Difficulty
),
Mixhash
:
genesis
.
Mixhash
,
Coinbase
:
genesis
.
Coinbase
,
Number
:
genesis
.
Number
,
GasUsed
:
genesis
.
GasUsed
,
ParentHash
:
genesis
.
ParentHash
,
BaseFee
:
(
*
hexutil
.
Big
)(
genesis
.
BaseFee
),
Alloc
:
make
(
jsonutil
.
LazySortedJsonMap
[
common
.
Address
,
GenesisAccount
]),
}
// write genesis, but only reference code by code-hash, and don't encode the L2 predeploys to save space.
for
addr
,
account
:=
range
genesis
.
Alloc
{
var
codeHash
common
.
Hash
if
len
(
account
.
Code
)
>
0
{
codeHash
=
crypto
.
Keccak256Hash
(
account
.
Code
)
}
outAcc
:=
GenesisAccount
{
CodeHash
:
codeHash
,
Nonce
:
account
.
Nonce
,
}
if
account
.
Balance
!=
nil
&&
account
.
Balance
.
Cmp
(
common
.
Big0
)
!=
0
{
outAcc
.
Balance
=
(
*
hexutil
.
Big
)(
account
.
Balance
)
}
if
len
(
account
.
Storage
)
>
0
{
outAcc
.
Storage
=
make
(
jsonutil
.
LazySortedJsonMap
[
common
.
Hash
,
common
.
Hash
])
for
k
,
v
:=
range
account
.
Storage
{
outAcc
.
Storage
[
k
]
=
v
}
}
out
.
Alloc
[
addr
]
=
outAcc
}
// write genesis alloc
if
err
:=
writeGzipJSON
(
ctx
.
Path
(
OutputFlag
.
Name
),
out
);
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to write output: %w"
,
err
)
}
return
nil
}
packages/contracts-ts/package.json
View file @
27cd7ae4
...
...
@@ -62,7 +62,7 @@
"tsup"
:
"^7.1.0"
,
"typescript"
:
"^5.1.6"
,
"vite"
:
"^4.4.6"
,
"vitest"
:
"^0.3
3.0
"
"vitest"
:
"^0.3
4.2
"
},
"peerDependencies"
:
{
"@wagmi/core"
:
">1.0.0"
,
...
...
packages/fee-estimation/package.json
View file @
27cd7ae4
...
...
@@ -46,7 +46,7 @@
"typescript"
:
"^5.1.6"
,
"viem"
:
"^1.3.1"
,
"vite"
:
"^4.4.6"
,
"vitest"
:
"^0.3
3.0
"
"vitest"
:
"^0.3
4.2
"
},
"peerDependencies"
:
{
"viem"
:
"^0.3.30"
...
...
pnpm-lock.yaml
View file @
27cd7ae4
...
...
@@ -62,10 +62,10 @@ importers:
version
:
8.3.0(eslint@8.47.0)
eslint-config-standard
:
specifier
:
^16.0.3
version
:
16.0.3(eslint-plugin-import@2.28.
0
)(eslint-plugin-node@11.1.0)(eslint-plugin-promise@5.2.0)(eslint@8.47.0)
version
:
16.0.3(eslint-plugin-import@2.28.
1
)(eslint-plugin-node@11.1.0)(eslint-plugin-promise@5.2.0)(eslint@8.47.0)
eslint-plugin-import
:
specifier
:
^2.26.0
version
:
2.28.
0
(@typescript-eslint/parser@5.60.1)(eslint@8.47.0)
version
:
2.28.
1
(@typescript-eslint/parser@5.60.1)(eslint@8.47.0)
eslint-plugin-jsdoc
:
specifier
:
^35.1.2
version
:
35.5.1(eslint@8.47.0)
...
...
@@ -312,7 +312,7 @@ importers:
version
:
8.1.0
'
@vitest/coverage-istanbul'
:
specifier
:
^0.34.1
version
:
0.34.1(vitest@0.3
3.0
)
version
:
0.34.1(vitest@0.3
4.2
)
'
@wagmi/cli'
:
specifier
:
^1.3.0
version
:
1.3.0(@wagmi/core@1.3.8)(typescript@5.1.6)(wagmi@1.0.1)
...
...
@@ -344,8 +344,8 @@ importers:
specifier
:
^4.4.6
version
:
4.4.6(@types/node@12.20.20)
vitest
:
specifier
:
^0.3
3.0
version
:
0.3
3.0
(jsdom@22.1.0)
specifier
:
^0.3
4.2
version
:
0.3
4.2
(jsdom@22.1.0)
packages/core-utils
:
dependencies
:
...
...
@@ -412,7 +412,7 @@ importers:
version
:
8.0.1(react@17.0.2)
'
@vitest/coverage-istanbul'
:
specifier
:
^0.34.1
version
:
0.34.1(vitest@0.3
3.0
)
version
:
0.34.1(vitest@0.3
4.2
)
abitype
:
specifier
:
^0.9.3
version
:
0.9.3(typescript@5.1.6)(zod@3.22.1)
...
...
@@ -438,8 +438,8 @@ importers:
specifier
:
^4.4.6
version
:
4.4.6(@types/node@12.20.20)
vitest
:
specifier
:
^0.3
3.0
version
:
0.3
3.0
(jsdom@22.1.0)
specifier
:
^0.3
4.2
version
:
0.3
4.2
(jsdom@22.1.0)
packages/sdk
:
dependencies
:
...
...
@@ -527,7 +527,7 @@ importers:
version
:
1.6.0(typescript@5.1.6)(zod@3.22.1)
vitest
:
specifier
:
^0.34.2
version
:
0.34.2
version
:
0.34.2
(jsdom@22.1.0)
zod
:
specifier
:
^3.22.1
version
:
3.22.1
...
...
@@ -4526,7 +4526,7 @@ packages:
resolution
:
{
integrity
:
sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==
}
dev
:
true
/@vitest/coverage-istanbul@0.34.1(vitest@0.3
3.0
)
:
/@vitest/coverage-istanbul@0.34.1(vitest@0.3
4.1
)
:
resolution
:
{
integrity
:
sha512-5GprlyY2t1g6+RrssWcN/w5RnZV3qIOM0eoaSDJw3jXbHpBpMvAfTg791zXo7PIqNYs5ORUqBWXIIU0gyAfZxA==
}
peerDependencies
:
vitest
:
'
>=0.32.0
<1'
...
...
@@ -4537,12 +4537,12 @@ packages:
istanbul-lib-source-maps
:
4.0.1
istanbul-reports
:
3.1.5
test-exclude
:
6.0.0
vitest
:
0.3
3.0(jsdom@22.1.0)
vitest
:
0.3
4.1
transitivePeerDependencies
:
-
supports-color
dev
:
true
/@vitest/coverage-istanbul@0.34.1(vitest@0.34.
1
)
:
/@vitest/coverage-istanbul@0.34.1(vitest@0.34.
2
)
:
resolution
:
{
integrity
:
sha512-5GprlyY2t1g6+RrssWcN/w5RnZV3qIOM0eoaSDJw3jXbHpBpMvAfTg791zXo7PIqNYs5ORUqBWXIIU0gyAfZxA==
}
peerDependencies
:
vitest
:
'
>=0.32.0
<1'
...
...
@@ -4553,19 +4553,11 @@ packages:
istanbul-lib-source-maps
:
4.0.1
istanbul-reports
:
3.1.5
test-exclude
:
6.0.0
vitest
:
0.34.
1
vitest
:
0.34.
2(jsdom@22.1.0)
transitivePeerDependencies
:
-
supports-color
dev
:
true
/@vitest/expect@0.33.0
:
resolution
:
{
integrity
:
sha512-sVNf+Gla3mhTCxNJx+wJLDPp/WcstOe0Ksqz4Vec51MmgMth/ia0MGFEkIZmVGeTL5HtjYR4Wl/ZxBxBXZJTzQ==
}
dependencies
:
'
@vitest/spy'
:
0.33.0
'
@vitest/utils'
:
0.33.0
chai
:
4.3.7
dev
:
true
/@vitest/expect@0.34.1
:
resolution
:
{
integrity
:
sha512-q2CD8+XIsQ+tHwypnoCk8Mnv5e6afLFvinVGCq3/BOT4kQdVQmY6rRfyKkwcg635lbliLPqbunXZr+L1ssUWiQ==
}
dependencies
:
...
...
@@ -4582,14 +4574,6 @@ packages:
chai
:
4.3.7
dev
:
true
/@vitest/runner@0.33.0
:
resolution
:
{
integrity
:
sha512-UPfACnmCB6HKRHTlcgCoBh6ppl6fDn+J/xR8dTufWiKt/74Y9bHci5CKB8tESSV82zKYtkBJo9whU3mNvfaisg==
}
dependencies
:
'
@vitest/utils'
:
0.33.0
p-limit
:
4.0.0
pathe
:
1.1.1
dev
:
true
/@vitest/runner@0.34.1
:
resolution
:
{
integrity
:
sha512-YfQMpYzDsYB7yqgmlxZ06NI4LurHWfrH7Wy3Pvf/z/vwUSgq1zLAb1lWcItCzQG+NVox+VvzlKQrYEXb47645g==
}
dependencies
:
...
...
@@ -4606,14 +4590,6 @@ packages:
pathe
:
1.1.1
dev
:
true
/@vitest/snapshot@0.33.0
:
resolution
:
{
integrity
:
sha512-tJjrl//qAHbyHajpFvr8Wsk8DIOODEebTu7pgBrP07iOepR5jYkLFiqLq2Ltxv+r0uptUb4izv1J8XBOwKkVYA==
}
dependencies
:
magic-string
:
0.30.1
pathe
:
1.1.1
pretty-format
:
29.6.1
dev
:
true
/@vitest/snapshot@0.34.1
:
resolution
:
{
integrity
:
sha512-0O9LfLU0114OqdF8lENlrLsnn024Tb1CsS9UwG0YMWY2oGTQfPtkW+B/7ieyv0X9R2Oijhi3caB1xgGgEgclSQ==
}
dependencies
:
...
...
@@ -4630,12 +4606,6 @@ packages:
pretty-format
:
29.6.1
dev
:
true
/@vitest/spy@0.33.0
:
resolution
:
{
integrity
:
sha512-Kv+yZ4hnH1WdiAkPUQTpRxW8kGtH8VRTnus7ZTGovFYM1ZezJpvGtb9nPIjPnptHbsyIAxYZsEpVPYgtpjGnrg==
}
dependencies
:
tinyspy
:
2.1.1
dev
:
true
/@vitest/spy@0.34.1
:
resolution
:
{
integrity
:
sha512-UT4WcI3EAPUNO8n6y9QoEqynGGEPmmRxC+cLzneFFXpmacivjHZsNbiKD88KUScv5DCHVDgdBsLD7O7s1enFcQ==
}
dependencies
:
...
...
@@ -4648,14 +4618,6 @@ packages:
tinyspy
:
2.1.1
dev
:
true
/@vitest/utils@0.33.0
:
resolution
:
{
integrity
:
sha512-pF1w22ic965sv+EN6uoePkAOTkAPWM03Ri/jXNyMIKBb/XHLDPfhLvf/Fa9g0YECevAIz56oVYXhodLvLQ/awA==
}
dependencies
:
diff-sequences
:
29.4.3
loupe
:
2.3.6
pretty-format
:
29.6.1
dev
:
true
/@vitest/utils@0.34.1
:
resolution
:
{
integrity
:
sha512-/ql9dsFi4iuEbiNcjNHQWXBum7aL8pyhxvfnD9gNtbjR9fUKAjxhj4AA3yfLXg6gJpMGGecvtF8Au2G9y3q47Q==
}
dependencies
:
...
...
@@ -4794,7 +4756,7 @@ packages:
picocolors
:
1.0.0
prettier
:
2.8.8
typescript
:
5.1.6
viem
:
1.
3.1
(typescript@5.1.6)(zod@3.22.0)
viem
:
1.
6.0
(typescript@5.1.6)(zod@3.22.0)
wagmi
:
1.0.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6)(viem@1.3.1)
zod
:
3.22.0
transitivePeerDependencies
:
...
...
@@ -8061,7 +8023,7 @@ packages:
eslint
:
8.47.0
dev
:
true
/eslint-config-standard@16.0.3(eslint-plugin-import@2.28.
0
)(eslint-plugin-node@11.1.0)(eslint-plugin-promise@5.2.0)(eslint@8.47.0)
:
/eslint-config-standard@16.0.3(eslint-plugin-import@2.28.
1
)(eslint-plugin-node@11.1.0)(eslint-plugin-promise@5.2.0)(eslint@8.47.0)
:
resolution
:
{
integrity
:
sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==
}
peerDependencies
:
eslint
:
^7.12.1
...
...
@@ -8070,7 +8032,7 @@ packages:
eslint-plugin-promise
:
^4.2.1 || ^5.0.0
dependencies
:
eslint
:
8.47.0
eslint-plugin-import
:
2.28.
0
(@typescript-eslint/parser@5.60.1)(eslint@8.47.0)
eslint-plugin-import
:
2.28.
1
(@typescript-eslint/parser@5.60.1)(eslint@8.47.0)
eslint-plugin-node
:
11.1.0(eslint@8.47.0)
eslint-plugin-promise
:
5.2.0(eslint@8.47.0)
dev
:
true
...
...
@@ -8125,8 +8087,8 @@ packages:
regexpp
:
3.2.0
dev
:
true
/eslint-plugin-import@2.28.
0
(@typescript-eslint/parser@5.60.1)(eslint@8.47.0)
:
resolution
:
{
integrity
:
sha512-
B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q
==
}
/eslint-plugin-import@2.28.
1
(@typescript-eslint/parser@5.60.1)(eslint@8.47.0)
:
resolution
:
{
integrity
:
sha512-
9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A
==
}
engines
:
{
node
:
'
>=4'
}
peerDependencies
:
'
@typescript-eslint/parser'
:
'
*'
...
...
@@ -8152,7 +8114,6 @@ packages:
object.fromentries
:
2.0.6
object.groupby
:
1.0.0
object.values
:
1.1.6
resolve
:
1.22.4
semver
:
6.3.1
tsconfig-paths
:
3.14.2
transitivePeerDependencies
:
...
...
@@ -15221,11 +15182,6 @@ packages:
resolution
:
{
integrity
:
sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==
}
dev
:
true
/tinypool@0.6.0
:
resolution
:
{
integrity
:
sha512-FdswUUo5SxRizcBc6b1GSuLpLjisa8N8qMyYoP3rl+bym+QauhtJP5bvZY1ytt8krKGmMLYIRl36HBZfeAoqhQ==
}
engines
:
{
node
:
'
>=14.0.0'
}
dev
:
true
/tinypool@0.7.0
:
resolution
:
{
integrity
:
sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==
}
engines
:
{
node
:
'
>=14.0.0'
}
...
...
@@ -16074,30 +16030,6 @@ packages:
-
utf-8-validate
-
zod
/viem@1.3.1(typescript@5.1.6)(zod@3.22.0)
:
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'
:
1.6.0(typescript@5.1.6)
abitype
:
0.9.3(typescript@5.1.6)(zod@3.22.0)
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
/viem@1.6.0(typescript@5.1.6)(zod@3.22.0)
:
resolution
:
{
integrity
:
sha512-ae9Twkd0q2Qlj4yYpWjb4DzYAhKY0ibEpRH8FJaTywZXNpTjFidSdBaT0CVn1BaH7O7cnX4/O47zvDUMGJD1AA==
}
peerDependencies
:
...
...
@@ -16148,28 +16080,6 @@ packages:
-
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
debug
:
4.3.4(supports-color@8.1.1)
mlly
:
1.4.0
pathe
:
1.1.1
picocolors
:
1.0.0
vite
:
4.4.9(@types/node@20.5.0)
transitivePeerDependencies
:
-
'
@types/node'
-
less
-
lightningcss
-
sass
-
stylus
-
sugarss
-
supports-color
-
terser
dev
:
true
/vite-node@0.34.1(@types/node@20.5.0)
:
resolution
:
{
integrity
:
sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==
}
engines
:
{
node
:
'
>=v14.18.0'
}
...
...
@@ -16322,72 +16232,6 @@ packages:
fsevents
:
2.3.2
dev
:
true
/vitest@0.33.0(jsdom@22.1.0)
:
resolution
:
{
integrity
:
sha512-1CxaugJ50xskkQ0e969R/hW47za4YXDUfWJDxip1hwbnhUjYolpfUn2AMOulqG/Dtd9WYAtkHmM/m3yKVrEejQ==
}
engines
:
{
node
:
'
>=v14.18.0'
}
hasBin
:
true
peerDependencies
:
'
@edge-runtime/vm'
:
'
*'
'
@vitest/browser'
:
'
*'
'
@vitest/ui'
:
'
*'
happy-dom
:
'
*'
jsdom
:
'
*'
playwright
:
'
*'
safaridriver
:
'
*'
webdriverio
:
'
*'
peerDependenciesMeta
:
'
@edge-runtime/vm'
:
optional
:
true
'
@vitest/browser'
:
optional
:
true
'
@vitest/ui'
:
optional
:
true
happy-dom
:
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.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
std-env
:
3.3.3
strip-literal
:
1.0.1
tinybench
:
2.5.0
tinypool
:
0.6.0
vite
:
4.4.9(@types/node@20.5.0)
vite-node
:
0.33.0(@types/node@20.5.0)
why-is-node-running
:
2.2.2
transitivePeerDependencies
:
-
less
-
lightningcss
-
sass
-
stylus
-
sugarss
-
supports-color
-
terser
dev
:
true
/vitest@0.34.1
:
resolution
:
{
integrity
:
sha512-G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVlQ==
}
engines
:
{
node
:
'
>=v14.18.0'
}
...
...
@@ -16453,7 +16297,7 @@ packages:
-
terser
dev
:
true
/vitest@0.34.2
:
/vitest@0.34.2
(jsdom@22.1.0)
:
resolution
:
{
integrity
:
sha512-WgaIvBbjsSYMq/oiMlXUI7KflELmzM43BEvkdC/8b5CAod4ryAiY2z8uR6Crbi5Pjnu5oOmhKa9sy7uk6paBxQ==
}
engines
:
{
node
:
'
>=v14.18.0'
}
hasBin
:
true
...
...
@@ -16497,6 +16341,7 @@ packages:
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
...
...
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