Commit 3d6c6a8b authored by mergify[bot]'s avatar mergify[bot] Committed by GitHub

Merge branch 'develop' into dependabot/npm_and_yarn/mocha-and-types/mocha-10.2.0

parents d53037bf 1e1b3ab9
......@@ -423,6 +423,19 @@ func checkL2ERC721Bridge(addr common.Address, client *ethclient.Client) error {
if otherBridge == (common.Address{}) {
return errors.New("L2ERC721Bridge.OTHERBRIDGE is zero address")
}
initialized, err := getInitialized("L2ERC721Bridge", addr, client)
if err != nil {
return err
}
log.Info("L2ERC721Bridge", "_initialized", initialized)
initializing, err := getInitializing("L2ERC721Bridge", addr, client)
if err != nil {
return err
}
log.Info("L2ERC721Bridge", "_initializing", initializing)
version, err := contract.Version(&bind.CallOpts{})
if err != nil {
return err
......@@ -614,6 +627,12 @@ func checkL2StandardBridge(addr common.Address, client *ethclient.Client) error
}
log.Info("L2StandardBridge", "_initialized", initialized)
initializing, err := getInitializing("L2StandardBridge", addr, client)
if err != nil {
return err
}
log.Info("L2StandardBridge", "_initializing", initializing)
log.Info("L2StandardBridge version", "version", version)
return nil
}
......@@ -727,6 +746,12 @@ func checkL2CrossDomainMessenger(addr common.Address, client *ethclient.Client)
}
log.Info("L2CrossDomainMessenger", "_initialized", initialized)
initializing, err := getInitializing("L2CrossDomainMessenger", addr, client)
if err != nil {
return err
}
log.Info("L2CrossDomainMessenger", "_initializing", initializing)
log.Info("L2CrossDomainMessenger version", "version", version)
return nil
}
......@@ -823,11 +848,33 @@ func getEIP1967ImplementationAddress(client *ethclient.Client, addr common.Addre
// This is an incrementing number that starts at 1 and increments each time that
// the contract is upgraded.
func getInitialized(name string, addr common.Address, client *ethclient.Client) (*big.Int, error) {
value, err := getStorageValue(name, "_initialized", addr, client)
if err != nil {
return nil, err
}
return new(big.Int).SetBytes(value), nil
}
// getInitializing will get the _initializing value in storage of a contract.
func getInitializing(name string, addr common.Address, client *ethclient.Client) (bool, error) {
value, err := getStorageValue(name, "_initializing", addr, client)
if err != nil {
return false, err
}
if len(value) != 1 {
return false, fmt.Errorf("Unexpected length for _initializing: %d", len(value))
}
return value[0] == 1, nil
}
// getStorageValue will get the value of a named storage slot in a contract. It isn't smart about
// automatically converting from a byte slice to a type, it is the caller's responsibility to do that.
func getStorageValue(name, entryName string, addr common.Address, client *ethclient.Client) ([]byte, error) {
layout, err := bindings.GetStorageLayout(name)
if err != nil {
return nil, err
}
entry, err := layout.GetStorageLayoutEntry("_initialized")
entry, err := layout.GetStorageLayoutEntry(entryName)
if err != nil {
return nil, err
}
......@@ -848,6 +895,5 @@ func getInitialized(name string, addr common.Address, client *ethclient.Client)
for i, j := 0, len(slice)-1; i < j; i, j = i+1, j-1 {
slice[i], slice[j] = slice[j], slice[i]
}
initialized := new(big.Int).SetBytes(slice[entry.Offset : entry.Offset+typ.NumberOfBytes])
return initialized, nil
return slice[entry.Offset : entry.Offset+typ.NumberOfBytes], nil
}
......@@ -58,7 +58,7 @@ func ValidTraceType(value TraceType) bool {
return false
}
const DefaultCannonSnapshotFreq = uint(10_000)
const DefaultCannonSnapshotFreq = uint(1_000_000_000)
// Config is a well typed config that is parsed from the CLI params.
// This also contains config options for auxiliary services.
......
package cannon
import (
"encoding/json"
"fmt"
"os"
"github.com/ethereum-optimism/optimism/cannon/mipsevm"
)
func parseState(path string) (*mipsevm.State, error) {
file, err := os.Open(path)
if err != nil {
return nil, fmt.Errorf("cannot open state file (%v): %w", path, err)
}
defer file.Close()
var state mipsevm.State
err = json.NewDecoder(file).Decode(&state)
if err != nil {
return nil, fmt.Errorf("invalid mipsevm state (%v): %w", path, err)
}
return &state, nil
}
......@@ -20,6 +20,7 @@ import (
const (
snapsDir = "snapshots"
preimagesDir = "preimages"
finalState = "final.json"
)
var snapshotNameRegexp = regexp.MustCompile(`^[0-9]+\.json$`)
......@@ -71,15 +72,21 @@ func (e *Executor) GenerateProof(ctx context.Context, dir string, i uint64) erro
}
proofDir := filepath.Join(dir, proofsDir)
dataDir := filepath.Join(e.dataDir, preimagesDir)
lastGeneratedState := filepath.Join(dir, finalState)
args := []string{
"run",
"--input", start,
"--output", filepath.Join(dir, "out.json"),
"--output", lastGeneratedState,
"--meta", "",
"--proof-at", "=" + strconv.FormatUint(i, 10),
"--proof-fmt", filepath.Join(proofDir, "%d.json"),
"--snapshot-at", "%" + strconv.FormatUint(uint64(e.snapshotFreq), 10),
"--snapshot-fmt", filepath.Join(snapshotDir, "%d.json"),
}
if i < math.MaxUint64 {
args = append(args, "--stop-at", "="+strconv.FormatUint(i+1, 10))
}
args = append(args,
"--",
e.server, "--server",
"--l1", e.l1,
......@@ -90,10 +97,7 @@ func (e *Executor) GenerateProof(ctx context.Context, dir string, i uint64) erro
"--l2.outputroot", e.inputs.l2OutputRoot.Hex(),
"--l2.claim", e.inputs.l2Claim.Hex(),
"--l2.blocknumber", e.inputs.l2BlockNumber.Text(10),
}
if i < math.MaxUint64 {
args = append(args, "--stop-at", "="+strconv.FormatUint(i+1, 10))
}
)
if e.network != "" {
args = append(args, "--network", e.network)
}
......
......@@ -36,7 +36,7 @@ func TestGenerateProof(t *testing.T) {
l2Claim: common.Hash{0x44},
l2BlockNumber: big.NewInt(3333),
}
captureExec := func(cfg config.Config, proofAt uint64) (string, string, map[string]string) {
captureExec := func(t *testing.T, cfg config.Config, proofAt uint64) (string, string, map[string]string) {
executor := NewExecutor(testlog.Logger(t, log.LvlInfo), &cfg, inputs)
executor.selectSnapshot = func(logger log.Logger, dir string, absolutePreState string, i uint64) (string, error) {
return input, nil
......@@ -67,7 +67,7 @@ func TestGenerateProof(t *testing.T) {
cfg.CannonNetwork = "mainnet"
cfg.CannonRollupConfigPath = ""
cfg.CannonL2GenesisPath = ""
binary, subcommand, args := captureExec(cfg, 150_000_000)
binary, subcommand, args := captureExec(t, cfg, 150_000_000)
require.DirExists(t, filepath.Join(cfg.CannonDatadir, preimagesDir))
require.DirExists(t, filepath.Join(cfg.CannonDatadir, proofsDir))
require.DirExists(t, filepath.Join(cfg.CannonDatadir, snapsDir))
......@@ -76,7 +76,7 @@ func TestGenerateProof(t *testing.T) {
require.Equal(t, input, args["--input"])
require.Contains(t, args, "--meta")
require.Equal(t, "", args["--meta"])
require.Equal(t, filepath.Join(cfg.CannonDatadir, "out.json"), args["--output"])
require.Equal(t, filepath.Join(cfg.CannonDatadir, finalState), args["--output"])
require.Equal(t, "=150000000", args["--proof-at"])
require.Equal(t, "=150000001", args["--stop-at"])
require.Equal(t, "%500", args["--snapshot-at"])
......@@ -105,7 +105,7 @@ func TestGenerateProof(t *testing.T) {
cfg.CannonNetwork = ""
cfg.CannonRollupConfigPath = "rollup.json"
cfg.CannonL2GenesisPath = "genesis.json"
_, _, args := captureExec(cfg, 150_000_000)
_, _, args := captureExec(t, cfg, 150_000_000)
require.NotContains(t, args, "--network")
require.Equal(t, cfg.CannonRollupConfigPath, args["--rollup.config"])
require.Equal(t, cfg.CannonL2GenesisPath, args["--l2.genesis"])
......@@ -115,7 +115,7 @@ func TestGenerateProof(t *testing.T) {
cfg.CannonNetwork = "mainnet"
cfg.CannonRollupConfigPath = "rollup.json"
cfg.CannonL2GenesisPath = "genesis.json"
_, _, args := captureExec(cfg, math.MaxUint64)
_, _, args := captureExec(t, cfg, math.MaxUint64)
// stop-at would need to be one more than the proof step which would overflow back to 0
// so expect that it will be omitted. We'll ultimately want cannon to execute until the program exits.
require.NotContains(t, args, "--stop-at")
......
......@@ -15,6 +15,7 @@ import (
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/log"
)
......@@ -38,9 +39,14 @@ type ProofGenerator interface {
}
type CannonTraceProvider struct {
logger log.Logger
dir string
prestate string
generator ProofGenerator
// lastStep stores the last step in the actual trace if known. 0 indicates unknown.
// Cached as an optimisation to avoid repeatedly attempting to execute beyond the end of the trace.
lastStep uint64
}
func NewTraceProvider(ctx context.Context, logger log.Logger, cfg *config.Config, l1Client bind.ContractCaller) (*CannonTraceProvider, error) {
......@@ -58,6 +64,7 @@ func NewTraceProvider(ctx context.Context, logger log.Logger, cfg *config.Config
return nil, fmt.Errorf("fetch local game inputs: %w", err)
}
return &CannonTraceProvider{
logger: logger,
dir: cfg.CannonDatadir,
prestate: cfg.CannonAbsolutePreState,
generator: NewExecutor(logger, cfg, l1Head),
......@@ -65,7 +72,7 @@ func NewTraceProvider(ctx context.Context, logger log.Logger, cfg *config.Config
}
func (p *CannonTraceProvider) GetOracleData(ctx context.Context, i uint64) (*types.PreimageOracleData, error) {
proof, err := p.loadProof(ctx, i)
proof, err := p.loadProofData(ctx, i)
if err != nil {
return nil, err
}
......@@ -74,10 +81,14 @@ func (p *CannonTraceProvider) GetOracleData(ctx context.Context, i uint64) (*typ
}
func (p *CannonTraceProvider) Get(ctx context.Context, i uint64) (common.Hash, error) {
proof, err := p.loadProof(ctx, i)
proof, state, err := p.loadProof(ctx, i)
if err != nil {
return common.Hash{}, err
}
if proof == nil && state != nil {
// Use the hash from the final state
return crypto.Keccak256Hash(state.EncodeWitness()), nil
}
value := common.BytesToHash(proof.ClaimValue)
if value == (common.Hash{}) {
......@@ -87,7 +98,7 @@ func (p *CannonTraceProvider) Get(ctx context.Context, i uint64) (common.Hash, e
}
func (p *CannonTraceProvider) GetPreimage(ctx context.Context, i uint64) ([]byte, []byte, error) {
proof, err := p.loadProof(ctx, i)
proof, err := p.loadProofData(ctx, i)
if err != nil {
return nil, nil, err
}
......@@ -104,37 +115,77 @@ func (p *CannonTraceProvider) GetPreimage(ctx context.Context, i uint64) ([]byte
func (p *CannonTraceProvider) AbsolutePreState(ctx context.Context) ([]byte, error) {
path := filepath.Join(p.dir, p.prestate)
file, err := os.Open(path)
state, err := parseState(path)
if err != nil {
return []byte{}, fmt.Errorf("cannot open state file (%v): %w", path, err)
return []byte{}, fmt.Errorf("cannot load absolute pre-state: %w", err)
}
defer file.Close()
var state mipsevm.State
err = json.NewDecoder(file).Decode(&state)
return state.EncodeWitness(), nil
}
// loadProofData loads the proof data for the specified step.
// If the requested index is beyond the end of the actual trace, the proof data from the last step is returned.
// Cannon will be executed a second time if required to generate the full proof data.
func (p *CannonTraceProvider) loadProofData(ctx context.Context, i uint64) (*proofData, error) {
proof, state, err := p.loadProof(ctx, i)
if err != nil {
return []byte{}, fmt.Errorf("invalid mipsevm state (%v): %w", path, err)
return nil, err
} else if proof == nil && state != nil {
p.logger.Info("Re-executing to generate proof for last step", "step", state.Step)
proof, _, err = p.loadProof(ctx, state.Step)
if err != nil {
return nil, err
}
if proof == nil {
return nil, fmt.Errorf("proof at step %v was not generated", i)
}
return proof, nil
}
return state.EncodeWitness(), nil
return proof, nil
}
func (p *CannonTraceProvider) loadProof(ctx context.Context, i uint64) (*proofData, error) {
// loadProof will attempt to load or generate the proof data at the specified index
// If the requested index is beyond the end of the actual trace:
// - When the actual trace length is known, the proof data from the last step is returned with nil state
// - When the actual trace length is not yet know, the state from after the last step is returned with nil proofData
// and the actual trace length is cached for future runs
func (p *CannonTraceProvider) loadProof(ctx context.Context, i uint64) (*proofData, *mipsevm.State, error) {
if p.lastStep != 0 && i > p.lastStep {
// If the requested index is after the last step in the actual trace, use the last step
i = p.lastStep
}
path := filepath.Join(p.dir, proofsDir, fmt.Sprintf("%d.json", i))
file, err := os.Open(path)
if errors.Is(err, os.ErrNotExist) {
if err := p.generator.GenerateProof(ctx, p.dir, i); err != nil {
return nil, fmt.Errorf("generate cannon trace with proof at %v: %w", i, err)
return nil, nil, fmt.Errorf("generate cannon trace with proof at %v: %w", i, err)
}
// Try opening the file again now and it should exist.
file, err = os.Open(path)
if errors.Is(err, os.ErrNotExist) {
// Expected proof wasn't generated, check if we reached the end of execution
state, err := parseState(filepath.Join(p.dir, finalState))
if err != nil {
return nil, nil, fmt.Errorf("cannot read final state: %w", err)
}
if state.Exited && state.Step < i {
p.logger.Warn("Requested proof was after the program exited", "proof", i, "last", state.Step)
// The final instruction has already been applied to this state, so the last step we can execute
// is one before its Step value.
p.lastStep = state.Step - 1
return nil, state, nil
} else {
return nil, nil, fmt.Errorf("expected proof not generated but final state was not exited, requested step %v, final state at step %v", i, state.Step)
}
}
}
if err != nil {
return nil, fmt.Errorf("cannot open proof file (%v): %w", path, err)
return nil, nil, fmt.Errorf("cannot open proof file (%v): %w", path, err)
}
defer file.Close()
var proof proofData
err = json.NewDecoder(file).Decode(&proof)
if err != nil {
return nil, fmt.Errorf("failed to read proof (%v): %w", path, err)
return nil, nil, fmt.Errorf("failed to read proof (%v): %w", path, err)
}
return &proof, nil
return &proof, nil, nil
}
......@@ -4,12 +4,17 @@ import (
"context"
"embed"
_ "embed"
"encoding/json"
"fmt"
"os"
"path/filepath"
"testing"
"github.com/ethereum-optimism/optimism/cannon/mipsevm"
"github.com/ethereum-optimism/optimism/op-node/testlog"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/log"
"github.com/stretchr/testify/require"
)
......@@ -19,29 +24,35 @@ var testData embed.FS
func TestGet(t *testing.T) {
dataDir, prestate := setupTestData(t)
t.Run("ExistingProof", func(t *testing.T) {
provider, generator := setupWithTestData(dataDir, prestate)
provider, generator := setupWithTestData(t, dataDir, prestate)
value, err := provider.Get(context.Background(), 0)
require.NoError(t, err)
require.Equal(t, common.HexToHash("0x45fd9aa59768331c726e719e76aa343e73123af888804604785ae19506e65e87"), value)
require.Empty(t, generator.generated)
})
t.Run("ProofUnavailable", func(t *testing.T) {
provider, generator := setupWithTestData(dataDir, prestate)
_, err := provider.Get(context.Background(), 7)
require.ErrorIs(t, err, os.ErrNotExist)
require.Contains(t, generator.generated, 7, "should have tried to generate the proof")
t.Run("ProofAfterEndOfTrace", func(t *testing.T) {
provider, generator := setupWithTestData(t, dataDir, prestate)
generator.finalState = &mipsevm.State{
Memory: &mipsevm.Memory{},
Step: 10,
Exited: true,
}
value, err := provider.Get(context.Background(), 7000)
require.NoError(t, err)
require.Contains(t, generator.generated, 7000, "should have tried to generate the proof")
require.Equal(t, crypto.Keccak256Hash(generator.finalState.EncodeWitness()), value)
})
t.Run("MissingPostHash", func(t *testing.T) {
provider, generator := setupWithTestData(dataDir, prestate)
provider, generator := setupWithTestData(t, dataDir, prestate)
_, err := provider.Get(context.Background(), 1)
require.ErrorContains(t, err, "missing post hash")
require.Empty(t, generator.generated)
})
t.Run("IgnoreUnknownFields", func(t *testing.T) {
provider, generator := setupWithTestData(dataDir, prestate)
provider, generator := setupWithTestData(t, dataDir, prestate)
value, err := provider.Get(context.Background(), 2)
require.NoError(t, err)
expected := common.HexToHash("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")
......@@ -53,7 +64,7 @@ func TestGet(t *testing.T) {
func TestGetOracleData(t *testing.T) {
dataDir, prestate := setupTestData(t)
t.Run("ExistingProof", func(t *testing.T) {
provider, generator := setupWithTestData(dataDir, prestate)
provider, generator := setupWithTestData(t, dataDir, prestate)
oracleData, err := provider.GetOracleData(context.Background(), 420)
require.NoError(t, err)
require.False(t, oracleData.IsLocal)
......@@ -64,15 +75,32 @@ func TestGetOracleData(t *testing.T) {
require.Empty(t, generator.generated)
})
t.Run("ProofUnavailable", func(t *testing.T) {
provider, generator := setupWithTestData(dataDir, prestate)
_, err := provider.GetOracleData(context.Background(), 7)
require.ErrorIs(t, err, os.ErrNotExist)
require.Contains(t, generator.generated, 7, "should have tried to generate the proof")
t.Run("ProofAfterEndOfTrace", func(t *testing.T) {
provider, generator := setupWithTestData(t, dataDir, prestate)
generator.finalState = &mipsevm.State{
Memory: &mipsevm.Memory{},
Step: 10,
Exited: true,
}
generator.proof = &proofData{
ClaimValue: common.Hash{0xaa}.Bytes(),
StateData: []byte{0xbb},
ProofData: []byte{0xcc},
OracleKey: common.Hash{0xdd}.Bytes(),
OracleValue: []byte{0xdd},
OracleOffset: 10,
}
oracleData, err := provider.GetOracleData(context.Background(), 7000)
require.NoError(t, err)
require.Contains(t, generator.generated, 7000, "should have tried to generate the proof")
require.Contains(t, generator.generated, 9, "should have regenerated proof from last step")
require.False(t, oracleData.IsLocal)
require.EqualValues(t, generator.proof.OracleKey, oracleData.OracleKey)
require.EqualValues(t, generator.proof.OracleValue, oracleData.OracleData)
})
t.Run("IgnoreUnknownFields", func(t *testing.T) {
provider, generator := setupWithTestData(dataDir, prestate)
provider, generator := setupWithTestData(t, dataDir, prestate)
oracleData, err := provider.GetOracleData(context.Background(), 421)
require.NoError(t, err)
require.False(t, oracleData.IsLocal)
......@@ -87,7 +115,7 @@ func TestGetOracleData(t *testing.T) {
func TestGetPreimage(t *testing.T) {
dataDir, prestate := setupTestData(t)
t.Run("ExistingProof", func(t *testing.T) {
provider, generator := setupWithTestData(dataDir, prestate)
provider, generator := setupWithTestData(t, dataDir, prestate)
value, proof, err := provider.GetPreimage(context.Background(), 0)
require.NoError(t, err)
expected := common.Hex2Bytes("b8f068de604c85ea0e2acd437cdb47add074a2d70b81d018390c504b71fe26f400000000000000000000000000000000000000000000000000000000000000000000000000")
......@@ -97,22 +125,38 @@ func TestGetPreimage(t *testing.T) {
require.Empty(t, generator.generated)
})
t.Run("ProofUnavailable", func(t *testing.T) {
provider, generator := setupWithTestData(dataDir, prestate)
_, _, err := provider.GetPreimage(context.Background(), 7)
require.ErrorIs(t, err, os.ErrNotExist)
require.Contains(t, generator.generated, 7, "should have tried to generate the proof")
t.Run("ProofAfterEndOfTrace", func(t *testing.T) {
provider, generator := setupWithTestData(t, dataDir, prestate)
generator.finalState = &mipsevm.State{
Memory: &mipsevm.Memory{},
Step: 10,
Exited: true,
}
generator.proof = &proofData{
ClaimValue: common.Hash{0xaa}.Bytes(),
StateData: []byte{0xbb},
ProofData: []byte{0xcc},
OracleKey: common.Hash{0xdd}.Bytes(),
OracleValue: []byte{0xdd},
OracleOffset: 10,
}
preimage, proof, err := provider.GetPreimage(context.Background(), 7000)
require.NoError(t, err)
require.Contains(t, generator.generated, 7000, "should have tried to generate the proof")
require.Contains(t, generator.generated, 9, "should have regenerated proof from last step")
require.EqualValues(t, generator.proof.StateData, preimage)
require.EqualValues(t, generator.proof.ProofData, proof)
})
t.Run("MissingStateData", func(t *testing.T) {
provider, generator := setupWithTestData(dataDir, prestate)
provider, generator := setupWithTestData(t, dataDir, prestate)
_, _, err := provider.GetPreimage(context.Background(), 1)
require.ErrorContains(t, err, "missing state data")
require.Empty(t, generator.generated)
})
t.Run("IgnoreUnknownFields", func(t *testing.T) {
provider, generator := setupWithTestData(dataDir, prestate)
provider, generator := setupWithTestData(t, dataDir, prestate)
value, proof, err := provider.GetPreimage(context.Background(), 2)
require.NoError(t, err)
expected := common.Hex2Bytes("cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")
......@@ -130,21 +174,21 @@ func TestAbsolutePreState(t *testing.T) {
prestate := "state.json"
t.Run("StateUnavailable", func(t *testing.T) {
provider, _ := setupWithTestData("/dir/does/not/exist", prestate)
provider, _ := setupWithTestData(t, "/dir/does/not/exist", prestate)
_, err := provider.AbsolutePreState(context.Background())
require.ErrorIs(t, err, os.ErrNotExist)
})
t.Run("InvalidStateFile", func(t *testing.T) {
setupPreState(t, dataDir, "invalid.json")
provider, _ := setupWithTestData(dataDir, prestate)
provider, _ := setupWithTestData(t, dataDir, prestate)
_, err := provider.AbsolutePreState(context.Background())
require.ErrorContains(t, err, "invalid mipsevm state")
})
t.Run("ExpectedAbsolutePreState", func(t *testing.T) {
setupPreState(t, dataDir, "state.json")
provider, _ := setupWithTestData(dataDir, prestate)
provider, _ := setupWithTestData(t, dataDir, prestate)
preState, err := provider.AbsolutePreState(context.Background())
require.NoError(t, err)
state := mipsevm.State{
......@@ -190,9 +234,10 @@ func setupTestData(t *testing.T) (string, string) {
return dataDir, "state.json"
}
func setupWithTestData(dataDir string, prestate string) (*CannonTraceProvider, *stubGenerator) {
func setupWithTestData(t *testing.T, dataDir string, prestate string) (*CannonTraceProvider, *stubGenerator) {
generator := &stubGenerator{}
return &CannonTraceProvider{
logger: testlog.Logger(t, log.LvlInfo),
dir: dataDir,
generator: generator,
prestate: prestate,
......@@ -200,10 +245,28 @@ func setupWithTestData(dataDir string, prestate string) (*CannonTraceProvider, *
}
type stubGenerator struct {
generated []int // Using int makes assertions easier
generated []int // Using int makes assertions easier
finalState *mipsevm.State
proof *proofData
}
func (e *stubGenerator) GenerateProof(ctx context.Context, dir string, i uint64) error {
e.generated = append(e.generated, int(i))
if e.finalState != nil && e.finalState.Step <= i {
// Requesting a trace index past the end of the trace
data, err := json.Marshal(e.finalState)
if err != nil {
return err
}
return os.WriteFile(filepath.Join(dir, finalState), data, 0644)
}
if e.proof != nil {
proofFile := filepath.Join(dir, proofsDir, fmt.Sprintf("%d.json", i))
data, err := json.Marshal(e.proof)
if err != nil {
return err
}
return os.WriteFile(proofFile, data, 0644)
}
return nil
}
......@@ -33,7 +33,7 @@ func (g *FaultGameHelper) GameDuration(ctx context.Context) time.Duration {
}
func (g *FaultGameHelper) WaitForClaimCount(ctx context.Context, count int64) {
ctx, cancel := context.WithTimeout(ctx, time.Minute)
ctx, cancel := context.WithTimeout(ctx, 2*time.Minute)
defer cancel()
err := utils.WaitFor(ctx, time.Second, func() (bool, error) {
actual, err := g.game.ClaimDataLen(&bind.CallOpts{Context: ctx})
......
......@@ -145,7 +145,6 @@ func TestChallengerCompleteDisputeGame(t *testing.T) {
}
func TestCannonDisputeGame(t *testing.T) {
t.Skip("CLI-4290: op-challenger doesn't handle trace extension correctly for cannon")
InitParallel(t)
ctx := context.Background()
......
......@@ -44,6 +44,6 @@
"solhint": "^3.4.1",
"solhint-plugin-prettier": "^0.0.5",
"ts-node": "^10.9.1",
"typescript": "^4.9.3"
"typescript": "^5.1.6"
}
}
......@@ -13,7 +13,7 @@ importers:
version: 2.26.0
'@codechecks/client':
specifier: ^0.1.11
version: 0.1.11(typescript@4.9.3)
version: 0.1.11(typescript@5.1.6)
devDependencies:
'@babel/eslint-parser':
specifier: ^7.18.2
......@@ -38,10 +38,10 @@ importers:
version: 12.20.20
'@typescript-eslint/eslint-plugin':
specifier: ^5.60.1
version: 5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.43.0)(typescript@4.9.3)
version: 5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.43.0)(typescript@5.1.6)
'@typescript-eslint/parser':
specifier: ^5.60.1
version: 5.60.1(eslint@8.43.0)(typescript@4.9.3)
version: 5.60.1(eslint@8.43.0)(typescript@5.1.6)
chai:
specifier: ^4.2.0
version: 4.3.4
......@@ -130,8 +130,8 @@ importers:
specifier: ^10.0.0
version: 10.0.0(mocha@10.2.0)
typescript:
specifier: ^4.9.3
version: 4.9.3
specifier: ^5.1.6
version: 5.1.6
endpoint-monitor: {}
......@@ -266,10 +266,10 @@ importers:
devDependencies:
'@typescript-eslint/eslint-plugin':
specifier: ^5.60.1
version: 5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.45.0)(typescript@4.9.3)
version: 5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.45.0)(typescript@5.1.6)
'@typescript-eslint/parser':
specifier: ^5.60.1
version: 5.60.1(eslint@8.45.0)(typescript@4.9.3)
version: 5.60.1(eslint@8.45.0)(typescript@5.1.6)
solhint:
specifier: ^3.4.1
version: 3.4.1
......@@ -278,10 +278,10 @@ importers:
version: 0.0.5(prettier-plugin-solidity@1.1.3)(prettier@2.8.8)
ts-node:
specifier: ^10.9.1
version: 10.9.1(@types/node@12.20.55)(typescript@4.9.3)
version: 10.9.1(@types/node@12.20.55)(typescript@5.1.6)
typescript:
specifier: ^4.9.3
version: 4.9.3
specifier: ^5.1.6
version: 5.1.6
packages/contracts-ts:
dependencies:
......@@ -485,7 +485,7 @@ importers:
version: 7.1.1(chai@4.3.7)
ethereum-waffle:
specifier: ^3.4.0
version: 3.4.0(typescript@4.9.3)
version: 3.4.0(typescript@5.1.6)
ethers:
specifier: ^5.7.0
version: 5.7.1
......@@ -506,10 +506,10 @@ importers:
version: 15.1.0
typedoc:
specifier: ^0.22.13
version: 0.22.13(typescript@4.9.3)
version: 0.22.13(typescript@5.1.6)
viem:
specifier: ^0.3.30
version: 0.3.30(typescript@4.9.3)(zod@3.20.2)
version: 0.3.30(typescript@5.1.6)(zod@3.20.2)
vitest:
specifier: ^0.28.3
version: 0.28.3
......@@ -1034,7 +1034,7 @@ packages:
prettier: 2.8.1
dev: false
/@codechecks/client@0.1.11(typescript@4.9.3):
/@codechecks/client@0.1.11(typescript@5.1.6):
resolution: {integrity: sha512-dSIzHnGNcXxDZtnVQEXWQHXH2v9KrpnK4mDGDxdwSu3l00rOIVwJcttj0wzx0bC0Q6gs65VsQdZH4gkanLdXOA==}
engines: {node: '>=6'}
hasBin: true
......@@ -1057,7 +1057,7 @@ packages:
request: 2.88.2
request-promise: 4.2.6(request@2.88.2)
ts-essentials: 1.0.4
ts-node: 8.10.2(typescript@4.9.3)
ts-node: 8.10.2(typescript@5.1.6)
url-join: 4.0.1
transitivePeerDependencies:
- supports-color
......@@ -1463,29 +1463,6 @@ packages:
- utf-8-validate
dev: true
/@ethereum-waffle/compiler@3.4.4(typescript@4.9.3):
resolution: {integrity: sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ==}
engines: {node: '>=10.0'}
dependencies:
'@resolver-engine/imports': 0.3.3
'@resolver-engine/imports-fs': 0.3.3
'@typechain/ethers-v5': 2.0.0(ethers@5.7.1)(typechain@3.0.0)
'@types/mkdirp': 0.5.2
'@types/node-fetch': 2.5.10
ethers: 5.7.1
mkdirp: 0.5.6
node-fetch: 2.6.12
solc: 0.6.12
ts-generator: 0.1.1
typechain: 3.0.0(typescript@4.9.3)
transitivePeerDependencies:
- bufferutil
- encoding
- supports-color
- typescript
- utf-8-validate
dev: true
/@ethereum-waffle/compiler@3.4.4(typescript@5.1.6):
resolution: {integrity: sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ==}
engines: {node: '>=10.0'}
......@@ -2391,7 +2368,7 @@ packages:
'@nomiclabs/hardhat-ethers': 2.0.2(ethers@5.7.1)(hardhat@2.9.6)
'@types/sinon-chai': 3.2.5
'@types/web3': 1.0.19
ethereum-waffle: 3.4.0(typescript@4.9.3)
ethereum-waffle: 3.4.0(typescript@5.1.6)
ethers: 5.7.1
hardhat: 2.9.6(chai@4.3.7)
dev: true
......@@ -3922,7 +3899,7 @@ packages:
'@types/yargs-parser': 21.0.0
dev: true
/@typescript-eslint/eslint-plugin@5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.43.0)(typescript@4.9.3):
/@typescript-eslint/eslint-plugin@5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.43.0)(typescript@5.1.6):
resolution: {integrity: sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
......@@ -3934,23 +3911,23 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.5.1
'@typescript-eslint/parser': 5.60.1(eslint@8.43.0)(typescript@4.9.3)
'@typescript-eslint/parser': 5.60.1(eslint@8.43.0)(typescript@5.1.6)
'@typescript-eslint/scope-manager': 5.60.1
'@typescript-eslint/type-utils': 5.60.1(eslint@8.43.0)(typescript@4.9.3)
'@typescript-eslint/utils': 5.60.1(eslint@8.43.0)(typescript@4.9.3)
'@typescript-eslint/type-utils': 5.60.1(eslint@8.43.0)(typescript@5.1.6)
'@typescript-eslint/utils': 5.60.1(eslint@8.43.0)(typescript@5.1.6)
debug: 4.3.4(supports-color@8.1.1)
eslint: 8.43.0
grapheme-splitter: 1.0.4
ignore: 5.2.4
natural-compare-lite: 1.4.0
semver: 7.5.3
tsutils: 3.21.0(typescript@4.9.3)
typescript: 4.9.3
tsutils: 3.21.0(typescript@5.1.6)
typescript: 5.1.6
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/eslint-plugin@5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.45.0)(typescript@4.9.3):
/@typescript-eslint/eslint-plugin@5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.45.0)(typescript@5.1.6):
resolution: {integrity: sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
......@@ -3962,23 +3939,23 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.5.1
'@typescript-eslint/parser': 5.60.1(eslint@8.45.0)(typescript@4.9.3)
'@typescript-eslint/parser': 5.60.1(eslint@8.45.0)(typescript@5.1.6)
'@typescript-eslint/scope-manager': 5.60.1
'@typescript-eslint/type-utils': 5.60.1(eslint@8.45.0)(typescript@4.9.3)
'@typescript-eslint/utils': 5.60.1(eslint@8.45.0)(typescript@4.9.3)
'@typescript-eslint/type-utils': 5.60.1(eslint@8.45.0)(typescript@5.1.6)
'@typescript-eslint/utils': 5.60.1(eslint@8.45.0)(typescript@5.1.6)
debug: 4.3.4(supports-color@8.1.1)
eslint: 8.45.0
grapheme-splitter: 1.0.4
ignore: 5.2.4
natural-compare-lite: 1.4.0
semver: 7.5.3
tsutils: 3.21.0(typescript@4.9.3)
typescript: 4.9.3
tsutils: 3.21.0(typescript@5.1.6)
typescript: 5.1.6
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/parser@5.60.1(eslint@8.43.0)(typescript@4.9.3):
/@typescript-eslint/parser@5.60.1(eslint@8.43.0)(typescript@5.1.6):
resolution: {integrity: sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
......@@ -3990,15 +3967,15 @@ packages:
dependencies:
'@typescript-eslint/scope-manager': 5.60.1
'@typescript-eslint/types': 5.60.1
'@typescript-eslint/typescript-estree': 5.60.1(typescript@4.9.3)
'@typescript-eslint/typescript-estree': 5.60.1(typescript@5.1.6)
debug: 4.3.4(supports-color@8.1.1)
eslint: 8.43.0
typescript: 4.9.3
typescript: 5.1.6
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/parser@5.60.1(eslint@8.45.0)(typescript@4.9.3):
/@typescript-eslint/parser@5.60.1(eslint@8.45.0)(typescript@5.1.6):
resolution: {integrity: sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
......@@ -4010,10 +3987,10 @@ packages:
dependencies:
'@typescript-eslint/scope-manager': 5.60.1
'@typescript-eslint/types': 5.60.1
'@typescript-eslint/typescript-estree': 5.60.1(typescript@4.9.3)
'@typescript-eslint/typescript-estree': 5.60.1(typescript@5.1.6)
debug: 4.3.4(supports-color@8.1.1)
eslint: 8.45.0
typescript: 4.9.3
typescript: 5.1.6
transitivePeerDependencies:
- supports-color
dev: true
......@@ -4026,7 +4003,7 @@ packages:
'@typescript-eslint/visitor-keys': 5.60.1
dev: true
/@typescript-eslint/type-utils@5.60.1(eslint@8.43.0)(typescript@4.9.3):
/@typescript-eslint/type-utils@5.60.1(eslint@8.43.0)(typescript@5.1.6):
resolution: {integrity: sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
......@@ -4036,17 +4013,17 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 5.60.1(typescript@4.9.3)
'@typescript-eslint/utils': 5.60.1(eslint@8.43.0)(typescript@4.9.3)
'@typescript-eslint/typescript-estree': 5.60.1(typescript@5.1.6)
'@typescript-eslint/utils': 5.60.1(eslint@8.43.0)(typescript@5.1.6)
debug: 4.3.4(supports-color@8.1.1)
eslint: 8.43.0
tsutils: 3.21.0(typescript@4.9.3)
typescript: 4.9.3
tsutils: 3.21.0(typescript@5.1.6)
typescript: 5.1.6
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/type-utils@5.60.1(eslint@8.45.0)(typescript@4.9.3):
/@typescript-eslint/type-utils@5.60.1(eslint@8.45.0)(typescript@5.1.6):
resolution: {integrity: sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
......@@ -4056,12 +4033,12 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 5.60.1(typescript@4.9.3)
'@typescript-eslint/utils': 5.60.1(eslint@8.45.0)(typescript@4.9.3)
'@typescript-eslint/typescript-estree': 5.60.1(typescript@5.1.6)
'@typescript-eslint/utils': 5.60.1(eslint@8.45.0)(typescript@5.1.6)
debug: 4.3.4(supports-color@8.1.1)
eslint: 8.45.0
tsutils: 3.21.0(typescript@4.9.3)
typescript: 4.9.3
tsutils: 3.21.0(typescript@5.1.6)
typescript: 5.1.6
transitivePeerDependencies:
- supports-color
dev: true
......@@ -4071,7 +4048,7 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/@typescript-eslint/typescript-estree@5.60.1(typescript@4.9.3):
/@typescript-eslint/typescript-estree@5.60.1(typescript@5.1.6):
resolution: {integrity: sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
......@@ -4086,13 +4063,13 @@ packages:
globby: 11.1.0
is-glob: 4.0.3
semver: 7.5.4
tsutils: 3.21.0(typescript@4.9.3)
typescript: 4.9.3
tsutils: 3.21.0(typescript@5.1.6)
typescript: 5.1.6
transitivePeerDependencies:
- supports-color
dev: true
/@typescript-eslint/utils@5.60.1(eslint@8.43.0)(typescript@4.9.3):
/@typescript-eslint/utils@5.60.1(eslint@8.43.0)(typescript@5.1.6):
resolution: {integrity: sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
......@@ -4103,7 +4080,7 @@ packages:
'@types/semver': 7.3.13
'@typescript-eslint/scope-manager': 5.60.1
'@typescript-eslint/types': 5.60.1
'@typescript-eslint/typescript-estree': 5.60.1(typescript@4.9.3)
'@typescript-eslint/typescript-estree': 5.60.1(typescript@5.1.6)
eslint: 8.43.0
eslint-scope: 5.1.1
semver: 7.5.4
......@@ -4112,7 +4089,7 @@ packages:
- typescript
dev: true
/@typescript-eslint/utils@5.60.1(eslint@8.45.0)(typescript@4.9.3):
/@typescript-eslint/utils@5.60.1(eslint@8.45.0)(typescript@5.1.6):
resolution: {integrity: sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
......@@ -4123,7 +4100,7 @@ packages:
'@types/semver': 7.3.13
'@typescript-eslint/scope-manager': 5.60.1
'@typescript-eslint/types': 5.60.1
'@typescript-eslint/typescript-estree': 5.60.1(typescript@4.9.3)
'@typescript-eslint/typescript-estree': 5.60.1(typescript@5.1.6)
eslint: 8.45.0
eslint-scope: 5.1.1
semver: 7.5.4
......@@ -4282,7 +4259,7 @@ packages:
resolution: {integrity: sha512-JtB41wXl7Au3+Nl3gD16Cfpj7k/6aCroZ6BbOiCMFCMvrOpkg/qQUXTso2XowaNqBbnkuGHurLAqkLBxNGc1hQ==}
dev: true
/@wagmi/chains@0.2.16(typescript@4.9.3):
/@wagmi/chains@0.2.16(typescript@5.1.6):
resolution: {integrity: sha512-rkWaI2PxCnbD8G07ZZff5QXftnSkYL0h5f4DkHCG3fGYYr/ZDvmCL4bMae7j7A9sAif1csPPBmbCzHp3R5ogCQ==}
peerDependencies:
typescript: '>=4.9.4'
......@@ -4290,7 +4267,7 @@ packages:
typescript:
optional: true
dependencies:
typescript: 4.9.3
typescript: 5.1.6
dev: true
/@wagmi/chains@0.2.22(typescript@5.1.6):
......@@ -5062,7 +5039,7 @@ packages:
dependencies:
typescript: 5.1.6
/abitype@0.8.2(typescript@4.9.3)(zod@3.20.2):
/abitype@0.8.2(typescript@5.1.6)(zod@3.20.2):
resolution: {integrity: sha512-B1ViNMGpfx/qjVQi0RTc2HEFHuR9uoCoTEkwELT5Y7pBPtBbctYijz9BK6+Kd0hQ3S70FhYTO2dWWk0QNUEXMA==}
peerDependencies:
typescript: '>=5.0.4'
......@@ -5071,7 +5048,7 @@ packages:
zod:
optional: true
dependencies:
typescript: 4.9.3
typescript: 5.1.6
zod: 3.20.2
dev: true
......@@ -8924,7 +8901,7 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
'@typescript-eslint/parser': 5.60.1(eslint@8.43.0)(typescript@4.9.3)
'@typescript-eslint/parser': 5.60.1(eslint@8.43.0)(typescript@5.1.6)
debug: 3.2.7
eslint-import-resolver-node: 0.3.6
find-up: 2.1.0
......@@ -8953,7 +8930,7 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
'@typescript-eslint/parser': 5.60.1(eslint@8.43.0)(typescript@4.9.3)
'@typescript-eslint/parser': 5.60.1(eslint@8.43.0)(typescript@5.1.6)
array-includes: 3.1.5
array.prototype.flat: 1.3.1
debug: 2.6.9
......@@ -9491,13 +9468,13 @@ packages:
setimmediate: 1.0.5
dev: true
/ethereum-waffle@3.4.0(typescript@4.9.3):
/ethereum-waffle@3.4.0(typescript@5.1.6):
resolution: {integrity: sha512-ADBqZCkoSA5Isk486ntKJVjFEawIiC+3HxNqpJqONvh3YXBTNiRfXvJtGuAFLXPG91QaqkGqILEHANAo7j/olQ==}
engines: {node: '>=10.0'}
hasBin: true
dependencies:
'@ethereum-waffle/chai': 3.4.4
'@ethereum-waffle/compiler': 3.4.4(typescript@4.9.3)
'@ethereum-waffle/compiler': 3.4.4(typescript@5.1.6)
'@ethereum-waffle/mock-contract': 3.4.4
'@ethereum-waffle/provider': 3.4.4
ethers: 5.7.1
......@@ -12772,7 +12749,7 @@ packages:
strong-log-transformer: 2.1.0
tar: 6.1.11
temp-dir: 1.0.0
typescript: 4.9.3
typescript: 4.9.5
upath: 2.0.1
uuid: 8.3.2
validate-npm-package-license: 3.0.4
......@@ -18526,14 +18503,6 @@ packages:
/ts-essentials@1.0.4:
resolution: {integrity: sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==}
/ts-essentials@6.0.7(typescript@4.9.3):
resolution: {integrity: sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==}
peerDependencies:
typescript: '>=3.7.0'
dependencies:
typescript: 4.9.3
dev: true
/ts-essentials@6.0.7(typescript@5.1.6):
resolution: {integrity: sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==}
peerDependencies:
......@@ -18574,37 +18543,6 @@ packages:
tsconfig-paths: 3.14.2
dev: true
/ts-node@10.9.1(@types/node@12.20.55)(typescript@4.9.3):
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
hasBin: true
peerDependencies:
'@swc/core': '>=1.2.50'
'@swc/wasm': '>=1.2.50'
'@types/node': '*'
typescript: '>=2.7'
peerDependenciesMeta:
'@swc/core':
optional: true
'@swc/wasm':
optional: true
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.9
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 12.20.55
acorn: 8.9.0
acorn-walk: 8.2.0
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
typescript: 4.9.3
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
dev: true
/ts-node@10.9.1(@types/node@12.20.55)(typescript@5.1.6):
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
hasBin: true
......@@ -18651,7 +18589,7 @@ packages:
yn: 2.0.0
dev: true
/ts-node@8.10.2(typescript@4.9.3):
/ts-node@8.10.2(typescript@5.1.6):
resolution: {integrity: sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==}
engines: {node: '>=6.0.0'}
hasBin: true
......@@ -18662,7 +18600,7 @@ packages:
diff: 4.0.2
make-error: 1.3.6
source-map-support: 0.5.21
typescript: 4.9.3
typescript: 5.1.6
yn: 3.1.1
dev: false
......@@ -18758,14 +18696,14 @@ packages:
- ts-node
dev: true
/tsutils@3.21.0(typescript@4.9.3):
/tsutils@3.21.0(typescript@5.1.6):
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
engines: {node: '>= 6'}
peerDependencies:
typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
dependencies:
tslib: 1.14.1
typescript: 4.9.3
typescript: 5.1.6
dev: true
/tty-table@4.1.6:
......@@ -18878,22 +18816,6 @@ packages:
resolution: {integrity: sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==}
dev: true
/typechain@3.0.0(typescript@4.9.3):
resolution: {integrity: sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==}
hasBin: true
dependencies:
command-line-args: 4.0.7
debug: 4.3.4(supports-color@8.1.1)
fs-extra: 7.0.1
js-sha3: 0.8.0
lodash: 4.17.21
ts-essentials: 6.0.7(typescript@4.9.3)
ts-generator: 0.1.1
transitivePeerDependencies:
- supports-color
- typescript
dev: true
/typechain@3.0.0(typescript@5.1.6):
resolution: {integrity: sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==}
hasBin: true
......@@ -18926,7 +18848,7 @@ packages:
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
dev: true
/typedoc@0.22.13(typescript@4.9.3):
/typedoc@0.22.13(typescript@5.1.6):
resolution: {integrity: sha512-NHNI7Dr6JHa/I3+c62gdRNXBIyX7P33O9TafGLd07ur3MqzcKgwTvpg18EtvCLHJyfeSthAtCLpM7WkStUmDuQ==}
engines: {node: '>= 12.10.0'}
hasBin: true
......@@ -18938,14 +18860,9 @@ packages:
marked: 4.0.12
minimatch: 5.0.1
shiki: 0.10.1
typescript: 4.9.3
typescript: 5.1.6
dev: true
/typescript@4.9.3:
resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==}
engines: {node: '>=4.2.0'}
hasBin: true
/typescript@4.9.5:
resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
engines: {node: '>=4.2.0'}
......@@ -19401,7 +19318,7 @@ packages:
vfile-message: 2.0.4
dev: true
/viem@0.3.30(typescript@4.9.3)(zod@3.20.2):
/viem@0.3.30(typescript@5.1.6)(zod@3.20.2):
resolution: {integrity: sha512-4jokEVR2vtDl6zSpZiPUaHviK2dzW6uxCAVUArlh0Jhrc4ms0dkhn5E4iwk1CWMto8+YeLFEgY4gr9P10ryoEQ==}
dependencies:
'@adraffy/ens-normalize': 1.9.0
......@@ -19409,8 +19326,8 @@ packages:
'@noble/hashes': 1.3.0
'@scure/bip32': 1.3.0
'@scure/bip39': 1.2.0
'@wagmi/chains': 0.2.16(typescript@4.9.3)
abitype: 0.8.2(typescript@4.9.3)(zod@3.20.2)
'@wagmi/chains': 0.2.16(typescript@5.1.6)
abitype: 0.8.2(typescript@5.1.6)(zod@3.20.2)
isomorphic-ws: 5.0.0(ws@8.12.0)
ws: 8.12.0
transitivePeerDependencies:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment