Skip to content

Commit abb0111

Browse files
authored
Merge pull request OffchainLabs#3331 from OffchainLabs/refractor_stateless
Remove stateless_block_validator public function for reader, streamer and tracker
2 parents ca71621 + 55eabc7 commit abb0111

15 files changed

+127
-60
lines changed

arbnode/node.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,7 @@ func getStaker(
730730
deployInfo *chaininfo.RollupAddresses,
731731
txStreamer *TransactionStreamer,
732732
inboxTracker *InboxTracker,
733+
inboxReader *InboxReader,
733734
stack *node.Node,
734735
fatalErrChan chan error,
735736
statelessBlockValidator *staker.StatelessBlockValidator,
@@ -789,7 +790,7 @@ func getStaker(
789790
confirmedNotifiers = append(confirmedNotifiers, messagePruner)
790791
}
791792

792-
stakerObj, err = multiprotocolstaker.NewMultiProtocolStaker(stack, l1Reader, wallet, bind.CallOpts{}, func() *legacystaker.L1ValidatorConfig { return &configFetcher.Get().Staker }, &configFetcher.Get().Bold, blockValidator, statelessBlockValidator, nil, deployInfo.StakeToken, deployInfo.Rollup, confirmedNotifiers, deployInfo.ValidatorUtils, deployInfo.Bridge, fatalErrChan)
793+
stakerObj, err = multiprotocolstaker.NewMultiProtocolStaker(stack, l1Reader, wallet, bind.CallOpts{}, func() *legacystaker.L1ValidatorConfig { return &configFetcher.Get().Staker }, &configFetcher.Get().Bold, blockValidator, statelessBlockValidator, nil, deployInfo.StakeToken, deployInfo.Rollup, confirmedNotifiers, deployInfo.ValidatorUtils, deployInfo.Bridge, txStreamer, inboxTracker, inboxReader, fatalErrChan)
793794
if err != nil {
794795
return nil, nil, common.Address{}, err
795796
}
@@ -1110,7 +1111,7 @@ func createNodeImpl(
11101111
return nil, err
11111112
}
11121113

1113-
stakerObj, messagePruner, stakerAddr, err := getStaker(ctx, config, configFetcher, arbDb, l1Reader, txOptsValidator, syncMonitor, parentChainID, l1client, deployInfo, txStreamer, inboxTracker, stack, fatalErrChan, statelessBlockValidator, blockValidator)
1114+
stakerObj, messagePruner, stakerAddr, err := getStaker(ctx, config, configFetcher, arbDb, l1Reader, txOptsValidator, syncMonitor, parentChainID, l1client, deployInfo, txStreamer, inboxTracker, inboxReader, stack, fatalErrChan, statelessBlockValidator, blockValidator)
11141115
if err != nil {
11151116
return nil, err
11161117
}

staker/bold/bold_staker.go

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -190,17 +190,18 @@ func DelegatedStakingConfigAddOptions(prefix string, f *flag.FlagSet) {
190190

191191
type BOLDStaker struct {
192192
stopwaiter.StopWaiter
193-
config *BoldConfig
194-
chalManager *challengemanager.Manager
195-
blockValidator *staker.BlockValidator
196-
statelessBlockValidator *staker.StatelessBlockValidator
197-
rollupAddress common.Address
198-
l1Reader *headerreader.HeaderReader
199-
client protocol.ChainBackend
200-
callOpts bind.CallOpts
201-
wallet legacystaker.ValidatorWalletInterface
202-
stakedNotifiers []legacystaker.LatestStakedNotifier
203-
confirmedNotifiers []legacystaker.LatestConfirmedNotifier
193+
config *BoldConfig
194+
chalManager *challengemanager.Manager
195+
blockValidator *staker.BlockValidator
196+
rollupAddress common.Address
197+
l1Reader *headerreader.HeaderReader
198+
client protocol.ChainBackend
199+
callOpts bind.CallOpts
200+
wallet legacystaker.ValidatorWalletInterface
201+
stakedNotifiers []legacystaker.LatestStakedNotifier
202+
confirmedNotifiers []legacystaker.LatestConfirmedNotifier
203+
inboxTracker staker.InboxTrackerInterface
204+
inboxStreamer staker.TransactionStreamerInterface
204205
}
205206

206207
func NewBOLDStaker(
@@ -217,27 +218,31 @@ func NewBOLDStaker(
217218
wallet legacystaker.ValidatorWalletInterface,
218219
stakedNotifiers []legacystaker.LatestStakedNotifier,
219220
confirmedNotifiers []legacystaker.LatestConfirmedNotifier,
221+
inboxTracker staker.InboxTrackerInterface,
222+
inboxStreamer staker.TransactionStreamerInterface,
223+
inboxReader staker.InboxReaderInterface,
220224
) (*BOLDStaker, error) {
221225
if err := config.Validate(); err != nil {
222226
return nil, err
223227
}
224228
wrappedClient := util.NewBackendWrapper(l1Reader.Client(), rpc.LatestBlockNumber)
225-
manager, err := newBOLDChallengeManager(ctx, stack, rollupAddress, txOpts, l1Reader, wrappedClient, blockValidator, statelessBlockValidator, config, dataPoster)
229+
manager, err := newBOLDChallengeManager(ctx, stack, rollupAddress, txOpts, l1Reader, wrappedClient, blockValidator, statelessBlockValidator, config, dataPoster, inboxTracker, inboxStreamer, inboxReader)
226230
if err != nil {
227231
return nil, err
228232
}
229233
return &BOLDStaker{
230-
config: config,
231-
chalManager: manager,
232-
blockValidator: blockValidator,
233-
statelessBlockValidator: statelessBlockValidator,
234-
rollupAddress: rollupAddress,
235-
l1Reader: l1Reader,
236-
client: wrappedClient,
237-
callOpts: callOpts,
238-
wallet: wallet,
239-
stakedNotifiers: stakedNotifiers,
240-
confirmedNotifiers: confirmedNotifiers,
234+
config: config,
235+
chalManager: manager,
236+
blockValidator: blockValidator,
237+
rollupAddress: rollupAddress,
238+
l1Reader: l1Reader,
239+
client: wrappedClient,
240+
callOpts: callOpts,
241+
wallet: wallet,
242+
stakedNotifiers: stakedNotifiers,
243+
confirmedNotifiers: confirmedNotifiers,
244+
inboxTracker: inboxTracker,
245+
inboxStreamer: inboxStreamer,
241246
}, nil
242247
}
243248

@@ -343,7 +348,7 @@ func (b *BOLDStaker) getLatestState(ctx context.Context, confirmed bool) (arbuti
343348
if err != nil {
344349
return 0, nil, fmt.Errorf("error getting latest %s: %w", assertionType, err)
345350
}
346-
caughtUp, count, err := staker.GlobalStateToMsgCount(b.statelessBlockValidator.InboxTracker(), b.statelessBlockValidator.InboxStreamer(), validator.GoGlobalState(globalState))
351+
caughtUp, count, err := staker.GlobalStateToMsgCount(b.inboxTracker, b.inboxStreamer, validator.GoGlobalState(globalState))
347352
if err != nil {
348353
if errors.Is(err, staker.ErrGlobalStateNotInChain) {
349354
return 0, nil, fmt.Errorf("latest %s assertion of %v not yet in our node: %w", assertionType, globalState, err)
@@ -356,7 +361,7 @@ func (b *BOLDStaker) getLatestState(ctx context.Context, confirmed bool) (arbuti
356361
return 0, nil, nil
357362
}
358363

359-
processedCount, err := b.statelessBlockValidator.InboxStreamer().GetProcessedMessageCount()
364+
processedCount, err := b.inboxStreamer.GetProcessedMessageCount()
360365
if err != nil {
361366
return 0, nil, err
362367
}
@@ -409,6 +414,9 @@ func newBOLDChallengeManager(
409414
statelessBlockValidator *staker.StatelessBlockValidator,
410415
config *BoldConfig,
411416
dataPoster *dataposter.DataPoster,
417+
inboxTracker staker.InboxTrackerInterface,
418+
inboxStreamer staker.TransactionStreamerInterface,
419+
inboxReader staker.InboxReaderInterface,
412420
) (*challengemanager.Manager, error) {
413421
// Initializes the BOLD contract bindings and the assertion chain abstraction.
414422
rollupBindings, err := boldrollup.NewRollupUserLogic(rollupAddress, client)
@@ -499,6 +507,9 @@ func newBOLDChallengeManager(
499507
blockChallengeLeafHeight,
500508
&config.StateProviderConfig,
501509
machineHashesPath,
510+
inboxTracker,
511+
inboxStreamer,
512+
inboxReader,
502513
)
503514
if err != nil {
504515
return nil, fmt.Errorf("could not create state manager: %w", err)

staker/bold/bold_state_provider.go

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ type BOLDStateProvider struct {
4141
historyCache challengecache.HistoryCommitmentCacher
4242
blockChallengeLeafHeight l2stateprovider.Height
4343
stateProviderConfig *StateProviderConfig
44+
inboxTracker staker.InboxTrackerInterface
45+
inboxStreamer staker.TransactionStreamerInterface
46+
inboxReader staker.InboxReaderInterface
4447
sync.RWMutex
4548
}
4649

@@ -50,6 +53,9 @@ func NewBOLDStateProvider(
5053
blockChallengeLeafHeight l2stateprovider.Height,
5154
stateProviderConfig *StateProviderConfig,
5255
machineHashesCachePath string,
56+
inboxTracker staker.InboxTrackerInterface,
57+
inboxStreamer staker.TransactionStreamerInterface,
58+
inboxReader staker.InboxReaderInterface,
5359
) (*BOLDStateProvider, error) {
5460
historyCache, err := challengecache.New(machineHashesCachePath)
5561
if err != nil {
@@ -61,6 +67,9 @@ func NewBOLDStateProvider(
6167
historyCache: historyCache,
6268
blockChallengeLeafHeight: blockChallengeLeafHeight,
6369
stateProviderConfig: stateProviderConfig,
70+
inboxTracker: inboxTracker,
71+
inboxStreamer: inboxStreamer,
72+
inboxReader: inboxReader,
6473
}
6574
return sp, nil
6675
}
@@ -79,7 +88,7 @@ func (s *BOLDStateProvider) ExecutionStateAfterPreviousState(
7988
}
8089
batchIndex := maxSeqInboxCount
8190
maxNumberOfBlocks := uint64(s.blockChallengeLeafHeight)
82-
messageCount, err := s.statelessValidator.InboxTracker().GetBatchMessageCount(batchIndex - 1)
91+
messageCount, err := s.inboxTracker.GetBatchMessageCount(batchIndex - 1)
8392
if err != nil {
8493
if strings.Contains(err.Error(), "not found") {
8594
return nil, fmt.Errorf("%w: batch count %d", l2stateprovider.ErrChainCatchingUp, maxSeqInboxCount)
@@ -88,7 +97,7 @@ func (s *BOLDStateProvider) ExecutionStateAfterPreviousState(
8897
}
8998
var previousMessageCount arbutil.MessageIndex
9099
if previousGlobalState.Batch > 0 {
91-
previousMessageCount, err = s.statelessValidator.InboxTracker().GetBatchMessageCount(previousGlobalState.Batch - 1)
100+
previousMessageCount, err = s.inboxTracker.GetBatchMessageCount(previousGlobalState.Batch - 1)
92101
if err != nil {
93102
if strings.Contains(err.Error(), "not found") {
94103
return nil, fmt.Errorf("%w: batch count %d", l2stateprovider.ErrChainCatchingUp, maxSeqInboxCount)
@@ -101,7 +110,7 @@ func (s *BOLDStateProvider) ExecutionStateAfterPreviousState(
101110
maxMessageCount := previousMessageCount + arbutil.MessageIndex(maxNumberOfBlocks)
102111
if messageDiffBetweenBatches > maxMessageCount {
103112
messageCount = maxMessageCount
104-
batchIndex, _, err = s.statelessValidator.InboxTracker().FindInboxBatchContainingMessage(messageCount)
113+
batchIndex, _, err = s.inboxTracker.FindInboxBatchContainingMessage(messageCount)
105114
if err != nil {
106115
return nil, err
107116
}
@@ -146,7 +155,7 @@ func (s *BOLDStateProvider) isStateValidatedAndMessageCountPastThreshold(
146155
ctx context.Context, gs validator.GoGlobalState, messageCount arbutil.MessageIndex,
147156
) (bool, error) {
148157
if s.stateProviderConfig.CheckBatchFinality {
149-
finalizedMessageCount, err := s.statelessValidator.InboxReader().GetFinalizedMsgCount(ctx)
158+
finalizedMessageCount, err := s.inboxReader.GetFinalizedMsgCount(ctx)
150159
if err != nil {
151160
return false, err
152161
}
@@ -188,14 +197,14 @@ func (s *BOLDStateProvider) StatesInBatchRange(
188197
var prevBatchMsgCount arbutil.MessageIndex
189198
var err error
190199
if fromState.Batch > 0 {
191-
prevBatchMsgCount, err = s.statelessValidator.InboxTracker().GetBatchMessageCount(uint64(fromState.Batch) - 1)
200+
prevBatchMsgCount, err = s.inboxTracker.GetBatchMessageCount(uint64(fromState.Batch) - 1)
192201
if err != nil {
193202
return nil, nil, err
194203
}
195204
}
196205

197206
batchNum := fromState.Batch
198-
currBatchMsgCount, err := s.statelessValidator.InboxTracker().GetBatchMessageCount(batchNum)
207+
currBatchMsgCount, err := s.inboxTracker.GetBatchMessageCount(batchNum)
199208
if err != nil {
200209
return nil, nil, err
201210
}
@@ -210,7 +219,7 @@ func (s *BOLDStateProvider) StatesInBatchRange(
210219
}
211220
executionResult := &execution.MessageResult{}
212221
if pos > 0 {
213-
executionResult, err = s.statelessValidator.InboxStreamer().ResultAtMessageIndex(pos - 1)
222+
executionResult, err = s.inboxStreamer.ResultAtMessageIndex(pos - 1)
214223
if err != nil {
215224
return nil, nil, err
216225
}
@@ -234,7 +243,7 @@ func (s *BOLDStateProvider) StatesInBatchRange(
234243
// Otherwise, we might try to read too many batches, and hit an error that
235244
// the next batch isn't found.
236245
if uint64(len(states)) < totalDesiredHashes && batchNum < batchLimit {
237-
currBatchMsgCount, err = s.statelessValidator.InboxTracker().GetBatchMessageCount(batchNum)
246+
currBatchMsgCount, err = s.inboxTracker.GetBatchMessageCount(batchNum)
238247
if err != nil {
239248
return nil, nil, err
240249
}
@@ -254,7 +263,7 @@ func (s *BOLDStateProvider) findGlobalStateFromMessageCountAndBatch(count arbuti
254263
var prevBatchMsgCount arbutil.MessageIndex
255264
var err error
256265
if batchIndex > 0 {
257-
prevBatchMsgCount, err = s.statelessValidator.InboxTracker().GetBatchMessageCount(uint64(batchIndex) - 1)
266+
prevBatchMsgCount, err = s.inboxTracker.GetBatchMessageCount(uint64(batchIndex) - 1)
258267
if err != nil {
259268
return validator.GoGlobalState{}, err
260269
}
@@ -263,7 +272,7 @@ func (s *BOLDStateProvider) findGlobalStateFromMessageCountAndBatch(count arbuti
263272
}
264273
}
265274
if count != prevBatchMsgCount {
266-
batchMsgCount, err := s.statelessValidator.InboxTracker().GetBatchMessageCount(uint64(batchIndex))
275+
batchMsgCount, err := s.inboxTracker.GetBatchMessageCount(uint64(batchIndex))
267276
if err != nil {
268277
return validator.GoGlobalState{}, err
269278
}
@@ -273,7 +282,7 @@ func (s *BOLDStateProvider) findGlobalStateFromMessageCountAndBatch(count arbuti
273282
}
274283
res := &execution.MessageResult{}
275284
if count > 0 {
276-
res, err = s.statelessValidator.InboxStreamer().ResultAtMessageIndex(count - 1)
285+
res, err = s.inboxStreamer.ResultAtMessageIndex(count - 1)
277286
if err != nil {
278287
return validator.GoGlobalState{}, fmt.Errorf("%s: could not check if we have result at count %d: %w", s.stateProviderConfig.ValidatorName, count, err)
279288
}
@@ -335,7 +344,7 @@ func (s *BOLDStateProvider) CollectMachineHashes(
335344
for i, h := range cfg.StepHeights {
336345
stepHeights[i] = uint64(h)
337346
}
338-
messageResult, err := s.statelessValidator.InboxStreamer().ResultAtMessageIndex(messageNum)
347+
messageResult, err := s.inboxStreamer.ResultAtMessageIndex(messageNum)
339348
if err != nil {
340349
return nil, err
341350
}
@@ -401,7 +410,7 @@ func (s *BOLDStateProvider) messageNum(md *l2stateprovider.AssociatedAssertionMe
401410
posInBatch := md.FromState.PosInBatch
402411
if bNum > 0 {
403412
var err error
404-
prevBatchMsgCount, err = s.statelessValidator.InboxTracker().GetBatchMessageCount(uint64(bNum - 1))
413+
prevBatchMsgCount, err = s.inboxTracker.GetBatchMessageCount(uint64(bNum - 1))
405414
if err != nil {
406415
return 0, fmt.Errorf("could not get prevBatchMsgCount at %d: %w", bNum-1, err)
407416
}
@@ -427,14 +436,14 @@ func (s *BOLDStateProvider) messageNum(md *l2stateprovider.AssociatedAssertionMe
427436
// FINISHED state's hash.
428437
func (s *BOLDStateProvider) virtualState(msgNum arbutil.MessageIndex, limit l2stateprovider.Batch) (option.Option[validator.GoGlobalState], error) {
429438
gs := option.None[validator.GoGlobalState]()
430-
limitMsgCount, err := s.statelessValidator.InboxTracker().GetBatchMessageCount(uint64(limit) - 1)
439+
limitMsgCount, err := s.inboxTracker.GetBatchMessageCount(uint64(limit) - 1)
431440
if err != nil {
432441
return gs, fmt.Errorf("could not get limitMsgCount at %d: %w", limit, err)
433442
}
434443
if msgNum >= limitMsgCount {
435444
result := &execution.MessageResult{}
436445
if limitMsgCount > 0 {
437-
result, err = s.statelessValidator.InboxStreamer().ResultAtMessageIndex(limitMsgCount - 1)
446+
result, err = s.inboxStreamer.ResultAtMessageIndex(limitMsgCount - 1)
438447
if err != nil {
439448
return gs, fmt.Errorf("could not get global state at limitMsgCount %d: %w", limitMsgCount, err)
440449
}

staker/legacy/challenge_manager.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ func NewChallengeManager(
9393
val *staker.StatelessBlockValidator,
9494
startL1Block uint64,
9595
confirmationBlocks int64,
96+
inboxTracker staker.InboxTrackerInterface,
97+
inboxStreamer staker.TransactionStreamerInterface,
9698
) (*ChallengeManager, error) {
9799
con, err := challenge_legacy_gen.NewChallengeManager(challengeManagerAddr, l1client)
98100
if err != nil {
@@ -130,8 +132,8 @@ func NewChallengeManager(
130132
backend, err := NewBlockChallengeBackend(
131133
parsedLog,
132134
challengeInfo.MaxInboxMessages,
133-
val.InboxStreamer(),
134-
val.InboxTracker(),
135+
inboxStreamer,
136+
inboxTracker,
135137
)
136138
if err != nil {
137139
return nil, fmt.Errorf("error creating block challenge backend for challenge %v: %w", challengeIndex, err)

staker/legacy/staker.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,14 +310,17 @@ func NewStaker(
310310
confirmedNotifiers []LatestConfirmedNotifier,
311311
validatorUtilsAddress common.Address,
312312
rollupAddress common.Address,
313+
inboxTracker staker.InboxTrackerInterface,
314+
inboxStreamer staker.TransactionStreamerInterface,
315+
inboxReader staker.InboxReaderInterface,
313316
fatalErr chan<- error,
314317
) (*Staker, error) {
315318
if err := config().Validate(); err != nil {
316319
return nil, err
317320
}
318321
client := l1Reader.Client()
319322
val, err := NewL1Validator(client, wallet, validatorUtilsAddress, rollupAddress, config().GasRefunder(), callOpts,
320-
statelessBlockValidator.InboxTracker(), statelessBlockValidator.InboxStreamer(), blockValidator)
323+
inboxTracker, inboxStreamer, blockValidator)
321324
if err != nil {
322325
return nil, err
323326
}
@@ -334,7 +337,7 @@ func NewStaker(
334337
config: config,
335338
highGasBlocksBuffer: big.NewInt(config().PostingStrategy.HighGasDelayBlocks),
336339
lastActCalledBlock: nil,
337-
inboxReader: statelessBlockValidator.InboxReader(),
340+
inboxReader: inboxReader,
338341
statelessBlockValidator: statelessBlockValidator,
339342
fatalErr: fatalErr,
340343
inactiveValidatedNodes: inactiveValidatedNodes,
@@ -991,6 +994,8 @@ func (s *Staker) handleConflict(ctx context.Context, info *StakerInfo) error {
991994
s.statelessBlockValidator,
992995
latestConfirmedCreated,
993996
s.config().ConfirmationBlocks,
997+
s.inboxTracker,
998+
s.txStreamer,
994999
)
9951000
if err != nil {
9961001
return fmt.Errorf("error creating challenge manager: %w", err)

0 commit comments

Comments
 (0)