Commit 22d72617 authored by mergify[bot]'s avatar mergify[bot] Committed by GitHub

Merge branch 'develop' into refcell/challenger-touchup

parents 346d2d3e 406e1257
# Legacy codebases
# Packages
/packages/chain-mon @ethereum-optimism/devxpod
/packages/common-ts @ethereum-optimism/typescript-reviewers
/packages/contracts @ethereum-optimism/contract-reviewers
/packages/contracts-bedrock @ethereum-optimism/contract-reviewers
/packages/core-utils @ethereum-optimism/legacy-reviewers
/packages/chain-mon @ethereum-optimism/devxpod
/packages/replica-healthcheck @ethereum-optimism/legacy-reviewers
/packages/sdk @ethereum-optimism/devxpod
/packages/atst @ethereum-optimism/devxpod
# Bedrock codebases
/bedrock-devnet @ethereum-optimism/go-reviewers
/cannon @ethereum-optimism/go-reviewers
/op-batcher @ethereum-optimism/go-reviewers
/op-bootnode @ethereum-optimism/go-reviewers
/op-chain-ops @ethereum-optimism/go-reviewers
/op-challenger @ethereum-optimism/go-reviewers
/op-e2e @ethereum-optimism/go-reviewers
/op-exporter @ethereum-optimism/go-reviewers
/op-heartbeat @ethereum-optimism/go-reviewers
/op-node @ethereum-optimism/go-reviewers
/op-node/rollup @protolambda @trianglesphere
/op-proposer @ethereum-optimism/go-reviewers
/op-bootnode @ethereum-optimism/go-reviewers
/op-preimage @ethereum-optimism/go-reviewers
/op-program @ethereum-optimism/go-reviewers
/op-proposer @ethereum-optimism/go-reviewers
/op-service @ethereum-optimism/go-reviewers
/op-signer @ethereum-optimism/go-reviewers
/op-wheel @ethereum-optimism/go-reviewers
/ops-bedrock @ethereum-optimism/go-reviewers
# Ops
/.circleci @ethereum-optimism/infra-reviewers
/.github @ethereum-optimism/infra-reviewers
......@@ -37,8 +40,8 @@
/endpoint-monitor @ethereum-optimism/infra-reviewers
# Don't add owners if only package.json is updated
/packages/*/package.json
/*/package.json
/packages/*/package.json
/*/package.json
# JavaScript Releases
/packages/*/CHANGELOG.md @ethereum-optimism/release-managers
......
......@@ -9,9 +9,12 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/log"
)
const proofsDir = "proofs"
const (
proofsDir = "proofs"
)
type proofData struct {
ClaimValue hexutil.Bytes `json:"post"`
......@@ -19,13 +22,20 @@ type proofData struct {
ProofData hexutil.Bytes `json:"proof-data"`
}
type Executor interface {
// GenerateProof executes cannon to generate a proof at the specified trace index in dataDir.
GenerateProof(dataDir string, proofAt uint64) error
}
type CannonTraceProvider struct {
dir string
dir string
executor Executor
}
func NewCannonTraceProvider(dataDir string) *CannonTraceProvider {
func NewCannonTraceProvider(logger log.Logger, dataDir string) *CannonTraceProvider {
return &CannonTraceProvider{
dir: dataDir,
dir: dataDir,
executor: newExecutor(logger),
}
}
......@@ -65,6 +75,13 @@ func (p *CannonTraceProvider) AbsolutePreState() []byte {
func (p *CannonTraceProvider) loadProof(i uint64) (*proofData, error) {
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.executor.GenerateProof(p.dir, i); err != nil {
return 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 err != nil {
return nil, fmt.Errorf("cannot open proof file (%v): %w", path, err)
}
......
......@@ -15,63 +15,79 @@ import (
var testData embed.FS
func TestGet(t *testing.T) {
provider := setupWithTestData(t)
dataDir := setupTestData(t)
t.Run("ExistingProof", func(t *testing.T) {
provider, executor := setupWithTestData(dataDir)
value, err := provider.Get(0)
require.NoError(t, err)
require.Equal(t, common.HexToHash("0x45fd9aa59768331c726e719e76aa343e73123af888804604785ae19506e65e87"), value)
require.Empty(t, executor.generated)
})
t.Run("ProofUnavailable", func(t *testing.T) {
provider, executor := setupWithTestData(dataDir)
_, err := provider.Get(7)
require.ErrorIs(t, err, os.ErrNotExist)
require.Contains(t, executor.generated, 7, "should have tried to generate the proof")
})
t.Run("MissingPostHash", func(t *testing.T) {
provider, executor := setupWithTestData(dataDir)
_, err := provider.Get(1)
require.ErrorContains(t, err, "missing post hash")
require.Empty(t, executor.generated)
})
t.Run("IgnoreUnknownFields", func(t *testing.T) {
provider, executor := setupWithTestData(dataDir)
value, err := provider.Get(2)
require.NoError(t, err)
expected := common.HexToHash("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")
require.Equal(t, expected, value)
require.Empty(t, executor.generated)
})
}
func TestGetPreimage(t *testing.T) {
provider := setupWithTestData(t)
dataDir := setupTestData(t)
t.Run("ExistingProof", func(t *testing.T) {
provider, executor := setupWithTestData(dataDir)
value, proof, err := provider.GetPreimage(0)
require.NoError(t, err)
expected := common.Hex2Bytes("b8f068de604c85ea0e2acd437cdb47add074a2d70b81d018390c504b71fe26f400000000000000000000000000000000000000000000000000000000000000000000000000")
require.Equal(t, expected, value)
expectedProof := common.Hex2Bytes("08028e3c0000000000000000000000003c01000a24210b7c00200008000000008fa40004")
require.Equal(t, expectedProof, proof)
require.Empty(t, executor.generated)
})
t.Run("ProofUnavailable", func(t *testing.T) {
provider, executor := setupWithTestData(dataDir)
_, _, err := provider.GetPreimage(7)
require.ErrorIs(t, err, os.ErrNotExist)
require.Contains(t, executor.generated, 7, "should have tried to generate the proof")
})
t.Run("MissingStateData", func(t *testing.T) {
provider, executor := setupWithTestData(dataDir)
_, _, err := provider.GetPreimage(1)
require.ErrorContains(t, err, "missing state data")
require.Empty(t, executor.generated)
})
t.Run("IgnoreUnknownFields", func(t *testing.T) {
provider, executor := setupWithTestData(dataDir)
value, proof, err := provider.GetPreimage(2)
require.NoError(t, err)
expected := common.Hex2Bytes("cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc")
require.Equal(t, expected, value)
expectedProof := common.Hex2Bytes("dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd")
require.Equal(t, expectedProof, proof)
require.Empty(t, executor.generated)
})
}
func setupWithTestData(t *testing.T) *CannonTraceProvider {
func setupTestData(t *testing.T) string {
srcDir := filepath.Join("test_data", "proofs")
entries, err := testData.ReadDir(srcDir)
require.NoError(t, err)
......@@ -84,5 +100,22 @@ func setupWithTestData(t *testing.T) *CannonTraceProvider {
err = os.WriteFile(filepath.Join(dataDir, "proofs", entry.Name()), file, 0o644)
require.NoErrorf(t, err, "writing %v", path)
}
return NewCannonTraceProvider(dataDir)
return dataDir
}
func setupWithTestData(dataDir string) (*CannonTraceProvider, *stubExecutor) {
executor := &stubExecutor{}
return &CannonTraceProvider{
dir: dataDir,
executor: executor,
}, executor
}
type stubExecutor struct {
generated []int // Using int makes assertions easier
}
func (e *stubExecutor) GenerateProof(dir string, i uint64) error {
e.generated = append(e.generated, int(i))
return nil
}
package cannon
import (
"fmt"
"github.com/ethereum/go-ethereum/log"
)
type executor struct {
logger log.Logger
}
func newExecutor(logger log.Logger) Executor {
return &executor{
logger: logger,
}
}
func (e *executor) GenerateProof(dir string, i uint64) error {
return fmt.Errorf("please execute cannon with --proof-at %v --proof-fmt %v/%v/%%d.json", i, dir, proofsDir)
}
......@@ -55,7 +55,7 @@ func NewService(ctx context.Context, logger log.Logger, cfg *config.Config) (*se
var trace types.TraceProvider
switch cfg.TraceType {
case config.TraceTypeCannon:
trace = cannon.NewCannonTraceProvider(cfg.CannonDatadir)
trace = cannon.NewCannonTraceProvider(logger, cfg.CannonDatadir)
case config.TraceTypeAlphabet:
trace = NewAlphabetProvider(cfg.AlphabetTrace, uint64(cfg.GameDepth))
default:
......
......@@ -30,7 +30,7 @@ FROM ethereum/client-go:alltools-v1.10.25 as geth
FROM ghcr.io/crytic/echidna/echidna:v2.0.4 as echidna-test
FROM python:3.8.13-slim-bullseye
FROM python:3.11.4-slim-bullseye
ENV GOPATH=/go
ENV PATH=/usr/local/go/bin:$GOPATH/bin:$PATH
......
......@@ -10,12 +10,13 @@ import semver
# Minimum version numbers for packages migrating from legacy versioning.
MIN_VERSIONS = {
'ci-builder': '0.6.0',
'indexer': '0.5.0',
'op-node': '0.10.14',
'op-batcher': '0.10.14',
'op-proposer': '0.10.14',
'proxyd': '3.16.0',
'indexer': '0.5.0',
'ci-builder': '0.6.0'
'op-ufm': '0.1.0',
'proxyd': '3.16.0'
}
VALID_BUMPS = ('major', 'minor', 'patch', 'prerelease', 'finalize-prerelease')
......
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