5
5
"errors"
6
6
"fmt"
7
7
"math/big"
8
+ "slices"
8
9
"time"
9
10
10
11
"github.com/cenkalti/backoff"
@@ -27,28 +28,30 @@ var (
27
28
28
29
// BatchProposedEventHandler is responsible for handling the BatchProposed event as a prover.
29
30
type BatchProposedEventHandler struct {
30
- sharedState * state.SharedState
31
- proverAddress common.Address
32
- proverSetAddress common.Address
33
- rpc * rpc.Client
34
- assignmentExpiredCh chan <- metadata.TaikoProposalMetaData
35
- proofSubmissionCh chan <- * proofProducer.ProofRequestBody
36
- backOffRetryInterval time.Duration
37
- backOffMaxRetrys uint64
38
- proveUnassignedBlocks bool
31
+ sharedState * state.SharedState
32
+ proverAddress common.Address
33
+ proverSetAddress common.Address
34
+ rpc * rpc.Client
35
+ localProposerAddresses []common.Address
36
+ assignmentExpiredCh chan <- metadata.TaikoProposalMetaData
37
+ proofSubmissionCh chan <- * proofProducer.ProofRequestBody
38
+ backOffRetryInterval time.Duration
39
+ backOffMaxRetrys uint64
40
+ proveUnassignedBlocks bool
39
41
}
40
42
41
43
// NewBatchProposedEventHandlerOps is the options for creating a new BatchProposedEventHandler.
42
44
type NewBatchProposedEventHandlerOps struct {
43
- SharedState * state.SharedState
44
- ProverAddress common.Address
45
- ProverSetAddress common.Address
46
- RPC * rpc.Client
47
- AssignmentExpiredCh chan metadata.TaikoProposalMetaData
48
- ProofSubmissionCh chan * proofProducer.ProofRequestBody
49
- BackOffRetryInterval time.Duration
50
- BackOffMaxRetrys uint64
51
- ProveUnassignedBlocks bool
45
+ SharedState * state.SharedState
46
+ ProverAddress common.Address
47
+ ProverSetAddress common.Address
48
+ RPC * rpc.Client
49
+ LocalProposerAddresses []common.Address
50
+ AssignmentExpiredCh chan metadata.TaikoProposalMetaData
51
+ ProofSubmissionCh chan * proofProducer.ProofRequestBody
52
+ BackOffRetryInterval time.Duration
53
+ BackOffMaxRetrys uint64
54
+ ProveUnassignedBlocks bool
52
55
}
53
56
54
57
// NewBatchProposedEventHandler creates a new BatchProposedEventHandler instance.
@@ -58,6 +61,7 @@ func NewBatchProposedEventHandler(opts *NewBatchProposedEventHandlerOps) *BatchP
58
61
opts .ProverAddress ,
59
62
opts .ProverSetAddress ,
60
63
opts .RPC ,
64
+ opts .LocalProposerAddresses ,
61
65
opts .AssignmentExpiredCh ,
62
66
opts .ProofSubmissionCh ,
63
67
opts .BackOffRetryInterval ,
@@ -196,12 +200,14 @@ func (h *BatchProposedEventHandler) checkExpirationAndSubmitProofPacaya(
196
200
// if no and the current prover wants to prove unassigned blocks, then we should wait for its expiration.
197
201
if ! windowExpired &&
198
202
meta .GetProposer () != h .proverAddress &&
199
- meta .GetProposer () != h .proverSetAddress {
203
+ meta .GetProposer () != h .proverSetAddress &&
204
+ ! slices .Contains (h .localProposerAddresses , meta .GetProposer ()) {
200
205
log .Info (
201
206
"Proposed batch is not provable by current prover at the moment" ,
202
207
"batchID" , meta .Pacaya ().GetBatchID (),
203
208
"prover" , meta .GetProposer (),
204
209
"timeToExpire" , timeToExpire ,
210
+ "localProposerAddresses" , h .localProposerAddresses ,
205
211
)
206
212
207
213
if h .proveUnassignedBlocks {
@@ -210,6 +216,7 @@ func (h *BatchProposedEventHandler) checkExpirationAndSubmitProofPacaya(
210
216
"batchID" , meta .Pacaya ().GetBatchID (),
211
217
"assignProver" , meta .GetProposer (),
212
218
"timeToExpire" , timeToExpire ,
219
+ "localProposerAddresses" , h .localProposerAddresses ,
213
220
)
214
221
time .AfterFunc (
215
222
// Add another 72 seconds, to ensure one more L1 block will be mined before the proof submission
@@ -225,18 +232,25 @@ func (h *BatchProposedEventHandler) checkExpirationAndSubmitProofPacaya(
225
232
// we should skip proving this batch.
226
233
if ! h .proveUnassignedBlocks &&
227
234
meta .GetProposer () != h .proverAddress &&
228
- meta .GetProposer () != h .proverSetAddress {
235
+ meta .GetProposer () != h .proverSetAddress &&
236
+ ! slices .Contains (h .localProposerAddresses , meta .GetProposer ()) {
229
237
log .Info (
230
238
"Expired batch is not provable by current prover" ,
231
239
"batchID" , meta .Pacaya ().GetBatchID (),
232
240
"currentProver" , h .proverAddress ,
233
241
"currentProverSet" , h .proverSetAddress ,
234
242
"assignProver" , meta .GetProposer (),
243
+ "localProposerAddresses" , h .localProposerAddresses ,
235
244
)
236
245
return nil
237
246
}
238
247
239
- log .Info ("Proposed batch is provable" , "batchID" , meta .Pacaya ().GetBatchID (), "assignProver" , meta .GetProposer ())
248
+ log .Info (
249
+ "Proposed batch is provable" ,
250
+ "batchID" , meta .Pacaya ().GetBatchID (),
251
+ "assignProver" , meta .GetProposer (),
252
+ "localProposerAddresses" , h .localProposerAddresses ,
253
+ )
240
254
241
255
metrics .ProverProofsAssigned .Add (1 )
242
256
0 commit comments