@@ -57,6 +57,7 @@ type SubmitTaskNodeAPI interface {
57
57
StateSectorGetInfo (ctx context.Context , maddr address.Address , sectorNumber abi.SectorNumber , tsk types.TipSetKey ) (* miner.SectorOnChainInfo , error )
58
58
59
59
StateMinerInfo (context.Context , address.Address , types.TipSetKey ) (api.MinerInfo , error )
60
+ StateMinerAvailableBalance (context.Context , address.Address , types.TipSetKey ) (big.Int , error )
60
61
StateGetActor (ctx context.Context , actor address.Address , tsk types.TipSetKey ) (* types.Actor , error )
61
62
StateVMCirculatingSupplyInternal (ctx context.Context , tsk types.TipSetKey ) (api.CirculatingSupply , error )
62
63
}
@@ -65,6 +66,8 @@ type submitConfig struct {
65
66
maxFee types.FIL
66
67
RequireActivationSuccess bool
67
68
RequireNotificationSuccess bool
69
+ CollateralFromMinerBalance bool
70
+ DisableCollateralFallback bool
68
71
}
69
72
70
73
type SubmitTask struct {
@@ -92,6 +95,9 @@ func NewSubmitTask(db *harmonydb.DB, api SubmitTaskNodeAPI, bstore curiochain.Cu
92
95
maxFee : cfg .Fees .MaxCommitGasFee , // todo snap-specific
93
96
RequireActivationSuccess : cfg .Subsystems .RequireActivationSuccess ,
94
97
RequireNotificationSuccess : cfg .Subsystems .RequireNotificationSuccess ,
98
+
99
+ CollateralFromMinerBalance : cfg .Fees .CollateralFromMinerBalance ,
100
+ DisableCollateralFallback : cfg .Fees .DisableCollateralFallback ,
95
101
},
96
102
}
97
103
}
@@ -255,6 +261,22 @@ func (s *SubmitTask) Do(taskID harmonytask.TaskID, stillOwned func() bool) (done
255
261
collateral = big .Zero ()
256
262
}
257
263
264
+ if s .cfg .CollateralFromMinerBalance {
265
+ if s .cfg .DisableCollateralFallback {
266
+ collateral = big .Zero ()
267
+ }
268
+ balance , err := s .api .StateMinerAvailableBalance (ctx , maddr , types .EmptyTSK )
269
+ if err != nil {
270
+ if err != nil {
271
+ return false , xerrors .Errorf ("getting miner balance: %w" , err )
272
+ }
273
+ }
274
+ collateral = big .Sub (collateral , balance )
275
+ if collateral .LessThan (big .Zero ()) {
276
+ collateral = big .Zero ()
277
+ }
278
+ }
279
+
258
280
a , _ , err := s .as .AddressFor (ctx , s .api , maddr , mi , api .CommitAddr , collateral , big .Zero ())
259
281
if err != nil {
260
282
return false , xerrors .Errorf ("getting address for precommit: %w" , err )
0 commit comments