@@ -148,6 +148,16 @@ func (s *SubmitCommitTask) Do(taskID harmonytask.TaskID, stillOwned func() bool)
148
148
149
149
regProof := sectorParamsArr [0 ].RegSealProof
150
150
151
+ balance , err := s .api .StateMinerAvailableBalance (ctx , maddr , types .EmptyTSK )
152
+ if err != nil {
153
+ return false , xerrors .Errorf ("getting miner balance: %w" , err )
154
+ }
155
+
156
+ mi , err := s .api .StateMinerInfo (ctx , maddr , types .EmptyTSK )
157
+ if err != nil {
158
+ return false , xerrors .Errorf ("getting miner info: %w" , err )
159
+ }
160
+
151
161
params := miner.ProveCommitSectors3Params {
152
162
RequireActivationSuccess : s .cfg .RequireActivationSuccess ,
153
163
RequireNotificationSuccess : s .cfg .RequireNotificationSuccess ,
@@ -306,6 +316,26 @@ func (s *SubmitCommitTask) Do(taskID harmonytask.TaskID, stillOwned func() bool)
306
316
collateralPerSector = big .Zero ()
307
317
}
308
318
319
+ simulateSendParam := miner.ProveCommitSectors3Params {
320
+ SectorActivations : []miner.SectorActivationManifest {
321
+ {
322
+ SectorNumber : abi .SectorNumber (sectorParams .SectorNumber ),
323
+ Pieces : pams ,
324
+ },
325
+ },
326
+ SectorProofs : [][]byte {
327
+ sectorParams .Proof ,
328
+ },
329
+ RequireActivationSuccess : s .cfg .RequireActivationSuccess ,
330
+ RequireNotificationSuccess : s .cfg .RequireNotificationSuccess ,
331
+ }
332
+
333
+ err = s .simuateCommitPerSector (ctx , maddr , mi , balance , collateral , ts , simulateSendParam )
334
+ if err != nil {
335
+ log .Errorw ("failed to simulate commit for sector" , "Miner" , maddr .String (), "Sector" , sectorParams .SectorNumber , "err" , err )
336
+ continue
337
+ }
338
+
309
339
collateral = big .Add (collateral , collateralPerSector )
310
340
311
341
params .SectorActivations = append (params .SectorActivations , miner.SectorActivationManifest {
@@ -337,7 +367,7 @@ func (s *SubmitCommitTask) Do(taskID harmonytask.TaskID, stillOwned func() bool)
337
367
338
368
maxFee := s .cfg .feeCfg .MaxCommitBatchGasFee .FeeForSectors (len (infos ))
339
369
340
- msg , err := s .createCommitMessage (ctx , maddr , sectorParamsArr [0 ].RegSealProof , sectorParamsArr [0 ].SpID , collateral , params , infos , ts )
370
+ msg , err := s .createCommitMessage (ctx , maddr , mi , balance , sectorParamsArr [0 ].RegSealProof , sectorParamsArr [0 ].SpID , collateral , params , infos , ts )
341
371
if err != nil {
342
372
return false , xerrors .Errorf ("failed to create the commit message: %w" , err )
343
373
}
@@ -365,7 +395,23 @@ func (s *SubmitCommitTask) Do(taskID harmonytask.TaskID, stillOwned func() bool)
365
395
return true , nil
366
396
}
367
397
368
- func (s * SubmitCommitTask ) createCommitMessage (ctx context.Context , maddr address.Address , sealProof abi.RegisteredSealProof , SpID int64 , collateral abi.TokenAmount , params miner.ProveCommitSectors3Params , infos []proof.AggregateSealVerifyInfo , ts * types.TipSet ) (* types.Message , error ) {
398
+ func (s * SubmitCommitTask ) simuateCommitPerSector (ctx context.Context , maddr address.Address , mi api.MinerInfo , balance big.Int , collateral abi.TokenAmount , ts * types.TipSet , param miner.ProveCommitSectors3Params ) error {
399
+ maxFee := s .cfg .feeCfg .MaxCommitBatchGasFee .FeeForSectors (1 )
400
+
401
+ collateral = s .calculateCollateral (balance , collateral )
402
+ goodFunds := big .Add (maxFee , collateral )
403
+ enc := new (bytes.Buffer )
404
+ if err := param .MarshalCBOR (enc ); err != nil {
405
+ return xerrors .Errorf ("could not serialize commit params: %w" , err )
406
+ }
407
+ _ , err := s .gasEstimateCommit (ctx , maddr , enc .Bytes (), mi , goodFunds , collateral , maxFee , ts .Key ())
408
+ if err != nil {
409
+ return err
410
+ }
411
+ return nil
412
+ }
413
+
414
+ func (s * SubmitCommitTask ) createCommitMessage (ctx context.Context , maddr address.Address , mi api.MinerInfo , balance big.Int , sealProof abi.RegisteredSealProof , SpID int64 , collateral abi.TokenAmount , params miner.ProveCommitSectors3Params , infos []proof.AggregateSealVerifyInfo , ts * types.TipSet ) (* types.Message , error ) {
369
415
aggParams := params
370
416
var aggCost , cost big.Int
371
417
var msg , aggMsg * types.Message
@@ -376,16 +422,6 @@ func (s *SubmitCommitTask) createCommitMessage(ctx context.Context, maddr addres
376
422
return nil , xerrors .Errorf ("getting network version: %s" , err )
377
423
}
378
424
379
- balance , err := s .api .StateMinerAvailableBalance (ctx , maddr , types .EmptyTSK )
380
- if err != nil {
381
- return nil , xerrors .Errorf ("getting miner balance: %w" , err )
382
- }
383
-
384
- mi , err := s .api .StateMinerInfo (ctx , maddr , types .EmptyTSK )
385
- if err != nil {
386
- return nil , xerrors .Errorf ("getting miner info: %w" , err )
387
- }
388
-
389
425
if len (infos ) >= miner .MinAggregatedSectors {
390
426
arp , err := aggregateProofType (nv )
391
427
if err != nil {
0 commit comments