Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -277,12 +277,11 @@ require (
rsc.io/tmplfunc v0.0.3 // indirect
)

replace github.com/ethereum/go-ethereum v1.13.15 => github.com/bnb-chain/op-geth v1.101315.2-0.0.20250418091555-2b39d61b7cbf
// https://github.com/bnb-chain/op-geth/tree/tee-base-stateless-poc
replace github.com/ethereum/go-ethereum v1.13.15 => github.com/bnb-chain/op-geth v1.101315.2-0.0.20250520053659-1fde7613d115

replace github.com/cometbft/cometbft => github.com/bnb-chain/greenfield-cometbft v1.0.0

//replace github.com/ethereum/go-ethereum v1.13.9 => ../op-geth

// replace github.com/ethereum-optimism/superchain-registry/superchain => ../superchain-registry/superchain

// This release keeps breaking Go builds. Stop that.
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -184,8 +184,8 @@ github.com/bnb-chain/fastssz v0.1.2 h1:vTcXw5SwCtRYnl/BEclujiml7GXiVOZ74tub4GHpv
github.com/bnb-chain/fastssz v0.1.2/go.mod h1:KcabV+OEw2QwgyY8Fc88ZG79CKYkFdu0kKWyfA3dI6o=
github.com/bnb-chain/greenfield-cometbft v1.0.0 h1:0r6hOJWD/+es0gxP/exKuN/krgXAr3LCn5/XlcgDWr8=
github.com/bnb-chain/greenfield-cometbft v1.0.0/go.mod h1:f35mk/r5ab6yvzlqEWZt68LfUje68sYgMpVlt2CUYMk=
github.com/bnb-chain/op-geth v1.101315.2-0.0.20250418091555-2b39d61b7cbf h1:7Ry/NtfhCFelZRVhw5cPwveX8uVFchalL+qhUcn5CMA=
github.com/bnb-chain/op-geth v1.101315.2-0.0.20250418091555-2b39d61b7cbf/go.mod h1:hyHrrcHkUe3lRwfJs+JGrbOHp+pRdheRk+ren4TPhF8=
github.com/bnb-chain/op-geth v1.101315.2-0.0.20250520053659-1fde7613d115 h1:zIqD55hPe6tiZPrOhR8x40MV8iQNjjouajkmmmf6qZo=
github.com/bnb-chain/op-geth v1.101315.2-0.0.20250520053659-1fde7613d115/go.mod h1:hyHrrcHkUe3lRwfJs+JGrbOHp+pRdheRk+ren4TPhF8=
github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4=
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=
Expand Down
7 changes: 5 additions & 2 deletions op-batcher/batcher/channel.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,12 @@ type channel struct {
minInclusionBlock uint64
// Inclusion block number of last confirmed TX
maxInclusionBlock uint64

outFactory ChannelOutFactory
}

