@@ -1053,7 +1053,7 @@ func (a *Aggregator) getVerifiedBatchAccInputHash(ctx context.Context, batchNumb
10531053
10541054func (a * Aggregator ) getAndLockBatchToProve (
10551055 ctx context.Context , prover ProverInterface ,
1056- ) (* state.Batch , [] byte , * state.Proof , error ) {
1056+ ) (* state.Batch , * state.Proof , error ) {
10571057 proverID := prover .ID ()
10581058 proverName := prover .Name ()
10591059
@@ -1069,7 +1069,7 @@ func (a *Aggregator) getAndLockBatchToProve(
10691069 // Get last virtual batch number from L1
10701070 lastVerifiedBatchNumber , err := a .etherman .GetLatestVerifiedBatchNum ()
10711071 if err != nil {
1072- return nil , nil , nil , err
1072+ return nil , nil , err
10731073 }
10741074
10751075 proofExists := true
@@ -1082,7 +1082,7 @@ func (a *Aggregator) getAndLockBatchToProve(
10821082 if err != nil {
10831083 tmpLogger .Infof ("Error checking proof exists for batch %d" , batchNumberToVerify )
10841084
1085- return nil , nil , nil , err
1085+ return nil , nil , err
10861086 }
10871087
10881088 if proofExists {
@@ -1094,7 +1094,7 @@ func (a *Aggregator) getAndLockBatchToProve(
10941094 err := a .storage .CleanupGeneratedProofs (ctx , math .MaxInt , nil )
10951095 if err != nil {
10961096 tmpLogger .Infof ("Error cleaning up generated proofs for batch %d" , batchNumberToVerify )
1097- return nil , nil , nil , err
1097+ return nil , nil , err
10981098 }
10991099 batchNumberToVerify --
11001100 break
@@ -1105,38 +1105,45 @@ func (a *Aggregator) getAndLockBatchToProve(
11051105 // Check if the batch has been sequenced
11061106 sequence , err := a .l1Syncr .GetSequenceByBatchNumber (ctx , batchNumberToVerify )
11071107 if err != nil && ! errors .Is (err , entities .ErrNotFound ) {
1108- return nil , nil , nil , err
1108+ return nil , nil , err
11091109 }
11101110
11111111 // Not found, so it it not possible to verify the batch yet
11121112 if sequence == nil || errors .Is (err , entities .ErrNotFound ) {
11131113 tmpLogger .Infof ("Sequencing event for batch %d has not been synced yet, " +
11141114 "so it is not possible to verify it yet. Waiting ..." , batchNumberToVerify )
11151115
1116- return nil , nil , nil , state .ErrNotFound
1116+ return nil , nil , state .ErrNotFound
11171117 }
11181118
11191119 stateSequence := state.Sequence {
11201120 FromBatchNumber : sequence .FromBatchNumber ,
11211121 ToBatchNumber : sequence .ToBatchNumber ,
11221122 }
11231123
1124+ // Store the sequence in aggregator DB
1125+ err = a .storage .AddSequence (ctx , stateSequence , nil )
1126+ if err != nil {
1127+ tmpLogger .Infof ("Error storing sequence for batch %d" , batchNumberToVerify )
1128+ return nil , nil , err
1129+ }
1130+
11241131 // Get Batch from L1 Syncer
11251132 virtualBatch , err := a .l1Syncr .GetVirtualBatchByBatchNumber (a .ctx , batchNumberToVerify )
11261133 if err != nil && ! errors .Is (err , entities .ErrNotFound ) {
11271134 a .logger .Errorf ("Error getting virtual batch: %v" , err )
1128- return nil , nil , nil , err
1135+ return nil , nil , err
11291136 } else if errors .Is (err , entities .ErrNotFound ) {
11301137 a .logger .Infof ("Virtual batch %d has not been synced yet, " +
11311138 "so it is not possible to verify it yet. Waiting ..." , batchNumberToVerify )
1132- return nil , nil , nil , state .ErrNotFound
1139+ return nil , nil , state .ErrNotFound
11331140 }
11341141
11351142 // Get Batch from RPC
11361143 rpcBatch , err := a .rpcClient .GetBatch (batchNumberToVerify )
11371144 if err != nil {
11381145 a .logger .Errorf ("error getting batch %d from RPC: %v." , batchNumberToVerify , err )
1139- return nil , nil , nil , err
1146+ return nil , nil , err
11401147 }
11411148
11421149 // Compare BatchL2Data from virtual batch and rpcBatch (skipping injected batch (1))
@@ -1157,7 +1164,7 @@ func (a *Aggregator) getAndLockBatchToProve(
11571164 oldAccInputHash := a .getAccInputHash (batchNumberToVerify - 1 )
11581165 if oldAccInputHash == (common.Hash {}) && batchNumberToVerify > 1 {
11591166 tmpLogger .Warnf ("AccInputHash for previous batch (%d) is not in memory. Waiting ..." , batchNumberToVerify - 1 )
1160- return nil , nil , nil , state .ErrNotFound
1167+ return nil , nil , state .ErrNotFound
11611168 }
11621169
11631170 forcedBlockHashL1 := rpcBatch .ForcedBlockHashL1 ()
@@ -1167,7 +1174,7 @@ func (a *Aggregator) getAndLockBatchToProve(
11671174 l1Block , err := a .l1Syncr .GetL1BlockByNumber (ctx , virtualBatch .BlockNumber )
11681175 if err != nil {
11691176 a .logger .Errorf ("Error getting l1 block: %v" , err )
1170- return nil , nil , nil , err
1177+ return nil , nil , err
11711178 }
11721179
11731180 forcedBlockHashL1 = l1Block .ParentHash
@@ -1213,34 +1220,9 @@ func (a *Aggregator) getAndLockBatchToProve(
12131220 ForkID : a .cfg .ForkId ,
12141221 }
12151222
1216- // Request the witness from the server, if it is busy just keep looping until it is available
1217- start := time .Now ()
1218- witness , err := a .rpcClient .GetWitness (batchNumberToVerify , a .cfg .UseFullWitness )
1219- for err != nil {
1220- if errors .Is (err , rpc .ErrBusy ) {
1221- a .logger .Debugf (
1222- "Witness server is busy, retrying get witness for batch %d in %v" ,
1223- batchNumberToVerify , a .cfg .RetryTime .Duration ,
1224- )
1225- } else {
1226- a .logger .Errorf ("Failed to get witness for batch %d, err: %v" , batchNumberToVerify , err )
1227- }
1228- time .Sleep (a .cfg .RetryTime .Duration )
1229- witness , err = a .rpcClient .GetWitness (batchNumberToVerify , a .cfg .UseFullWitness )
1230- }
1231- end := time .Now ()
1232- a .logger .Debugf ("Time to get witness for batch %d: %v" , batchNumberToVerify , end .Sub (start ))
1233-
1234- // Store the sequence in aggregator DB
1235- err = a .storage .AddSequence (ctx , stateSequence , nil )
1236- if err != nil {
1237- tmpLogger .Infof ("Error storing sequence for batch %d" , batchNumberToVerify )
1238-
1239- return nil , nil , nil , err
1240- }
1241-
12421223 // All the data required to generate a proof is ready
1243- tmpLogger .Infof ("All information to generate proof for batch %d is ready" , virtualBatch .BatchNumber )
1224+ tmpLogger .Infof ("All information to generate proof for batch %d is ready. " +
1225+ "Witness will be requested." , virtualBatch .BatchNumber )
12441226 tmpLogger = tmpLogger .WithFields ("batch" , virtualBatch .BatchNumber )
12451227
12461228 now := time .Now ().Round (time .Microsecond )
@@ -1257,10 +1239,10 @@ func (a *Aggregator) getAndLockBatchToProve(
12571239 if err != nil {
12581240 tmpLogger .Errorf ("Failed to add batch proof to DB for batch %d, err: %v" , virtualBatch .BatchNumber , err )
12591241
1260- return nil , nil , nil , err
1242+ return nil , nil , err
12611243 }
12621244
1263- return stateBatch , witness , proof , nil
1245+ return stateBatch , proof , nil
12641246}
12651247
12661248func (a * Aggregator ) tryGenerateBatchProof (ctx context.Context , prover ProverInterface ) (bool , error ) {
@@ -1271,7 +1253,7 @@ func (a *Aggregator) tryGenerateBatchProof(ctx context.Context, prover ProverInt
12711253 )
12721254 tmpLogger .Debug ("tryGenerateBatchProof start" )
12731255
1274- batchToProve , witness , proof , err0 := a .getAndLockBatchToProve (ctx , prover )
1256+ batchToProve , proof , err0 := a .getAndLockBatchToProve (ctx , prover )
12751257 if errors .Is (err0 , state .ErrNotFound ) || errors .Is (err0 , entities .ErrNotFound ) {
12761258 // nothing to proof, swallow the error
12771259 tmpLogger .Debug ("Nothing to generate proof" )
@@ -1281,6 +1263,11 @@ func (a *Aggregator) tryGenerateBatchProof(ctx context.Context, prover ProverInt
12811263 return false , err0
12821264 }
12831265
1266+ // Request Witness
1267+ tmpLogger .Infof ("Requesting witness for batch %d" , batchToProve .BatchNumber )
1268+ witness := a .getWitness (batchToProve .BatchNumber )
1269+ tmpLogger .Infof ("Witness received for batch %d" , batchToProve .BatchNumber )
1270+
12841271 tmpLogger = tmpLogger .WithFields ("batch" , batchToProve .BatchNumber )
12851272
12861273 var (
@@ -1362,6 +1349,28 @@ func (a *Aggregator) tryGenerateBatchProof(ctx context.Context, prover ProverInt
13621349 return true , nil
13631350}
13641351
1352+ func (a * Aggregator ) getWitness (batchNumber uint64 ) []byte {
1353+ // Request the witness from the server, if it is busy just keep looping until it is available
1354+ start := time .Now ()
1355+ witness , err := a .rpcClient .GetWitness (batchNumber , a .cfg .UseFullWitness )
1356+ for err != nil {
1357+ if errors .Is (err , rpc .ErrBusy ) {
1358+ a .logger .Debugf (
1359+ "Witness server is busy, retrying get witness for batch %d in %v" ,
1360+ batchNumber , a .cfg .RetryTime .Duration ,
1361+ )
1362+ } else {
1363+ a .logger .Errorf ("Failed to get witness for batch %d, err: %v" , batchNumber , err )
1364+ }
1365+ time .Sleep (a .cfg .RetryTime .Duration )
1366+ witness , err = a .rpcClient .GetWitness (batchNumber , a .cfg .UseFullWitness )
1367+ }
1368+ end := time .Now ()
1369+ a .logger .Debugf ("Time to get witness for batch %d: %v" , batchNumber , end .Sub (start ))
1370+
1371+ return witness
1372+ }
1373+
13651374func (a * Aggregator ) performSanityChecks (tmpLogger * log.Logger , stateRoot , accInputHash common.Hash ,
13661375 batchToProve * state.Batch ) {
13671376 // Sanity Check: state root from the proof must match the one from the batch
0 commit comments