From 38b476c507a29fce3e56ee80d92f5f3bee159ec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Fri, 2 Jul 2021 17:53:36 +0200 Subject: [PATCH 01/26] set version to v1.10.1-dev --- build/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/version.go b/build/version.go index 2f0fe6b30..907a57916 100644 --- a/build/version.go +++ b/build/version.go @@ -29,7 +29,7 @@ func buildType() string { } // BuildVersion is the local build version, set by build system -const BuildVersion = "1.10.0" +const BuildVersion = "1.10.1-dev" func UserVersion() string { return BuildVersion + buildType() + CurrentCommit From bb2b13430aead5fbc77a1dfef37601b0bf76d477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Thu, 1 Jul 2021 12:15:58 +0200 Subject: [PATCH 02/26] commit batch: Initialize the FailedSectors map --- extern/storage-sealing/commit_batch.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/extern/storage-sealing/commit_batch.go b/extern/storage-sealing/commit_batch.go index 3c0af1176..dcb03c4e8 100644 --- a/extern/storage-sealing/commit_batch.go +++ b/extern/storage-sealing/commit_batch.go @@ -227,7 +227,9 @@ func (b *CommitBatcher) processBatch(cfg sealiface.Config) ([]sealiface.CommitBa total := len(b.todo) - var res sealiface.CommitBatchRes + res := sealiface.CommitBatchRes{ + FailedSectors: map[abi.SectorNumber]string{}, + } params := miner5.ProveCommitAggregateParams{ SectorNumbers: bitfield.New(), @@ -339,7 +341,8 @@ func (b *CommitBatcher) processIndividually() ([]sealiface.CommitBatchRes, error for sn, info := range b.todo { r := sealiface.CommitBatchRes{ - Sectors: []abi.SectorNumber{sn}, + Sectors: []abi.SectorNumber{sn}, + FailedSectors: map[abi.SectorNumber]string{}, } mcid, err := b.processSingle(mi, sn, info, tok) From 1a869632f66220459209cf2d04e7ebfde4db8371 Mon Sep 17 00:00:00 2001 From: Jerry <1032246642@qq.com> Date: Tue, 29 Jun 2021 14:06:41 +0800 Subject: [PATCH 03/26] fix: miner balance is not enough, so that ProveCommitAggregate msg exec failed --- extern/storage-sealing/commit_batch.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/extern/storage-sealing/commit_batch.go b/extern/storage-sealing/commit_batch.go index dcb03c4e8..999422d7e 100644 --- a/extern/storage-sealing/commit_batch.go +++ b/extern/storage-sealing/commit_batch.go @@ -307,14 +307,16 @@ func (b *CommitBatcher) processBatch(cfg sealiface.Config) ([]sealiface.CommitBa aggFee := policy.AggregateNetworkFee(nv, len(infos), bf) - goodFunds := big.Add(maxFee, big.Add(collateral, aggFee)) + needFunds := big.Add(collateral, aggFee) - from, _, err := b.addrSel(b.mctx, mi, api.CommitAddr, goodFunds, collateral) + goodFunds := big.Add(maxFee, needFunds) + + from, _, err := b.addrSel(b.mctx, mi, api.CommitAddr, goodFunds, needFunds) if err != nil { return []sealiface.CommitBatchRes{res}, xerrors.Errorf("no good address found: %w", err) } - mcid, err := b.api.SendMsg(b.mctx, from, b.maddr, miner.Methods.ProveCommitAggregate, collateral, maxFee, enc.Bytes()) + mcid, err := b.api.SendMsg(b.mctx, from, b.maddr, miner.Methods.ProveCommitAggregate, needFunds, maxFee, enc.Bytes()) if err != nil { return []sealiface.CommitBatchRes{res}, xerrors.Errorf("sending message failed: %w", err) } From 042166996b5cb2d6f846414d74e813021dc27bda Mon Sep 17 00:00:00 2001 From: Jerry <1032246642@qq.com> Date: Tue, 29 Jun 2021 14:36:26 +0800 Subject: [PATCH 04/26] ensure agg fee is adequate --- extern/storage-sealing/commit_batch.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/extern/storage-sealing/commit_batch.go b/extern/storage-sealing/commit_batch.go index 999422d7e..15fadcf87 100644 --- a/extern/storage-sealing/commit_batch.go +++ b/extern/storage-sealing/commit_batch.go @@ -32,6 +32,9 @@ import ( const arp = abi.RegisteredAggregationProof_SnarkPackV1 +var aggFeeNum = big.NewInt(110) +var aggFeeDen = big.NewInt(100) + type CommitBatcherApi interface { SendMsg(ctx context.Context, from, to address.Address, method abi.MethodNum, value, maxFee abi.TokenAmount, params []byte) (cid.Cid, error) StateMinerInfo(context.Context, address.Address, TipSetToken) (miner.MinerInfo, error) @@ -305,7 +308,7 @@ func (b *CommitBatcher) processBatch(cfg sealiface.Config) ([]sealiface.CommitBa return []sealiface.CommitBatchRes{res}, xerrors.Errorf("getting network version: %s", err) } - aggFee := policy.AggregateNetworkFee(nv, len(infos), bf) + aggFee := big.Div(big.Mul(policy.AggregateNetworkFee(nv, len(infos), bf), aggFeeNum), aggFeeDen) needFunds := big.Add(collateral, aggFee) From 76fff49266e302aa71248f9c9254d112368256c6 Mon Sep 17 00:00:00 2001 From: wangchao Date: Mon, 28 Jun 2021 17:50:31 +0800 Subject: [PATCH 05/26] remove precommit check in handleCommitFailed --- extern/storage-sealing/states_failed.go | 28 +------------------------ 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/extern/storage-sealing/states_failed.go b/extern/storage-sealing/states_failed.go index 7bef19b92..3a0177978 100644 --- a/extern/storage-sealing/states_failed.go +++ b/extern/storage-sealing/states_failed.go @@ -182,7 +182,7 @@ func (m *Sealing) handleComputeProofFailed(ctx statemachine.Context, sector Sect } func (m *Sealing) handleCommitFailed(ctx statemachine.Context, sector SectorInfo) error { - tok, height, err := m.api.ChainHead(ctx.Context()) + tok, _, err := m.api.ChainHead(ctx.Context()) if err != nil { log.Errorf("handleCommitting: api error, not proceeding: %+v", err) return nil @@ -216,32 +216,6 @@ func (m *Sealing) handleCommitFailed(ctx statemachine.Context, sector SectorInfo } } - if err := checkPrecommit(ctx.Context(), m.maddr, sector, tok, height, m.api); err != nil { - switch err.(type) { - case *ErrApi: - log.Errorf("handleCommitFailed: api error, not proceeding: %+v", err) - return nil - case *ErrBadCommD: - return ctx.Send(SectorSealPreCommit1Failed{xerrors.Errorf("bad CommD error: %w", err)}) - case *ErrExpiredTicket: - return ctx.Send(SectorTicketExpired{xerrors.Errorf("ticket expired error, removing sector: %w", err)}) - case *ErrBadTicket: - return ctx.Send(SectorTicketExpired{xerrors.Errorf("expired ticket, removing sector: %w", err)}) - case *ErrInvalidDeals: - log.Warnf("invalid deals in sector %d: %v", sector.SectorNumber, err) - return ctx.Send(SectorInvalidDealIDs{Return: RetCommitFailed}) - case *ErrExpiredDeals: - return ctx.Send(SectorDealsExpired{xerrors.Errorf("sector deals expired: %w", err)}) - case nil: - return ctx.Send(SectorChainPreCommitFailed{xerrors.Errorf("no precommit: %w", err)}) - case *ErrPrecommitOnChain: - // noop, this is expected - case *ErrSectorNumberAllocated: - // noop, already committed? - default: - return xerrors.Errorf("checkPrecommit sanity check error (%T): %w", err, err) - } - } if err := m.checkCommit(ctx.Context(), sector, sector.Proof, tok); err != nil { switch err.(type) { From ab2503f44690c05be21bb4efb9728d1c8a523058 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Wed, 30 Jun 2021 15:19:29 +0200 Subject: [PATCH 06/26] gofmt --- extern/storage-sealing/states_failed.go | 1 - 1 file changed, 1 deletion(-) diff --git a/extern/storage-sealing/states_failed.go b/extern/storage-sealing/states_failed.go index 3a0177978..201c4456f 100644 --- a/extern/storage-sealing/states_failed.go +++ b/extern/storage-sealing/states_failed.go @@ -216,7 +216,6 @@ func (m *Sealing) handleCommitFailed(ctx statemachine.Context, sector SectorInfo } } - if err := m.checkCommit(ctx.Context(), sector, sector.Proof, tok); err != nil { switch err.(type) { case *ErrApi: From c21e275ebdc7be49b06a6148f48e5dc5f1dfdf44 Mon Sep 17 00:00:00 2001 From: johnli-helloworld Date: Fri, 25 Jun 2021 17:25:17 +0800 Subject: [PATCH 07/26] handleSubmitCommitAggregate() exception handling --- extern/storage-sealing/fsm.go | 1 + extern/storage-sealing/states_sealing.go | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/extern/storage-sealing/fsm.go b/extern/storage-sealing/fsm.go index 24f26a1ee..4d864980b 100644 --- a/extern/storage-sealing/fsm.go +++ b/extern/storage-sealing/fsm.go @@ -115,6 +115,7 @@ var fsmPlanners = map[SectorState]func(events []statemachine.Event, state *Secto SubmitCommitAggregate: planOne( on(SectorCommitAggregateSent{}, CommitWait), on(SectorCommitFailed{}, CommitFailed), + on(SectorRetrySubmitCommit{}, SubmitCommit), ), CommitWait: planOne( on(SectorProving{}, FinalizeSector), diff --git a/extern/storage-sealing/states_sealing.go b/extern/storage-sealing/states_sealing.go index 31029649a..642859dda 100644 --- a/extern/storage-sealing/states_sealing.go +++ b/extern/storage-sealing/states_sealing.go @@ -624,11 +624,21 @@ func (m *Sealing) handleSubmitCommitAggregate(ctx statemachine.Context, sector S spt: sector.SectorType, }) if err != nil { - return ctx.Send(SectorCommitFailed{xerrors.Errorf("queuing commit for aggregation failed: %w", err)}) + return ctx.Send(SectorRetrySubmitCommit{}) } if res.Error != "" { - return ctx.Send(SectorCommitFailed{xerrors.Errorf("aggregate error: %s", res.Error)}) + tok, _, err := m.api.ChainHead(ctx.Context()) + if err != nil { + log.Errorf("handleSubmitCommit: api error, not proceeding: %+v", err) + return nil + } + + if err := m.checkCommit(ctx.Context(), sector, sector.Proof, tok); err != nil { + return ctx.Send(SectorCommitFailed{xerrors.Errorf("commit check error: %w", err)}) + } + + return ctx.Send(SectorRetrySubmitCommit{}) } if e, found := res.FailedSectors[sector.SectorNumber]; found { From 6d555c9183dfdeb40b9fa36e5209eebbe2b2ce03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Thu, 1 Jul 2021 13:33:54 +0200 Subject: [PATCH 08/26] commit batch: AggregateAboveBaseFee config --- chain/types/fil.go | 5 +++++ extern/storage-sealing/commit_batch.go | 20 +++++++++++++++++++- extern/storage-sealing/sealiface/config.go | 8 +++++++- node/config/def.go | 6 ++++++ node/modules/storageminer.go | 22 ++++++++++++---------- 5 files changed, 49 insertions(+), 12 deletions(-) diff --git a/chain/types/fil.go b/chain/types/fil.go index 223ed3c50..0d6762851 100644 --- a/chain/types/fil.go +++ b/chain/types/fil.go @@ -23,6 +23,11 @@ func (f FIL) Unitless() string { return strings.TrimRight(strings.TrimRight(r.FloatString(18), "0"), ".") } +var AttoFil = NewInt(1) +var FemtoFil = BigMul(AttoFil, NewInt(1000)) +var PicoFil = BigMul(FemtoFil, NewInt(1000)) +var NanoFil = BigMul(PicoFil, NewInt(1000)) + var unitPrefixes = []string{"a", "f", "p", "n", "μ", "m"} func (f FIL) Short() string { diff --git a/extern/storage-sealing/commit_batch.go b/extern/storage-sealing/commit_batch.go index 15fadcf87..c18c89db5 100644 --- a/extern/storage-sealing/commit_batch.go +++ b/extern/storage-sealing/commit_batch.go @@ -194,7 +194,25 @@ func (b *CommitBatcher) maybeStartBatch(notif bool) ([]sealiface.CommitBatchRes, var res []sealiface.CommitBatchRes - if total < cfg.MinCommitBatch || total < miner5.MinAggregatedSectors { + individual := (total < cfg.MinCommitBatch) || (total < miner5.MinAggregatedSectors) + + if !individual && !cfg.AggregateAboveBaseFee.Equals(big.Zero()) { + tok, _, err := b.api.ChainHead(b.mctx) + if err != nil { + return nil, err + } + + bf, err := b.api.ChainBaseFee(b.mctx, tok) + if err != nil { + return nil, xerrors.Errorf("couldn't get base fee: %w", err) + } + + if bf.LessThan(cfg.AggregateAboveBaseFee) { + individual = true + } + } + + if individual { res, err = b.processIndividually() } else { res, err = b.processBatch(cfg) diff --git a/extern/storage-sealing/sealiface/config.go b/extern/storage-sealing/sealiface/config.go index b237072d3..0410b92c0 100644 --- a/extern/storage-sealing/sealiface/config.go +++ b/extern/storage-sealing/sealiface/config.go @@ -1,6 +1,10 @@ package sealiface -import "time" +import ( + "time" + + "github.com/filecoin-project/go-state-types/abi" +) // this has to be in a separate package to not make lotus API depend on filecoin-ffi @@ -31,6 +35,8 @@ type Config struct { CommitBatchWait time.Duration CommitBatchSlack time.Duration + AggregateAboveBaseFee abi.TokenAmount + TerminateBatchMax uint64 TerminateBatchMin uint64 TerminateBatchWait time.Duration diff --git a/node/config/def.go b/node/config/def.go index 5c2c8de03..a108402e3 100644 --- a/node/config/def.go +++ b/node/config/def.go @@ -110,6 +110,10 @@ type SealingConfig struct { // time buffer for forceful batch submission before sectors/deals in batch would start expiring CommitBatchSlack Duration + // network BaseFee below which to stop doing commit aggregation, instead + // submitting proofs to the chain individually + AggregateAboveBaseFee types.FIL + TerminateBatchMax uint64 TerminateBatchMin uint64 TerminateBatchWait Duration @@ -296,6 +300,8 @@ func DefaultStorageMiner() *StorageMiner { CommitBatchWait: Duration(24 * time.Hour), // this can be up to 30 days CommitBatchSlack: Duration(1 * time.Hour), // time buffer for forceful batch submission before sectors/deals in batch would start expiring, higher value will lower the chances for message fail due to expiration + AggregateAboveBaseFee: types.FIL(types.BigMul(types.PicoFil, types.NewInt(150))), // 0.15 nFIL + TerminateBatchMin: 1, TerminateBatchMax: 100, TerminateBatchWait: Duration(5 * time.Minute), diff --git a/node/modules/storageminer.go b/node/modules/storageminer.go index 715fb9a2b..27d622b7c 100644 --- a/node/modules/storageminer.go +++ b/node/modules/storageminer.go @@ -840,11 +840,12 @@ func NewSetSealConfigFunc(r repo.LockedRepo) (dtypes.SetSealingConfigFunc, error PreCommitBatchWait: config.Duration(cfg.PreCommitBatchWait), PreCommitBatchSlack: config.Duration(cfg.PreCommitBatchSlack), - AggregateCommits: cfg.AggregateCommits, - MinCommitBatch: cfg.MinCommitBatch, - MaxCommitBatch: cfg.MaxCommitBatch, - CommitBatchWait: config.Duration(cfg.CommitBatchWait), - CommitBatchSlack: config.Duration(cfg.CommitBatchSlack), + AggregateCommits: cfg.AggregateCommits, + MinCommitBatch: cfg.MinCommitBatch, + MaxCommitBatch: cfg.MaxCommitBatch, + CommitBatchWait: config.Duration(cfg.CommitBatchWait), + CommitBatchSlack: config.Duration(cfg.CommitBatchSlack), + AggregateAboveBaseFee: types.FIL(cfg.AggregateAboveBaseFee), TerminateBatchMax: cfg.TerminateBatchMax, TerminateBatchMin: cfg.TerminateBatchMin, @@ -871,11 +872,12 @@ func NewGetSealConfigFunc(r repo.LockedRepo) (dtypes.GetSealingConfigFunc, error PreCommitBatchWait: time.Duration(cfg.Sealing.PreCommitBatchWait), PreCommitBatchSlack: time.Duration(cfg.Sealing.PreCommitBatchSlack), - AggregateCommits: cfg.Sealing.AggregateCommits, - MinCommitBatch: cfg.Sealing.MinCommitBatch, - MaxCommitBatch: cfg.Sealing.MaxCommitBatch, - CommitBatchWait: time.Duration(cfg.Sealing.CommitBatchWait), - CommitBatchSlack: time.Duration(cfg.Sealing.CommitBatchSlack), + AggregateCommits: cfg.Sealing.AggregateCommits, + MinCommitBatch: cfg.Sealing.MinCommitBatch, + MaxCommitBatch: cfg.Sealing.MaxCommitBatch, + CommitBatchWait: time.Duration(cfg.Sealing.CommitBatchWait), + CommitBatchSlack: time.Duration(cfg.Sealing.CommitBatchSlack), + AggregateAboveBaseFee: types.BigInt(cfg.Sealing.AggregateAboveBaseFee), TerminateBatchMax: cfg.Sealing.TerminateBatchMax, TerminateBatchMin: cfg.Sealing.TerminateBatchMin, From 337045071121bfd2db10a1d95cbbba342226a58a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Thu, 1 Jul 2021 13:51:11 +0200 Subject: [PATCH 09/26] commit batch: Regression test nil FailedSectors map From 504882e1620b1b4c26a2dc0171112446a90d785d Mon Sep 17 00:00:00 2001 From: llifezou Date: Wed, 30 Jun 2021 16:32:44 +0800 Subject: [PATCH 10/26] fix ticket expiration check, otherwise it may cause a large number of loops to retry GetTicket when retrying PreCommit1 --- extern/storage-sealing/states_sealing.go | 38 ++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/extern/storage-sealing/states_sealing.go b/extern/storage-sealing/states_sealing.go index 642859dda..21dae3016 100644 --- a/extern/storage-sealing/states_sealing.go +++ b/extern/storage-sealing/states_sealing.go @@ -105,6 +105,10 @@ func checkTicketExpired(sector SectorInfo, epoch abi.ChainEpoch) bool { return epoch-sector.TicketEpoch > MaxTicketAge // TODO: allow configuring expected seal durations } +func checkProveCommitExpired(preCommitEpoch, msd abi.ChainEpoch, currEpoch abi.ChainEpoch) bool { + return currEpoch > preCommitEpoch+msd +} + func (m *Sealing) getTicket(ctx statemachine.Context, sector SectorInfo) (abi.SealRandomness, abi.ChainEpoch, error) { tok, epoch, err := m.api.ChainHead(ctx.Context()) if err != nil { @@ -126,7 +130,14 @@ func (m *Sealing) getTicket(ctx statemachine.Context, sector SectorInfo) (abi.Se if pci != nil { ticketEpoch = pci.Info.SealRandEpoch - if checkTicketExpired(sector, ticketEpoch) { + nv, err := m.api.StateNetworkVersion(ctx.Context(), tok) + if err != nil { + return nil, 0, xerrors.Errorf("getTicket: StateNetworkVersion: api error, not proceeding: %+v", err) + } + + msd := policy.GetMaxProveCommitDuration(actors.VersionForNetwork(nv), sector.SectorType) + + if checkProveCommitExpired(pci.PreCommitEpoch, msd, epoch) { return nil, 0, xerrors.Errorf("ticket expired for precommitted sector") } } @@ -182,14 +193,35 @@ func (m *Sealing) handlePreCommit1(ctx statemachine.Context, sector SectorInfo) } } - _, height, err := m.api.ChainHead(ctx.Context()) + tok, height, err := m.api.ChainHead(ctx.Context()) if err != nil { log.Errorf("handlePreCommit1: api error, not proceeding: %+v", err) return nil } if checkTicketExpired(sector, height) { - return ctx.Send(SectorOldTicket{}) // go get new ticket + pci, err := m.api.StateSectorPreCommitInfo(ctx.Context(), m.maddr, sector.SectorNumber, tok) + if err != nil { + log.Errorf("handlePreCommit1: StateSectorPreCommitInfo: api error, not proceeding: %+v", err) + return nil + } + + if pci == nil { + return ctx.Send(SectorOldTicket{}) // go get new ticket + } + + nv, err := m.api.StateNetworkVersion(ctx.Context(), tok) + if err != nil { + log.Errorf("handlePreCommit1: StateNetworkVersion: api error, not proceeding: %+v", err) + return nil + } + + msd := policy.GetMaxProveCommitDuration(actors.VersionForNetwork(nv), sector.SectorType) + + // if height > PreCommitEpoch + msd, there is no need to recalculate + if checkProveCommitExpired(pci.PreCommitEpoch, msd, height) { + return ctx.Send(SectorOldTicket{}) // will be removed + } } pc1o, err := m.sealer.SealPreCommit1(sector.sealingCtx(ctx.Context()), m.minerSector(sector.SectorType, sector.SectorNumber), sector.TicketValue, sector.pieceInfos()) From 5aeacd2989463926888ceead2ed5fa941621c7ea Mon Sep 17 00:00:00 2001 From: llifezou Date: Thu, 1 Jul 2021 10:53:42 +0800 Subject: [PATCH 11/26] fix getTicket: sector precommitted but expired case --- extern/storage-sealing/states_sealing.go | 37 ++++++++++++++---------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/extern/storage-sealing/states_sealing.go b/extern/storage-sealing/states_sealing.go index 21dae3016..f60db7b45 100644 --- a/extern/storage-sealing/states_sealing.go +++ b/extern/storage-sealing/states_sealing.go @@ -109,22 +109,30 @@ func checkProveCommitExpired(preCommitEpoch, msd abi.ChainEpoch, currEpoch abi.C return currEpoch > preCommitEpoch+msd } -func (m *Sealing) getTicket(ctx statemachine.Context, sector SectorInfo) (abi.SealRandomness, abi.ChainEpoch, error) { +func (m *Sealing) getTicket(ctx statemachine.Context, sector SectorInfo) (abi.SealRandomness, abi.ChainEpoch, bool, error) { tok, epoch, err := m.api.ChainHead(ctx.Context()) if err != nil { - log.Errorf("handlePreCommit1: api error, not proceeding: %+v", err) - return nil, 0, nil + log.Errorf("getTicket: api error, not proceeding: %+v", err) + return nil, 0, false, nil + } + + // the reason why the StateMinerSectorAllocated function is placed here, if it is outside, + // if the MarshalCBOR function and StateSectorPreCommitInfo function return err, it will be executed + allocated, aerr := m.api.StateMinerSectorAllocated(ctx.Context(), m.maddr, sector.SectorNumber, nil) + if aerr != nil { + log.Errorf("getTicket: api error, checking if sector is allocated: %+v", aerr) + return nil, 0, false, nil } ticketEpoch := epoch - policy.SealRandomnessLookback buf := new(bytes.Buffer) if err := m.maddr.MarshalCBOR(buf); err != nil { - return nil, 0, err + return nil, 0, allocated, err } pci, err := m.api.StateSectorPreCommitInfo(ctx.Context(), m.maddr, sector.SectorNumber, tok) if err != nil { - return nil, 0, xerrors.Errorf("getting precommit info: %w", err) + return nil, 0, allocated, xerrors.Errorf("getting precommit info: %w", err) } if pci != nil { @@ -132,32 +140,31 @@ func (m *Sealing) getTicket(ctx statemachine.Context, sector SectorInfo) (abi.Se nv, err := m.api.StateNetworkVersion(ctx.Context(), tok) if err != nil { - return nil, 0, xerrors.Errorf("getTicket: StateNetworkVersion: api error, not proceeding: %+v", err) + return nil, 0, allocated, xerrors.Errorf("getTicket: StateNetworkVersion: api error, not proceeding: %+v", err) } msd := policy.GetMaxProveCommitDuration(actors.VersionForNetwork(nv), sector.SectorType) if checkProveCommitExpired(pci.PreCommitEpoch, msd, epoch) { - return nil, 0, xerrors.Errorf("ticket expired for precommitted sector") + return nil, 0, allocated, xerrors.Errorf("ticket expired for precommitted sector") } } + if allocated { // allocated is true, sector precommitted but expired, will SectorCommitFailed or SectorRemove + return nil, 0, allocated, xerrors.Errorf("Sector %s precommitted but expired", sector.SectorNumber) + } + rand, err := m.api.ChainGetRandomnessFromTickets(ctx.Context(), tok, crypto.DomainSeparationTag_SealRandomness, ticketEpoch, buf.Bytes()) if err != nil { - return nil, 0, err + return nil, 0, allocated, err } - return abi.SealRandomness(rand), ticketEpoch, nil + return abi.SealRandomness(rand), ticketEpoch, allocated, nil } func (m *Sealing) handleGetTicket(ctx statemachine.Context, sector SectorInfo) error { - ticketValue, ticketEpoch, err := m.getTicket(ctx, sector) + ticketValue, ticketEpoch, allocated, err := m.getTicket(ctx, sector) if err != nil { - allocated, aerr := m.api.StateMinerSectorAllocated(ctx.Context(), m.maddr, sector.SectorNumber, nil) - if aerr != nil { - log.Errorf("error checking if sector is allocated: %+v", aerr) - } - if allocated { if sector.CommitMessage != nil { // Some recovery paths with unfortunate timing lead here From 4c3bcd121b7487fe50fcbce87d0d8feef9226773 Mon Sep 17 00:00:00 2001 From: llifezou <46102475+llifezou@users.noreply.github.com> Date: Fri, 2 Jul 2021 11:38:04 +0800 Subject: [PATCH 12/26] Update extern/storage-sealing/states_sealing.go fix log Co-authored-by: Aayush Rajasekaran --- extern/storage-sealing/states_sealing.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/storage-sealing/states_sealing.go b/extern/storage-sealing/states_sealing.go index f60db7b45..213c5b80f 100644 --- a/extern/storage-sealing/states_sealing.go +++ b/extern/storage-sealing/states_sealing.go @@ -151,7 +151,7 @@ func (m *Sealing) getTicket(ctx statemachine.Context, sector SectorInfo) (abi.Se } if allocated { // allocated is true, sector precommitted but expired, will SectorCommitFailed or SectorRemove - return nil, 0, allocated, xerrors.Errorf("Sector %s precommitted but expired", sector.SectorNumber) + return nil, 0, allocated, xerrors.Errorf("sector %s precommitted but expired", sector.SectorNumber) } rand, err := m.api.ChainGetRandomnessFromTickets(ctx.Context(), tok, crypto.DomainSeparationTag_SealRandomness, ticketEpoch, buf.Bytes()) From db30d891c84bc52c6b6462e389891a3f68eebf0a Mon Sep 17 00:00:00 2001 From: llifezou <46102475+llifezou@users.noreply.github.com> Date: Fri, 2 Jul 2021 11:44:46 +0800 Subject: [PATCH 13/26] Update extern/storage-sealing/states_sealing.go MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix sector precommitted but expired judgment Co-authored-by: Łukasz Magiera --- extern/storage-sealing/states_sealing.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/storage-sealing/states_sealing.go b/extern/storage-sealing/states_sealing.go index 213c5b80f..59778f4ad 100644 --- a/extern/storage-sealing/states_sealing.go +++ b/extern/storage-sealing/states_sealing.go @@ -150,7 +150,7 @@ func (m *Sealing) getTicket(ctx statemachine.Context, sector SectorInfo) (abi.Se } } - if allocated { // allocated is true, sector precommitted but expired, will SectorCommitFailed or SectorRemove + if pci == nil && allocated { // allocated is true, sector precommitted but expired, will SectorCommitFailed or SectorRemove return nil, 0, allocated, xerrors.Errorf("sector %s precommitted but expired", sector.SectorNumber) } From 4fe3ecb8fca15a3b614e77d4b4d18b146d76009e Mon Sep 17 00:00:00 2001 From: johnli-helloworld Date: Wed, 30 Jun 2021 16:56:40 +0800 Subject: [PATCH 14/26] to optimize the batchwait --- extern/storage-sealing/commit_batch.go | 22 ++++++++++++++++------ extern/storage-sealing/precommit_batch.go | 22 ++++++++++++++++------ 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/extern/storage-sealing/commit_batch.go b/extern/storage-sealing/commit_batch.go index c18c89db5..57379414f 100644 --- a/extern/storage-sealing/commit_batch.go +++ b/extern/storage-sealing/commit_batch.go @@ -104,6 +104,7 @@ func (b *CommitBatcher) run() { panic(err) } + timer := time.NewTimer(b.batchWait(cfg.CommitBatchWait, cfg.CommitBatchSlack)) for { if forceRes != nil { forceRes <- lastMsg @@ -119,7 +120,7 @@ func (b *CommitBatcher) run() { return case <-b.notify: sendAboveMax = true - case <-b.batchWait(cfg.CommitBatchWait, cfg.CommitBatchSlack): + case <-timer.C: // do nothing case fr := <-b.force: // user triggered forceRes = fr @@ -130,17 +131,26 @@ func (b *CommitBatcher) run() { if err != nil { log.Warnw("CommitBatcher processBatch error", "error", err) } + + if !timer.Stop() { + select { + case <-timer.C: + default: + } + } + + timer.Reset(b.batchWait(cfg.CommitBatchWait, cfg.CommitBatchSlack)) } } -func (b *CommitBatcher) batchWait(maxWait, slack time.Duration) <-chan time.Time { +func (b *CommitBatcher) batchWait(maxWait, slack time.Duration) time.Duration { now := time.Now() b.lk.Lock() defer b.lk.Unlock() if len(b.todo) == 0 { - return nil + return maxWait } var cutoff time.Time @@ -158,12 +168,12 @@ func (b *CommitBatcher) batchWait(maxWait, slack time.Duration) <-chan time.Time } if cutoff.IsZero() { - return time.After(maxWait) + return maxWait } cutoff = cutoff.Add(-slack) if cutoff.Before(now) { - return time.After(time.Nanosecond) // can't return 0 + return time.Nanosecond // can't return 0 } wait := cutoff.Sub(now) @@ -171,7 +181,7 @@ func (b *CommitBatcher) batchWait(maxWait, slack time.Duration) <-chan time.Time wait = maxWait } - return time.After(wait) + return wait } func (b *CommitBatcher) maybeStartBatch(notif bool) ([]sealiface.CommitBatchRes, error) { diff --git a/extern/storage-sealing/precommit_batch.go b/extern/storage-sealing/precommit_batch.go index d1d2f5878..f576608ea 100644 --- a/extern/storage-sealing/precommit_batch.go +++ b/extern/storage-sealing/precommit_batch.go @@ -86,6 +86,7 @@ func (b *PreCommitBatcher) run() { panic(err) } + timer := time.NewTimer(b.batchWait(cfg.CommitBatchWait, cfg.CommitBatchSlack)) for { if forceRes != nil { forceRes <- lastRes @@ -100,7 +101,7 @@ func (b *PreCommitBatcher) run() { return case <-b.notify: sendAboveMax = true - case <-b.batchWait(cfg.PreCommitBatchWait, cfg.PreCommitBatchSlack): + case <-timer.C: // do nothing case fr := <-b.force: // user triggered forceRes = fr @@ -111,17 +112,26 @@ func (b *PreCommitBatcher) run() { if err != nil { log.Warnw("PreCommitBatcher processBatch error", "error", err) } + + if !timer.Stop() { + select { + case <-timer.C: + default: + } + } + + timer.Reset(b.batchWait(cfg.CommitBatchWait, cfg.CommitBatchSlack)) } } -func (b *PreCommitBatcher) batchWait(maxWait, slack time.Duration) <-chan time.Time { +func (b *PreCommitBatcher) batchWait(maxWait, slack time.Duration) time.Duration { now := time.Now() b.lk.Lock() defer b.lk.Unlock() if len(b.todo) == 0 { - return nil + return maxWait } var cutoff time.Time @@ -139,12 +149,12 @@ func (b *PreCommitBatcher) batchWait(maxWait, slack time.Duration) <-chan time.T } if cutoff.IsZero() { - return time.After(maxWait) + return maxWait } cutoff = cutoff.Add(-slack) if cutoff.Before(now) { - return time.After(time.Nanosecond) // can't return 0 + return time.Nanosecond // can't return 0 } wait := cutoff.Sub(now) @@ -152,7 +162,7 @@ func (b *PreCommitBatcher) batchWait(maxWait, slack time.Duration) <-chan time.T wait = maxWait } - return time.After(wait) + return wait } func (b *PreCommitBatcher) maybeStartBatch(notif bool) ([]sealiface.PreCommitBatchRes, error) { From c5ea17f83827252c5c5eed404fa7ec287fbb7bfe Mon Sep 17 00:00:00 2001 From: zhoutian527 Date: Fri, 2 Jul 2021 15:53:21 +0800 Subject: [PATCH 15/26] Fix: precommit_batch method used the wrong cfg.PreCommitBatchWait --- extern/storage-sealing/precommit_batch.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extern/storage-sealing/precommit_batch.go b/extern/storage-sealing/precommit_batch.go index f576608ea..bb50c1f51 100644 --- a/extern/storage-sealing/precommit_batch.go +++ b/extern/storage-sealing/precommit_batch.go @@ -86,7 +86,7 @@ func (b *PreCommitBatcher) run() { panic(err) } - timer := time.NewTimer(b.batchWait(cfg.CommitBatchWait, cfg.CommitBatchSlack)) + timer := time.NewTimer(b.batchWait(cfg.PreCommitBatchWait, cfg.PreCommitBatchSlack)) for { if forceRes != nil { forceRes <- lastRes @@ -120,7 +120,7 @@ func (b *PreCommitBatcher) run() { } } - timer.Reset(b.batchWait(cfg.CommitBatchWait, cfg.CommitBatchSlack)) + timer.Reset(b.batchWait(cfg.PreCommitBatchWait, cfg.PreCommitBatchSlack)) } } From ebbfe03831afe881435d7453092791685c65fe28 Mon Sep 17 00:00:00 2001 From: Peter Rabbitson Date: Fri, 2 Jul 2021 18:02:56 +0200 Subject: [PATCH 16/26] Fix tiny error in check-client-datacap --- cli/filplus.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/filplus.go b/cli/filplus.go index cd9616911..d4972bca6 100644 --- a/cli/filplus.go +++ b/cli/filplus.go @@ -211,7 +211,7 @@ var filplusCheckClientCmd = &cli.Command{ return err } if dcap == nil { - return xerrors.Errorf("client %s is not a verified client", err) + return xerrors.Errorf("client %s is not a verified client", caddr) } fmt.Println(*dcap) From 0511770d53508cd655489e595cc8538e78870690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Thu, 1 Jul 2021 21:07:53 +0200 Subject: [PATCH 17/26] storage: Fix FinalizeSector with sectors in stoage paths --- cmd/lotus-seal-worker/storage.go | 2 +- cmd/lotus-storage-miner/storage.go | 2 +- extern/sector-storage/manager.go | 17 +++++++++- node/modules/storageminer.go | 52 ++++++++++++++++-------------- 4 files changed, 46 insertions(+), 27 deletions(-) diff --git a/cmd/lotus-seal-worker/storage.go b/cmd/lotus-seal-worker/storage.go index afb566166..be662a6c3 100644 --- a/cmd/lotus-seal-worker/storage.go +++ b/cmd/lotus-seal-worker/storage.go @@ -101,7 +101,7 @@ var storageAttachCmd = &cli.Command{ } if !(cfg.CanStore || cfg.CanSeal) { - return xerrors.Errorf("must specify at least one of --store of --seal") + return xerrors.Errorf("must specify at least one of --store or --seal") } b, err := json.MarshalIndent(cfg, "", " ") diff --git a/cmd/lotus-storage-miner/storage.go b/cmd/lotus-storage-miner/storage.go index b4ab26ad3..f2068ea86 100644 --- a/cmd/lotus-storage-miner/storage.go +++ b/cmd/lotus-storage-miner/storage.go @@ -145,7 +145,7 @@ over time } if !(cfg.CanStore || cfg.CanSeal) { - return xerrors.Errorf("must specify at least one of --store of --seal") + return xerrors.Errorf("must specify at least one of --store or --seal") } b, err := json.MarshalIndent(cfg, "", " ") diff --git a/extern/sector-storage/manager.go b/extern/sector-storage/manager.go index d3fef8533..402a58593 100644 --- a/extern/sector-storage/manager.go +++ b/extern/sector-storage/manager.go @@ -587,10 +587,25 @@ func (m *Manager) FinalizeSector(ctx context.Context, sector storage.SectorRef, } } + pathType := storiface.PathStorage + { + sealedStores, err := m.index.StorageFindSector(ctx, sector.ID, storiface.FTSealed, 0, false) + if err != nil { + return xerrors.Errorf("finding sealed sector: %w", err) + } + + for _, store := range sealedStores { + if store.CanSeal { + pathType = storiface.PathSealing + break + } + } + } + selector := newExistingSelector(m.index, sector.ID, storiface.FTCache|storiface.FTSealed, false) err := m.sched.Schedule(ctx, sector, sealtasks.TTFinalize, selector, - m.schedFetch(sector, storiface.FTCache|storiface.FTSealed|unsealed, storiface.PathSealing, storiface.AcquireMove), + m.schedFetch(sector, storiface.FTCache|storiface.FTSealed|unsealed, pathType, storiface.AcquireMove), func(ctx context.Context, w Worker) error { _, err := m.waitSimpleCall(ctx)(w.FinalizeSector(ctx, sector, keepUnsealed)) return err diff --git a/node/modules/storageminer.go b/node/modules/storageminer.go index 27d622b7c..44b93a49e 100644 --- a/node/modules/storageminer.go +++ b/node/modules/storageminer.go @@ -856,33 +856,37 @@ func NewSetSealConfigFunc(r repo.LockedRepo) (dtypes.SetSealingConfigFunc, error }, nil } +func ToSealingConfig(cfg *config.StorageMiner) sealiface.Config { + return sealiface.Config{ + MaxWaitDealsSectors: cfg.Sealing.MaxWaitDealsSectors, + MaxSealingSectors: cfg.Sealing.MaxSealingSectors, + MaxSealingSectorsForDeals: cfg.Sealing.MaxSealingSectorsForDeals, + WaitDealsDelay: time.Duration(cfg.Sealing.WaitDealsDelay), + AlwaysKeepUnsealedCopy: cfg.Sealing.AlwaysKeepUnsealedCopy, + FinalizeEarly: cfg.Sealing.FinalizeEarly, + + BatchPreCommits: cfg.Sealing.BatchPreCommits, + MaxPreCommitBatch: cfg.Sealing.MaxPreCommitBatch, + PreCommitBatchWait: time.Duration(cfg.Sealing.PreCommitBatchWait), + PreCommitBatchSlack: time.Duration(cfg.Sealing.PreCommitBatchSlack), + + AggregateCommits: cfg.Sealing.AggregateCommits, + MinCommitBatch: cfg.Sealing.MinCommitBatch, + MaxCommitBatch: cfg.Sealing.MaxCommitBatch, + CommitBatchWait: time.Duration(cfg.Sealing.CommitBatchWait), + CommitBatchSlack: time.Duration(cfg.Sealing.CommitBatchSlack), + AggregateAboveBaseFee: types.BigInt(cfg.Sealing.AggregateAboveBaseFee), + + TerminateBatchMax: cfg.Sealing.TerminateBatchMax, + TerminateBatchMin: cfg.Sealing.TerminateBatchMin, + TerminateBatchWait: time.Duration(cfg.Sealing.TerminateBatchWait), + } +} + func NewGetSealConfigFunc(r repo.LockedRepo) (dtypes.GetSealingConfigFunc, error) { return func() (out sealiface.Config, err error) { err = readCfg(r, func(cfg *config.StorageMiner) { - out = sealiface.Config{ - MaxWaitDealsSectors: cfg.Sealing.MaxWaitDealsSectors, - MaxSealingSectors: cfg.Sealing.MaxSealingSectors, - MaxSealingSectorsForDeals: cfg.Sealing.MaxSealingSectorsForDeals, - WaitDealsDelay: time.Duration(cfg.Sealing.WaitDealsDelay), - AlwaysKeepUnsealedCopy: cfg.Sealing.AlwaysKeepUnsealedCopy, - FinalizeEarly: cfg.Sealing.FinalizeEarly, - - BatchPreCommits: cfg.Sealing.BatchPreCommits, - MaxPreCommitBatch: cfg.Sealing.MaxPreCommitBatch, - PreCommitBatchWait: time.Duration(cfg.Sealing.PreCommitBatchWait), - PreCommitBatchSlack: time.Duration(cfg.Sealing.PreCommitBatchSlack), - - AggregateCommits: cfg.Sealing.AggregateCommits, - MinCommitBatch: cfg.Sealing.MinCommitBatch, - MaxCommitBatch: cfg.Sealing.MaxCommitBatch, - CommitBatchWait: time.Duration(cfg.Sealing.CommitBatchWait), - CommitBatchSlack: time.Duration(cfg.Sealing.CommitBatchSlack), - AggregateAboveBaseFee: types.BigInt(cfg.Sealing.AggregateAboveBaseFee), - - TerminateBatchMax: cfg.Sealing.TerminateBatchMax, - TerminateBatchMin: cfg.Sealing.TerminateBatchMin, - TerminateBatchWait: time.Duration(cfg.Sealing.TerminateBatchWait), - } + out = ToSealingConfig(cfg) }) return }, nil From 29763df433a75f00d6b7be296603c9f30510d156 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Fri, 2 Jul 2021 20:56:09 +0200 Subject: [PATCH 18/26] set version to v1.10.1-rc1 --- build/openrpc/full.json.gz | Bin 22482 -> 22485 bytes build/openrpc/miner.json.gz | Bin 8086 -> 8089 bytes build/openrpc/worker.json.gz | Bin 2578 -> 2578 bytes build/version.go | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index fe80856db35425e416b8d25ce4b9c582d08d2f83..3f7b89d36753737b38de9b581d2e5061849d2e5f 100644 GIT binary patch delta 22357 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 CmrHm6 delta 22358 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 Hp#%O0Br!)H diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 989f3b020ec566c763c89dc02d2d7f6a9dae0c78..92a870e6cd0bf578f0cb37bfff515e7d37f8fc55 100644 GIT binary patch delta 8025 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 bQ+8HMoS08fH&6dR00960yN}hNzKj6?B5ZvT delta 8022 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 oK+Np5NF)Nr!X28Q6t>rvDml|&v$$FOHvj Date: Fri, 2 Jul 2021 15:30:15 -0400 Subject: [PATCH 19/26] Add v1.10.1-rc1 changelog --- CHANGELOG.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a724c841d..937c73de3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,43 @@ # Lotus changelog +# 1.10.1-rc1 / 2021-07-02 + +This is an optional release of Lotus that have many bug fixes and improvements based on the feedbacks we got from the +community since HyperDrive. + +## New Features +- commit batch: AggregateAboveBaseFee config #6650 + - `AggregateAboveBaseFee` is added to miner sealing configuration for setting the network base fee to start aggregating proofs. When the network base fee is lower than this + value, the prove commits will be submitted individually via `ProveCommitSector`. According to the [Batch + Incentive Alignment](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0013. + md#batch-incentive-alignment) introduced in FIP-0013, we recommend miners to set this value to 0.15 nanoFIL to + avoid unexpected aggregation fee in burn and enjoy the most benefits of aggregation! + +## Bug Fixes +- storage: Fix FinalizeSector with sectors in stoage paths #6652\ +- Fix tiny error in check-client-datacap #6664 +- Fix: precommit_batch method used the wrong cfg.PreCommitBatchWait #6658 +- to optimize the batchwait #6636 +- fix getTicket: sector precommitted but expired case #6635 +- handleSubmitCommitAggregate() exception handling #6595 +- remove precommit check in handleCommitFailed #6634 +- ensure agg fee is adequate +- fix: miner balance is not enough, so that ProveCommitAggregate msg exec failed #6623 +- commit batch: Initialize the FailedSectors map #6647 + +Contributors + +| Contributor | Commits | Lines ± | Files Changed | +|-------------|---------|---------|---------------| +| Łukasz Magiera | 7 | +151/-56 | 21 | +| llifezou | 4 | +59/-20 | 4 | +| johnli-helloworld | 2 | +45/-14 | 4 | +| wangchao | 1 | +1/-27 | 1 | +| Jerry | 2 | +9/-4 | 2 | +| zhoutian527 | 1 | +2/-2 | 1 | +| Peter Rabbitson | 1 | +1/-1 | 1 | + + # 1.10.0 / 2021-06-23 This is a mandatory release of Lotus that introduces Filecoin network v13, codenamed the HyperDrive upgrade. The From a06ecde580e48c11c067c29f16931fc016711182 Mon Sep 17 00:00:00 2001 From: Jennifer Wang Date: Fri, 2 Jul 2021 15:33:58 -0400 Subject: [PATCH 20/26] recommend to update --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 937c73de3..674c59e14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,11 @@ # 1.10.1-rc1 / 2021-07-02 -This is an optional release of Lotus that have many bug fixes and improvements based on the feedbacks we got from the +This is an optional, but **highly recommended** release of Lotus that have many bug fixes and improvements based on the +feedbacks we +got +from +the community since HyperDrive. ## New Features From 0b5d1551fe25a3652a2ce7d55f52c7d0d8bd9259 Mon Sep 17 00:00:00 2001 From: Jennifer Wang Date: Fri, 2 Jul 2021 15:50:26 -0400 Subject: [PATCH 21/26] format fix and small clarification --- CHANGELOG.md | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 674c59e14..eb290a715 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,23 +2,14 @@ # 1.10.1-rc1 / 2021-07-02 -This is an optional, but **highly recommended** release of Lotus that have many bug fixes and improvements based on the -feedbacks we -got -from -the -community since HyperDrive. +This is an optional, but **highly recommended** release of Lotus that have many bug fixes and improvements based on the feedbacks we got from the community since HyperDrive. ## New Features - commit batch: AggregateAboveBaseFee config #6650 - - `AggregateAboveBaseFee` is added to miner sealing configuration for setting the network base fee to start aggregating proofs. When the network base fee is lower than this - value, the prove commits will be submitted individually via `ProveCommitSector`. According to the [Batch - Incentive Alignment](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0013. - md#batch-incentive-alignment) introduced in FIP-0013, we recommend miners to set this value to 0.15 nanoFIL to - avoid unexpected aggregation fee in burn and enjoy the most benefits of aggregation! + - `AggregateAboveBaseFee` is added to miner sealing configuration for setting the network base fee to start aggregating proofs. When the network base fee is lower than this value, the prove commits will be submitted individually via `ProveCommitSector`. According to the [Batch Incentive Alignment](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0013. md#batch-incentive-alignment) introduced in FIP-0013, we recommend miners to set this value to 0.15 nanoFIL(which is also the default) to avoid unexpected aggregation fee in burn and enjoy the most benefits of aggregation! ## Bug Fixes -- storage: Fix FinalizeSector with sectors in stoage paths #6652\ +- storage: Fix FinalizeSector with sectors in storage paths #6652 - Fix tiny error in check-client-datacap #6664 - Fix: precommit_batch method used the wrong cfg.PreCommitBatchWait #6658 - to optimize the batchwait #6636 From 7531e543f3d23e5befef27baf3c29a9c2549a6d1 Mon Sep 17 00:00:00 2001 From: Jennifer Wang Date: Mon, 5 Jul 2021 14:55:18 -0400 Subject: [PATCH 22/26] bump the version to v1.10.1 --- CHANGELOG.md | 18 +++++++++--------- build/openrpc/full.json.gz | Bin 22485 -> 22482 bytes build/openrpc/miner.json.gz | Bin 8089 -> 8086 bytes build/openrpc/worker.json.gz | Bin 2578 -> 2577 bytes build/version.go | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb290a715..d3ecc6c52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,12 @@ # Lotus changelog -# 1.10.1-rc1 / 2021-07-02 +# 1.10.1 / 2021-07-05 -This is an optional, but **highly recommended** release of Lotus that have many bug fixes and improvements based on the feedbacks we got from the community since HyperDrive. +This is an optional but **highly recommended** release of Lotus that have many bug fixes and improvements based on the feedbacks we got from the community since HyperDrive. ## New Features - commit batch: AggregateAboveBaseFee config #6650 - - `AggregateAboveBaseFee` is added to miner sealing configuration for setting the network base fee to start aggregating proofs. When the network base fee is lower than this value, the prove commits will be submitted individually via `ProveCommitSector`. According to the [Batch Incentive Alignment](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0013. md#batch-incentive-alignment) introduced in FIP-0013, we recommend miners to set this value to 0.15 nanoFIL(which is also the default) to avoid unexpected aggregation fee in burn and enjoy the most benefits of aggregation! + - `AggregateAboveBaseFee` is added to miner sealing configuration for setting the network base fee to start aggregating proofs. When the network base fee is lower than this value, the prove commits will be submitted individually via `ProveCommitSector`. According to the [Batch Incentive Alignment](https://github. com/filecoin-project/FIPs/blob/master/FIPS/fip-0013. md#batch-incentive-alignment) introduced in FIP-0013, we recommend miners to set this value to 0.15 nanoFIL(which is the default value) to avoid unexpected aggregation fee in burn and enjoy the most benefits of aggregation! ## Bug Fixes - storage: Fix FinalizeSector with sectors in storage paths #6652 @@ -24,13 +24,13 @@ Contributors | Contributor | Commits | Lines ± | Files Changed | |-------------|---------|---------|---------------| -| Łukasz Magiera | 7 | +151/-56 | 21 | -| llifezou | 4 | +59/-20 | 4 | -| johnli-helloworld | 2 | +45/-14 | 4 | -| wangchao | 1 | +1/-27 | 1 | +| @magik6k| 7 | +151/-56 | 21 | +| @llifezou | 4 | +59/-20 | 4 | +| @johnli-helloworld | 2 | +45/-14 | 4 | +| @wangchao | 1 | +1/-27 | 1 | | Jerry | 2 | +9/-4 | 2 | -| zhoutian527 | 1 | +2/-2 | 1 | -| Peter Rabbitson | 1 | +1/-1 | 1 | +| @zhoutian527 | 1 | +2/-2 | 1 | +| @ribasushi| 1 | +1/-1 | 1 | # 1.10.0 / 2021-06-23 diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 3f7b89d36753737b38de9b581d2e5061849d2e5f..c75dfefc6bfaa5a9589de052cdda2e8163fbee0e 100644 GIT binary patch delta 22358 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 Hp#%O0N5Mx& delta 22357 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 CmrHm6 diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 92a870e6cd0bf578f0cb37bfff515e7d37f8fc55..13d73f0690068712b358bf71d4168771d4dc814d 100644 GIT binary patch delta 8022 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 Yi4*hb>E`MG2LJ&7|Jk6S7`luB04juuO#lD@ delta 8025 zcmV-fAEw}zKbb#}g@4@x-|CuAEz^Z`PVB%Oetk4Ca9P#&$bl9?xP59-;-A{K4}-vL znKle8A9+-e`TOs`XXG26F0f_12#i-_N_;Sb9}$NBnEDHgzBG~qUU(hDBACK^+CCG1 zzBFC{@vCy%k*Kea47q9;qX_wlo@#TeX8lennM>b zdhi~&o&#As=Csr8^#|rni&f{{0M5uK9`q?L^r}_>wiDM>f3x4do)KrJR`1)C>y&^ z9CL^lj?*%w53ix`A`B>8d47%pFmd3g?-=^;f#XbobsMo>`0fkwZ&zPF<#D!`c=Wj1 zrAHG{=<+uj;t@&5Q~Ut}c72IdaYl7O#dRowuYKD=mj4kmu@w&UOs-*fh^%b*Y zSbeP+LS*>hg*$=ct;0&?;L3>2TbmS8LZ-1$XC0@y26@d&;|=9Exx_xfgg!II6SxX25p^uuWVn zjHPAigbK*P@N_342;V4t%LcV^F1#_L;!Ts5qY)OpOa0Vv43HSv6vR zR&^zyy)8pDk{6sM!Yi< zgn|F?4qL=#{53QuAb^L1ggd$pc+2w9j$-j)UxCFw1Qfmn*6qS8hs6m3Dl8V?`G2JV zR3)CK38~%BWI@B?KLP_28yXYwj9?r32AxAA@Sw%e#x~ezGuYtU#`PS2!y>Y5gcBMV zbPg!5!awJM%ZA7#(O+PU@XYv*=$yU(hA%%|e;)t!_Vnzx&!fNIo{r!BH9Eci#enz@ z`2@QR0e?Dg835b7t#6n$#-1fQ`F#$tVFAZsEvANv0^S3J zc^?@g^Sa+~O^T&}%@dY2?trs^W*JFL~!G1ULq2xG~p*2Go{(hXB> ziK*6E=@+g?e0mNjD9=Jm8h@(5jD_s>8M1j?Tq{VErMs25ci7MTWlCwBIZf*f*@n*; zB7m3%1~3BXOb&Xtb|(1NAb z`FKs9Fr~Y`bI0tJ;zNyUR{30G3Vd4NgN2ec@{t8c(2r{tYc;aXI15V>KV^v^V+trN z$cC37pr1XP0bG$Wij=paU&aB!T)TXBg!{itchp}O5)lH2?0>fov2LA8D4!vvg8bM* z)WCZg(G7wB(jZ(#{#;X0XMui?%*c$9wPzADSQqsfL%N}5v^>fxk4xl^=KEM0^f#WM z{o``@emaBx&AI?nmKW*?F|DUtKL@W+Z}@kQ_;+0_E6EA9E)nJsu9Ji1=9~M4b z7gNcwLj4G=vwtR8jeQ&Z-CO28TIV+=7@_Xv&s@?qGO@COhLQJ&k&iXqxq25{a|qYS z#0v5a3-1pLpXB&*HHPtI)YKcI!qAu|$I1wAoK2hf-KOGqjc78_RJf^Px$q2N3p(e3 zf@>e(U@GAn9m!M?QwgRGD4=1Pc2xM{oF`>?5c+NY_kX^Qwpr73{uXmpWy9i+82_@a z8c|>4Ju$`%-9fy3esRtjnb0}(`3P#;rlR;%n>%-5Biq-*N!3f5==RS0zY+4~!$0@` z{PyR+@8B>0N4*b+r-A?Z*SFS}`(NI^ANPI<-jNU2_x{JryWjqgPD>|O?C6&6pADyu zJBnC@5P#7Rke&v&6|hMVkT3bY3XfKBdCB$|&2Vh3o(8vh3xO*QY-IT_r;C{nlV4tE zr#~yn(>;*II?*wgi}cB79}!NZH*`DwUd#Ll?z7Lt@et90HZAiSxiFx>^;n5+r`s~$ z-Ft|2D*QQy|NWhq!$I$~#Jdznxq7*E#&(fBnmR zDtG`^IMf0)qOR(s0i?f%R*lp*)vQr2UxZI&;S>=uGddkh%(71L6%H%bF=>uSl5q-5 zuwboHyQ^Df;loMRrhGhSVDBly8!>FgOAM6}K1oRd^?p<&M8+cczCwO8KriWF7Tx8A z^ncDI6ggUNA7}*MpK-vCyI2DH2t2qDQ~m|+fWrVd^Y8*&J_G^e=v)kIGvu{0;#AG+ zrPC!xT@>q5AE+cA?TIj}j{Ord5@yLm;FQkdml3Khm0v-;$>(qK`I~(HEhCBQ5JVxP zmnfjgfK0iC4h1b$;%BnZ*&JXDbCdqnEq`n%3sllaNkmy*YO|XH-h!Z9YWziTfe}T3 z5?_|~%?gYm4wK=tZ$H8y05d4f*Z)N4&>z86)x_Cb6wF}$$-XN`gTMwX zv6)L$+zvTU&az}Ymt`vz9)VheU-ZbO9hjmB7a^zvt@vm@D&ijWt|1!=-Q|6K|pgpFQ3CJ7(o9{ z7_r5Av(8ET2q~}u1tUP`@&fU(@>0#Jtk;+-jj6I5rb@(#r9g1Bm^dhym#TXOrvf6>`?ZiwqC+^)#F-NG|~_T{eLdryegY#v1kqs)(tq+|@-cvp!LF3gkv$ zl_Zo>IzCRqlQr6j3e(pw|LFzI{Rjdtj*vVLCmJUsu7YT zBR4-1CB!vVI;O@7*^L+(D;>*xgzS5rw7U>k#g)FHLpOpxA~tto&3~cU>2$gW{J-l? zXUPBi(_ATQ4i7u=KLwNSDna`*ji5CFpe6vc3jrW4OCv4lS|4A6Bah~k_%5Jg=NLSo z$c1anlRZgGRo&GQs*UJ7)uY?8)TAm-BNJ6lY9ngxr^_!?-LxUT{1ptCywtSuRYGlR zJ748(>u!CO)HVR6(0}!4U{GTC;(fCZw%G^U?1S9~Zk?#EbP@78uDTC)tl9_5(TRP> zp#2ujE->YgwDO?OuM$3+1BAKp)H1w*xLp|7Hnd~ov1NE~WY4t_E$(6x#8^v=>PGiy zBuA?!q8&5O3oB=5t;3LA>}3`*(u}e(nC2UWYk=y3{08JS`+sh56#ZTegLw072hl+P zW$#3F&wd+sq#MWOuSqu<}+11I~~gN9TD`QvB-|h-PzY4)eq9`xH<+ zQQfx0t%%?Qq!c3pIPZf8ZW(DN*`g7R>1^zfyGt9sSIZ0((OD z1i@9;D#f_C%n_=D;W3$FC>~eS#_?oB4U+%NNUr8wRevchKQMtr^+0+e>0_J88ciPF z-Y#^XsILAJD0ztjdWLMq^yOB#vt%k>k|!nDT#&aX2W;=El&G#2TXLiLTSXZWf2&PG zVsedqH1e@o`A~!rM-H@SQ0VS*vXLMlmkTgK?Z`OD6^%4Cxma97*E4{J7+)9^1{C30 zp`;U;uzw_bDP2=bywtHR!yU}sPN&l{qkV-Z1&zYxHt1aQOMmO)z8OfWE6uJrcb(c| z9kdj4r%9;XUFLkCDX?Js3^-1h*~OP(mmaUzH(sU7y%U14c5yA!etweIvXL*uzlFXa zQCm*d>R2_UVI1#OQOJeZ5N39c#J>lU|3&|r1%HJ|xDc^hrLn@DFKsTkzYqkwhb_}Z zIPq)Mkr|iSr?XkfuYOqVx@?sc>+3Q|;?VfI-SVO!i;%S)?=r5HUO~oNHePI3TJke& zHc;B&gusbI#fonzlVfWR?Q;ZXRj?u^qQVPt zC)x|d0D;Nn<5S)VQWDB)*jO!W*bCPS3=|SG0`cBp6KpRW=o zKC%s{gkz-8EKX(M9quVC+YR9CPkWh}fCwlZvlbX34mv4I2U{FeY%y zelXoaflq_Thif=}r#Zc=x&&FU$VcGcz9;@?Z{`EL+=7sdkSgr3Gy=qo#hCaiN| z03j~=17Zl7ueCOeAS?Z&A_fTW?b>rHjaSDnmNlm%tT4JhhAWv=; zHH~0HA-Q$Z^K3#AjSyY-yQ*s*W4@{*(l=fo=_@ZTNq?#uGO`T!1-lULYousjq)2rQ zWXO4pMZ%n)DpHgnQ>%HnLO55D62+N?#~ddMI1aQ8u5yI6hOqI@_2`2^eB%p1lwUL~ z@|c2em=c5fXf}g>oa_XF?>sa%+)pMrYoipgn@~Y&Vj8uIOpdRqhSRdw2_SHlP^^WPC63 za~4U}y?86ETs;)ON~*q4yo9orc;<)VqbS5u1b>@gd=re_lw913pF8!U2996R62gNsX=KaZ#(* zM}J99Y$S0~#Jdznxq7*E#&(fBnmBnSAvmDtC>nTYrIF zfAFJF!pHACV$B(9b~{~;TH@@jb!Fl_IG(Jz>{9B%6{J2#%|WkaUXv&pKK#CyAfWGj zfAx5lmU&5H3gVzYKDgtSd1_H~C)PDZM_T5)dk^{PM{LAjAezmoIW#+F%lrfSXo{en zd2xXeMZg(3(B{X)uxFp}HFDvSK7a6?hiKTv4!TJ8RtNsW=`EW08ZtteYT;xRt(yFf zIjS?Gr$TnzY?5v~Z91Pl$w4~hSD2>g2Z*^|lK9LSznoR_8^X3cnOb=$5rYF41{AoS z-pH?gV68pfNNJBO#Y(50G`1Aw&JZphO&-{1f0-Z*{D*hgB0NeuG$$Z{hkt`aH8{wvWlGjr#DHf$)?tv%aoCt)$mdFFadD$25(s z&|$aN$#JS{kg9!SXw_vzA%EL^_Uvk@Dj|hJ{%b0ZtC6^}Y-1~jgg$eJv}hzb7O=8Q z*i8z{WxuDoizSqtQ`^2I7RY`RElEq$P#+k{CM{2*GPJgEQlu}U2pYVY^2Zy7tiq70 z^@5NACv0Bph{G?4}_Bb76$axafnq#o5V!& zkHZ!a&w6qF;6bidmL~fc{R8<8Kg;qXKLhS(ef?YQt?*b=tEsPL>_BQqFX#k`?;%85R4L zY1C8RdLZWD99j{@Ql>PL7op$ z4^6cEiPGB<^nYMn`??3kB@e|c*{$W7*Qg<$k-i@6P)^HFXIm?;jtGItCteLm8&jzn zW;M|@+5A>*=LS|ASlueDHkfwV?7m64A`e`R%=KuR?| zxPA#%%3K9BAgiBi&%ZQYln!}^4Q%Bq$z8G3W!Rt*X>FE>_a>VAoDoNP*^l_(WURaqU8){J|hpP5@jdX$7(bbw$j4Z37Bkdw|Z(9Pv@@ zE7}hh?JI8#ih1F-B8T4A6NRZ3Xb$_awGeX?UinGFE6-;bO#u3`-&fuuC1BzTdc>!{ zK;Y0y8PG{OdJAjeFHuEQ*F(0Irna&VW|!RZTz`;R`Kr3d9#BAqms?MUZp)M$D^L*J zRa>;9zBVbq6;psKZ(eOMmSODr;AWT}Um9CkeVyQDDj#3d^$BVJ^l{DAy$sDxhkb&% zJ#k%?Hg_DYpBD0Ccg@dze1G$>(R5O0X_ofi#^tI=7FdwrYD z>f2{w)s1d~8Ga>`az|_~tE-n!77JvzKYxzb`UEt_HS-j9s)>!QrQ~!{y0nsCM@PrQ z>9Kus0(u9B$A@nY2HoS6gX8HG9Gpzyw0|=_?i@l0<3xt&9La=U&n#|+i2>%(VduCz z0iA=x?!-PAya8_xCRXS808Be?rd_Ld2;bPtqswwAUW4G42`>cB>$}ct#^U@Kx7SRI zUoG$#fT%g_@F0p$&7s-r^g0LK?m@SA-8mWddc)4qpJvPag#~j)Ob0f>H%YQ~B zQ6BLb3s4gk>OEM@1@{+%VE3?Px(FwJttMM6=Vxb(zHEReu@)V3gZ{aByE(X+nIFw5 z@m;{!+6ELJP~<|{@q|K1N}Qp%Z!V?k=0kyvV+v>$b;IlH=$lng<`wnyP1ME~6ppl) zISNNrr#^-AX!0Dp6q*Xi=5ZCW@PDmP7@<3wKLp4Ejydcd4UUhFPCADtgF%bE8h;0# zIqde1j|V56?(y+)hd*9MW_sPh(crj$I5=*ZXQR)7IXoP+%n$r;Urq2~^x5e4`$y&t z6OwlrOq``ae1z`j0NNiB=Bg+93GVsN58gtAbV9i}lKLryDK^rI0w%dgvx4Bpx)fcK-!wZAv+Fij bQ+8HMoS08fH&6dR00960yN}hNzKj6?B5ZvT diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index a1639f211f2248ef10d41390b9aa473bedb5c766..5ae5cdb6948ca6bed9568cd132947051d17ba82f 100644 GIT binary patch literal 2577 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 literal 2578 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 oF>}@;kq8(IPiTIT* Date: Mon, 5 Jul 2021 15:25:37 -0400 Subject: [PATCH 23/26] Update CHANGELOG.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Łukasz Magiera --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3ecc6c52..2aa3596e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ This is an optional but **highly recommended** release of Lotus that have many b ## New Features - commit batch: AggregateAboveBaseFee config #6650 - - `AggregateAboveBaseFee` is added to miner sealing configuration for setting the network base fee to start aggregating proofs. When the network base fee is lower than this value, the prove commits will be submitted individually via `ProveCommitSector`. According to the [Batch Incentive Alignment](https://github. com/filecoin-project/FIPs/blob/master/FIPS/fip-0013. md#batch-incentive-alignment) introduced in FIP-0013, we recommend miners to set this value to 0.15 nanoFIL(which is the default value) to avoid unexpected aggregation fee in burn and enjoy the most benefits of aggregation! + - `AggregateAboveBaseFee` is added to miner sealing configuration for setting the network base fee to start aggregating proofs. When the network base fee is lower than this value, the prove commits will be submitted individually via `ProveCommitSector`. According to the [Batch Incentive Alignment](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0013. md#batch-incentive-alignment) introduced in FIP-0013, we recommend miners to set this value to 0.15 nanoFIL(which is the default value) to avoid unexpected aggregation fee in burn and enjoy the most benefits of aggregation! ## Bug Fixes - storage: Fix FinalizeSector with sectors in storage paths #6652 From 8bf06bacfa267eb98a0155c4a6a5f3a0d4d30fa0 Mon Sep 17 00:00:00 2001 From: Jennifer <42981373+jennijuju@users.noreply.github.com> Date: Mon, 5 Jul 2021 16:52:13 -0400 Subject: [PATCH 24/26] Update CHANGELOG.md Co-authored-by: Aayush Rajasekaran --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2aa3596e9..1e34f6a36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ # 1.10.1 / 2021-07-05 -This is an optional but **highly recommended** release of Lotus that have many bug fixes and improvements based on the feedbacks we got from the community since HyperDrive. +This is an optional but **highly recommended** release of Lotus that has many bug fixes and improvements based on the feedback we got from the community since HyperDrive. ## New Features - commit batch: AggregateAboveBaseFee config #6650 From f972021b23ebfbf9b676e4fe9b19e9f7ac10d800 Mon Sep 17 00:00:00 2001 From: Jennifer <42981373+jennijuju@users.noreply.github.com> Date: Mon, 5 Jul 2021 16:52:35 -0400 Subject: [PATCH 25/26] Update CHANGELOG.md Co-authored-by: Aayush Rajasekaran --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e34f6a36..47f9fae46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ This is an optional but **highly recommended** release of Lotus that has many bu ## New Features - commit batch: AggregateAboveBaseFee config #6650 - - `AggregateAboveBaseFee` is added to miner sealing configuration for setting the network base fee to start aggregating proofs. When the network base fee is lower than this value, the prove commits will be submitted individually via `ProveCommitSector`. According to the [Batch Incentive Alignment](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0013. md#batch-incentive-alignment) introduced in FIP-0013, we recommend miners to set this value to 0.15 nanoFIL(which is the default value) to avoid unexpected aggregation fee in burn and enjoy the most benefits of aggregation! + - `AggregateAboveBaseFee` is added to miner sealing configuration for setting the network base fee to start aggregating proofs. When the network base fee is lower than this value, the prove commits will be submitted individually via `ProveCommitSector`. According to the [Batch Incentive Alignment](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0013.md#batch-incentive-alignment) introduced in FIP-0013, we recommend miners to set this value to 0.15 nanoFIL(which is the default value) to avoid unexpected aggregation fee in burn and enjoy the most benefits of aggregation! ## Bug Fixes - storage: Fix FinalizeSector with sectors in storage paths #6652 From 4b6258f2a2f8c57cb2344adad02d14b8d1158b65 Mon Sep 17 00:00:00 2001 From: Jennifer <42981373+jennijuju@users.noreply.github.com> Date: Mon, 5 Jul 2021 19:15:27 -0400 Subject: [PATCH 26/26] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47f9fae46..fe516ec60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ # 1.10.1 / 2021-07-05 -This is an optional but **highly recommended** release of Lotus that has many bug fixes and improvements based on the feedback we got from the community since HyperDrive. +This is an optional but **highly recommended** release of Lotus for lotus miners that has many bug fixes and improvements based on the feedback we got from the community since HyperDrive. ## New Features - commit batch: AggregateAboveBaseFee config #6650