func newChannel(log log.Logger, metr metrics.Metricer, cfg ChannelConfig, rollupCfg *rollup.Config, latestL1OriginBlockNum uint64) (*channel, error) {
cb, err := NewChannelBuilder(cfg, *rollupCfg, latestL1OriginBlockNum)
func newChannel(log log.Logger, metr metrics.Metricer, cfg ChannelConfig, rollupCfg *rollup.Config, outFactory ChannelOutFactory, latestL1OriginBlockNum uint64) (*channel, error) {
cb, err := NewChannelBuilder(cfg, *rollupCfg, outFactory, latestL1OriginBlockNum)
if err != nil {
return nil, fmt.Errorf("creating new channel: %w", err)
}
Expand All @@ -47,6 +49,7 @@ func newChannel(log log.Logger, metr metrics.Metricer, cfg ChannelConfig, rollup
channelBuilder: cb,
pendingTransactions: make(map[string]txData),
confirmedTransactions: make(map[string]eth.BlockID),
outFactory: outFactory,
}, nil
}

Expand Down
29 changes: 24 additions & 5 deletions op-batcher/batcher/channel_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,20 @@ type ChannelBuilder struct {
outputBytes int
}

// NewChannelBuilder creates a new channel builder or returns an error if the
// channel out could not be created.
// it acts as a factory for either a span or singular channel out
func NewChannelBuilder(cfg ChannelConfig, rollupCfg rollup.Config, latestL1OriginBlockNum uint64) (*ChannelBuilder, error) {
type ChannelOutFactory func(cfg ChannelConfig, rollupCfg *rollup.Config) (derive.ChannelOut, error)

// NewChannelOut creates a new channel out based on the given configuration.
func NewChannelOut(cfg ChannelConfig, rollupCfg *rollup.Config) (derive.ChannelOut, error) {
var (
co derive.ChannelOut
err error
)

c, err := cfg.CompressorConfig.NewCompressor()
if err != nil {
return nil, err
}
var co derive.ChannelOut

if cfg.BatchType == derive.SpanBatchType {
co, err = derive.NewSpanChannelOut(rollupCfg.Genesis.L2Time, rollupCfg.L2ChainID, cfg.CompressorConfig.TargetOutputSize, cfg.CompressorConfig.CompressionAlgo)
} else {
Expand All @@ -93,6 +98,20 @@ func NewChannelBuilder(cfg ChannelConfig, rollupCfg rollup.Config, latestL1Origi
if err != nil {
return nil, fmt.Errorf("creating channel out: %w", err)
}
return co, nil
}

// NewChannelBuilder creates a new channel builder or returns an error if the
// channel out could not be created.
// it acts as a factory for either a span or singular channel out
func NewChannelBuilder(cfg ChannelConfig, rollupCfg rollup.Config, outFactory ChannelOutFactory, latestL1OriginBlockNum uint64) (*ChannelBuilder, error) {
if outFactory == nil {
outFactory = NewChannelOut
}
co, err := outFactory(cfg, &rollupCfg)
if err != nil {
return nil, err
}

cb := &ChannelBuilder{
cfg: cfg,
Expand Down
44 changes: 22 additions & 22 deletions op-batcher/batcher/channel_builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ func FuzzDurationTimeoutZeroMaxChannelDuration(f *testing.F) {
f.Fuzz(func(t *testing.T, l1BlockNum uint64) {
channelConfig := defaultTestChannelConfig()
channelConfig.MaxChannelDuration = 0
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)
cb.timeout = 0
cb.updateDurationTimeout(l1BlockNum)
Expand All @@ -128,7 +128,7 @@ func FuzzChannelBuilder_DurationZero(f *testing.F) {
// Create the channel builder
channelConfig := defaultTestChannelConfig()
channelConfig.MaxChannelDuration = maxChannelDuration
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)

// Whenever the timeout is set to 0, the channel builder should have a duration timeout
Expand All @@ -155,7 +155,7 @@ func FuzzDurationTimeoutMaxChannelDuration(f *testing.F) {
// Create the channel builder
channelConfig := defaultTestChannelConfig()
channelConfig.MaxChannelDuration = maxChannelDuration
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)

// Whenever the timeout is greater than the l1BlockNum,
Expand Down Expand Up @@ -189,7 +189,7 @@ func FuzzChannelCloseTimeout(f *testing.F) {
channelConfig := defaultTestChannelConfig()
channelConfig.ChannelTimeout = channelTimeout
channelConfig.SubSafetyMargin = subSafetyMargin
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)

// Check the timeout
Expand Down Expand Up @@ -217,7 +217,7 @@ func FuzzChannelZeroCloseTimeout(f *testing.F) {
channelConfig := defaultTestChannelConfig()
channelConfig.ChannelTimeout = channelTimeout
channelConfig.SubSafetyMargin = subSafetyMargin
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)

// Check the timeout
Expand All @@ -244,7 +244,7 @@ func FuzzSeqWindowClose(f *testing.F) {
channelConfig := defaultTestChannelConfig()
channelConfig.SeqWindowSize = seqWindowSize
channelConfig.SubSafetyMargin = subSafetyMargin
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)

// Check the timeout
Expand Down Expand Up @@ -272,7 +272,7 @@ func FuzzSeqWindowZeroTimeoutClose(f *testing.F) {
channelConfig := defaultTestChannelConfig()
channelConfig.SeqWindowSize = seqWindowSize
channelConfig.SubSafetyMargin = subSafetyMargin
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)

// Check the timeout
Expand Down Expand Up @@ -318,7 +318,7 @@ func TestChannelBuilder_NextFrame(t *testing.T) {
channelConfig := defaultTestChannelConfig()

// Create a new channel builder
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)

// Mock the internals of `ChannelBuilder.outputFrame`
Expand Down Expand Up @@ -359,7 +359,7 @@ func ChannelBuilder_OutputWrongFramePanic(t *testing.T, batchType uint) {
channelConfig.BatchType = batchType

// Construct a channel builder
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)

// Mock the internals of `ChannelBuilder.outputFrame`
Expand Down Expand Up @@ -395,7 +395,7 @@ func TestChannelBuilder_OutputFrames(t *testing.T) {
channelConfig.InitNoneCompressor()

// Construct the channel builder
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)
require.False(t, cb.IsFull())
require.Equal(t, 0, cb.PendingFrames())
Expand Down Expand Up @@ -453,7 +453,7 @@ func ChannelBuilder_OutputFrames_SpanBatch(t *testing.T, algo derive.Compression
channelConfig.InitRatioCompressor(1, algo)

// Construct the channel builder
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)
require.False(t, cb.IsFull())
require.Equal(t, 0, cb.PendingFrames())
Expand Down Expand Up @@ -510,7 +510,7 @@ func ChannelBuilder_MaxRLPBytesPerChannel(t *testing.T, batchType uint) {
channelConfig.BatchType = batchType

// Construct the channel builder
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)

// Add a block that overflows the [ChannelOut]
Expand All @@ -532,7 +532,7 @@ func ChannelBuilder_OutputFramesMaxFrameIndex(t *testing.T, batchType uint) {
// Continuously add blocks until the max frame index is reached
// This should cause the [ChannelBuilder.OutputFrames] function
// to error
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)
require.False(t, cb.IsFull())
require.Equal(t, 0, cb.PendingFrames())
Expand Down Expand Up @@ -568,7 +568,7 @@ func TestChannelBuilder_FullShadowCompressor(t *testing.T) {
}

cfg.InitShadowCompressor(derive.Zlib)
cb, err := NewChannelBuilder(cfg, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(cfg, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(err)

rng := rand.New(rand.NewSource(420))
Expand Down Expand Up @@ -600,7 +600,7 @@ func ChannelBuilder_AddBlock(t *testing.T, batchType uint) {
channelConfig.InitRatioCompressor(1, derive.Zlib)

// Construct the channel builder
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)

// Add a nonsense block to the channel builder
Expand All @@ -626,7 +626,7 @@ func TestChannelBuilder_CheckTimeout(t *testing.T) {
channelConfig := defaultTestChannelConfig()

// Construct the channel builder
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)

// Assert timeout is setup correctly
Expand All @@ -651,7 +651,7 @@ func TestChannelBuilder_CheckTimeoutZeroMaxChannelDuration(t *testing.T) {
channelConfig.MaxChannelDuration = 0

// Construct the channel builder
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(channelConfig, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)

// Without a max channel duration, timeout should not be set
Expand All @@ -674,7 +674,7 @@ func TestChannelBuilder_FramePublished(t *testing.T) {
cfg.SubSafetyMargin = 100

// Construct the channel builder
cb, err := NewChannelBuilder(cfg, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(cfg, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)
require.Equal(t, latestL1BlockOrigin+cfg.MaxChannelDuration, cb.timeout)

Expand All @@ -691,7 +691,7 @@ func TestChannelBuilder_FramePublished(t *testing.T) {
}

func TestChannelBuilder_LatestL1Origin(t *testing.T) {
cb, err := NewChannelBuilder(defaultTestChannelConfig(), defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(defaultTestChannelConfig(), defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(t, err)
require.Equal(t, eth.BlockID{}, cb.LatestL1Origin())

Expand Down Expand Up @@ -721,7 +721,7 @@ func ChannelBuilder_PendingFrames_TotalFrames(t *testing.T, batchType uint) {
cfg.TargetNumFrames = tnf
cfg.BatchType = batchType
cfg.InitShadowCompressor(derive.Zlib)
cb, err := NewChannelBuilder(cfg, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(cfg, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(err)

// initial builder should be empty
Expand Down Expand Up @@ -766,7 +766,7 @@ func ChannelBuilder_InputBytes(t *testing.T, batchType uint) {
chainId := big.NewInt(1234)
spanBatch = derive.NewSpanBatch(uint64(0), chainId)
}
cb, err := NewChannelBuilder(cfg, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(cfg, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(err)

require.Zero(cb.InputBytes())
Expand Down Expand Up @@ -803,7 +803,7 @@ func ChannelBuilder_OutputBytes(t *testing.T, batchType uint) {
cfg.TargetNumFrames = 16
cfg.BatchType = batchType
cfg.InitRatioCompressor(1.0, derive.Zlib)
cb, err := NewChannelBuilder(cfg, defaultTestRollupConfig, latestL1BlockOrigin)
cb, err := NewChannelBuilder(cfg, defaultTestRollupConfig, nil, latestL1BlockOrigin)
require.NoError(err, "NewChannelBuilder")

require.Zero(cb.OutputBytes())
Expand Down
7 changes: 5 additions & 2 deletions op-batcher/batcher/channel_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,18 @@ type channelManager struct {
closed bool

isVolta bool

outFactory ChannelOutFactory
}

func NewChannelManager(log log.Logger, metr metrics.Metricer, cfg ChannelConfig, rollupCfg *rollup.Config) *channelManager {
func NewChannelManager(log log.Logger, metr metrics.Metricer, cfg ChannelConfig, rollupCfg *rollup.Config, outFactory ChannelOutFactory) *channelManager {
return &channelManager{
log: log,
metr: metr,
cfg: cfg,
rollupCfg: rollupCfg,
txChannels: make(map[string]*channel),
outFactory: outFactory,
}
}

Expand Down Expand Up @@ -206,7 +209,7 @@ func (s *channelManager) ensureChannelWithSpace(l1Head eth.BlockID) error {
return nil
}

pc, err := newChannel(s.log, s.metr, s.cfg, s.rollupCfg, s.l1OriginLastClosedChannel.Number)
pc, err := newChannel(s.log, s.metr, s.cfg, s.rollupCfg, s.outFactory, s.l1OriginLastClosedChannel.Number)
if err != nil {
return fmt.Errorf("creating new channel: %w", err)
}
Expand Down
Loading
Loading