Skip to content

Commit d802f8b

Browse files
authored
fix(cli): add deposit-margin-factor to the new miner commands (#13365)
add deposit margin factor to the new miner command to avoid creating miners that fail due to insufficient deposit
1 parent 9045c15 commit d802f8b

File tree

4 files changed

+28
-4
lines changed

4 files changed

+28
-4
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
- The minimum supported Golang version is now `1.24.7`
1212
- feat(gateway): expose StateGetRandomnessDigestFromBeacon ([filecoin-project/lotus#13339](https://github.com/filecoin-project/lotus/pull/13339))
1313
- chore(deps): update of quic-go to v0.54.1 and go-libp2p to v0.43.0 ([filecoin-project/lotus#13361](https://github.com/filecoin-project/lotus/pull/13361))
14+
- feat(spcli): add a `deposit-margin-factor` option to `lotus-miner actor new` and `lotus-shed miner create` so the sent deposit still covers the on-chain requirement if it rises between lookup and execution
1415

1516
# Node and Miner v1.34.0 / 2025-09-11
1617

cli/spcli/actor.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1491,6 +1491,11 @@ var ActorNewMinerCmd = &cli.Command{
14911491
Usage: "number of block confirmations to wait for",
14921492
Value: int(buildconstants.MessageConfidence),
14931493
},
1494+
&cli.Float64Flag{
1495+
Name: "deposit-margin-factor",
1496+
Usage: "Multiplier (>=1.0) to scale the suggested deposit for on-chain variance (e.g. 1.01 adds 1%)",
1497+
Value: 1.01,
1498+
},
14941499
},
14951500
Action: func(cctx *cli.Context) error {
14961501
ctx := cctx.Context
@@ -1538,7 +1543,7 @@ var ActorNewMinerCmd = &cli.Command{
15381543
}
15391544
ssize := abi.SectorSize(sectorSizeInt)
15401545

1541-
_, err = createminer.CreateStorageMiner(ctx, full, owner, worker, sender, ssize, cctx.Uint64("confidence"))
1546+
_, err = createminer.CreateStorageMiner(ctx, full, owner, worker, sender, ssize, cctx.Uint64("confidence"), cctx.Float64("deposit-margin-factor"))
15421547
if err != nil {
15431548
return err
15441549
}

cli/spcli/createminer/create_miner.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919
"github.com/filecoin-project/lotus/chain/types"
2020
)
2121

22-
func CreateStorageMiner(ctx context.Context, fullNode v1api.FullNode, owner, worker, sender address.Address, ssize abi.SectorSize, confidence uint64) (address.Address, error) {
22+
func CreateStorageMiner(ctx context.Context, fullNode v1api.FullNode, owner, worker, sender address.Address, ssize abi.SectorSize, confidence uint64, depositMarginFactor float64) (address.Address, error) {
2323
// make sure the sender account exists on chain
2424
_, err := fullNode.StateLookupID(ctx, owner, types.EmptyTSK)
2525
if err != nil {
@@ -93,15 +93,21 @@ func CreateStorageMiner(ctx context.Context, fullNode v1api.FullNode, owner, wor
9393
return address.Undef, err
9494
}
9595

96+
if depositMarginFactor < 1 {
97+
return address.Undef, xerrors.Errorf("deposit margin factor must be greater than 1")
98+
}
99+
96100
deposit, err := fullNode.StateMinerCreationDeposit(ctx, types.EmptyTSK)
97101
if err != nil {
98102
return address.Undef, xerrors.Errorf("getting miner creation deposit: %w", err)
99103
}
100104

105+
scaledDeposit := types.BigDiv(types.BigMul(deposit, types.NewInt(uint64(depositMarginFactor*100))), types.NewInt(100))
106+
101107
createStorageMinerMsg := &types.Message{
102108
To: power.Address,
103109
From: sender,
104-
Value: deposit,
110+
Value: scaledDeposit,
105111

106112
Method: power.Methods.CreateMiner,
107113
Params: params,

cmd/lotus-shed/miner.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,11 @@ var minerCreateCmd = &cli.Command{
238238
Usage: "number of block confirmations to wait for",
239239
Value: int(buildconstants.MessageConfidence),
240240
},
241+
&cli.Float64Flag{
242+
Name: "deposit-margin-factor",
243+
Usage: "Multiplier (>=1.0) to scale the suggested deposit for on-chain variance (e.g. 1.01 adds 1%)",
244+
Value: 1.01,
245+
},
241246
},
242247
Action: func(cctx *cli.Context) error {
243248
wapi, closer, err := lcli.GetFullNodeAPIV1(cctx)
@@ -348,16 +353,23 @@ var minerCreateCmd = &cli.Command{
348353
return err
349354
}
350355

356+
depositMarginFactor := cctx.Float64("deposit-margin-factor")
357+
if depositMarginFactor < 1 {
358+
return xerrors.Errorf("deposit margin factor must be greater than 1")
359+
}
360+
351361
// Calculate miner creation deposit according to FIP-0077
352362
deposit, err := wapi.StateMinerCreationDeposit(ctx, types.EmptyTSK)
353363
if err != nil {
354364
return xerrors.Errorf("getting miner creation deposit: %w", err)
355365
}
356366

367+
scaledDeposit := types.BigDiv(types.BigMul(deposit, types.NewInt(uint64(depositMarginFactor*100))), types.NewInt(100))
368+
357369
createStorageMinerMsg := &types.Message{
358370
To: power.Address,
359371
From: sender,
360-
Value: deposit,
372+
Value: scaledDeposit,
361373

362374
Method: power.Methods.CreateMiner,
363375
Params: params,

0 commit comments

Comments
 (0)