From 2d123aab4747d0a2a36163c50b833a547cfcb3a3 Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Mon, 28 Jun 2021 22:16:03 -0400 Subject: [PATCH 01/21] Lotus version 1.11.0 --- CHANGELOG.md | 4 ++++ build/version.go | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11f7d300b..718e86f9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Lotus changelog +# 1.11.0-rc1 / 2021-06-28 + +This is the first release candidate for the optional Lotus v1.11.0 release that introduces several months of bugfixes and feature development. A more detailed changelog will follow. + # 1.10.0 / 2021-06-23 This is a mandatory release of Lotus that introduces Filecoin network v13, codenamed the HyperDrive upgrade. The diff --git a/build/version.go b/build/version.go index 5a4a494fc..49ec3f446 100644 --- a/build/version.go +++ b/build/version.go @@ -34,7 +34,7 @@ func buildType() string { } // BuildVersion is the local build version, set by build system -const BuildVersion = "1.11.0-dev" +const BuildVersion = "1.11.0-rc1" func UserVersion() string { if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" { From af1dd7d2edf96743650114ba62652f75876a3b55 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/21] 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 097d55a1a..f16f1d208 100644 --- a/extern/storage-sealing/commit_batch.go +++ b/extern/storage-sealing/commit_batch.go @@ -229,7 +229,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(), @@ -341,7 +343,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 a4f65bed41b8b51bff5667c9e08c36b807b51116 Mon Sep 17 00:00:00 2001 From: Jerry <1032246642@qq.com> Date: Tue, 29 Jun 2021 14:06:41 +0800 Subject: [PATCH 03/21] 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 f16f1d208..e4cfc8915 100644 --- a/extern/storage-sealing/commit_batch.go +++ b/extern/storage-sealing/commit_batch.go @@ -309,14 +309,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 c164a9fbdc48f34ec7ac746d3c486221a2e82bcf Mon Sep 17 00:00:00 2001 From: Jerry <1032246642@qq.com> Date: Tue, 29 Jun 2021 14:36:26 +0800 Subject: [PATCH 04/21] 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 e4cfc8915..740e98fca 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) + //go:generate go run github.com/golang/mock/mockgen -destination=mocks/mock_commit_batcher.go -package=mocks . CommitBatcherApi type CommitBatcherApi interface { @@ -307,7 +310,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 10e00b1ba981f17e3ad747f542bc56f3c0cca217 Mon Sep 17 00:00:00 2001 From: wangchao Date: Mon, 28 Jun 2021 17:50:31 +0800 Subject: [PATCH 05/21] 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 5f3b21269d72f08956be7a491606729691e03b77 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/21] 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 e9f3a2f4861c5f43c313dc719a26b1e55949c1ec Mon Sep 17 00:00:00 2001 From: johnli-helloworld Date: Fri, 25 Jun 2021 17:25:17 +0800 Subject: [PATCH 07/21] 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 d3e1e9d52..d04aef790 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 360eeafa6..bd566cdcd 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 22f183e8effd96e995ee06801c9e22a8062b23b3 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/21] commit batch: AggregateAboveBaseFee config --- chain/types/fil.go | 5 ++ extern/storage-sealing/commit_batch.go | 20 +++++- extern/storage-sealing/commit_batch_test.go | 72 +++++++++++++++++---- extern/storage-sealing/sealiface/config.go | 8 ++- node/config/def.go | 6 ++ node/modules/storageminer.go | 22 ++++--- 6 files changed, 108 insertions(+), 25 deletions(-) diff --git a/chain/types/fil.go b/chain/types/fil.go index 7438410c8..21125e6d6 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 740e98fca..6eaa3e908 100644 --- a/extern/storage-sealing/commit_batch.go +++ b/extern/storage-sealing/commit_batch.go @@ -196,7 +196,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/commit_batch_test.go b/extern/storage-sealing/commit_batch_test.go index ad2bc8f6f..d7cf4a9a4 100644 --- a/extern/storage-sealing/commit_batch_test.go +++ b/extern/storage-sealing/commit_batch_test.go @@ -20,6 +20,7 @@ import ( "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/chain/actors/builtin/miner" + "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/extern/sector-storage/ffiwrapper" sealing "github.com/filecoin-project/lotus/extern/storage-sealing" "github.com/filecoin-project/lotus/extern/storage-sealing/mocks" @@ -58,6 +59,8 @@ func TestCommitBatcher(t *testing.T) { CommitBatchWait: 24 * time.Hour, CommitBatchSlack: 1 * time.Hour, + AggregateAboveBaseFee: types.BigMul(types.PicoFil, types.NewInt(150)), // 0.15 nFIL + TerminateBatchMin: 1, TerminateBatchMax: 100, TerminateBatchWait: 5 * time.Minute, @@ -143,7 +146,7 @@ func TestCommitBatcher(t *testing.T) { } } - expectSend := func(expect []abi.SectorNumber) action { + expectSend := func(expect []abi.SectorNumber, aboveBalancer bool) action { return func(t *testing.T, s *mocks.MockCommitBatcherApi, pcb *sealing.CommitBatcher) promise { s.EXPECT().StateMinerInfo(gomock.Any(), gomock.Any(), gomock.Any()).Return(miner.MinerInfo{Owner: t0123, Worker: t0123}, nil) @@ -153,6 +156,22 @@ func TestCommitBatcher(t *testing.T) { batch = true ti = 1 } + + basefee := types.PicoFil + if aboveBalancer { + basefee = types.NanoFil + } + + if batch { + s.EXPECT().ChainHead(gomock.Any()).Return(nil, abi.ChainEpoch(1), nil) + s.EXPECT().ChainBaseFee(gomock.Any(), gomock.Any()).Return(basefee, nil) + } + + if !aboveBalancer { + batch = false + ti = len(expect) + } + s.EXPECT().ChainHead(gomock.Any()).Return(nil, abi.ChainEpoch(1), nil) s.EXPECT().StateSectorPreCommitInfo(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&miner.SectorPreCommitOnChainInfo{ PreCommitDeposit: big.Zero(), @@ -160,7 +179,7 @@ func TestCommitBatcher(t *testing.T) { s.EXPECT().StateMinerInitialPledgeCollateral(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(big.Zero(), nil).Times(len(expect)) if batch { s.EXPECT().StateNetworkVersion(gomock.Any(), gomock.Any()).Return(network.Version13, nil) - s.EXPECT().ChainBaseFee(gomock.Any(), gomock.Any()).Return(big.NewInt(2000), nil) + s.EXPECT().ChainBaseFee(gomock.Any(), gomock.Any()).Return(basefee, nil) } s.EXPECT().SendMsg(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), funMatcher(func(i interface{}) bool { @@ -183,11 +202,11 @@ func TestCommitBatcher(t *testing.T) { } } - flush := func(expect []abi.SectorNumber) action { + flush := func(expect []abi.SectorNumber, aboveBalancer bool) action { return func(t *testing.T, s *mocks.MockCommitBatcherApi, pcb *sealing.CommitBatcher) promise { - _ = expectSend(expect)(t, s, pcb) + _ = expectSend(expect, aboveBalancer)(t, s, pcb) - batch := len(expect) >= minBatch + batch := len(expect) >= minBatch && aboveBalancer r, err := pcb.Flush(ctx) require.NoError(t, err) @@ -227,30 +246,57 @@ func TestCommitBatcher(t *testing.T) { tcs := map[string]struct { actions []action }{ - "addSingle": { + "addSingle-aboveBalancer": { actions: []action{ addSector(0), waitPending(1), - flush([]abi.SectorNumber{0}), + flush([]abi.SectorNumber{0}, true), }, }, - "addTwo": { + "addTwo-aboveBalancer": { actions: []action{ addSectors(getSectors(2)), waitPending(2), - flush(getSectors(2)), + flush(getSectors(2), true), }, }, - "addAte": { + "addAte-aboveBalancer": { actions: []action{ addSectors(getSectors(8)), waitPending(8), - flush(getSectors(8)), + flush(getSectors(8), true), }, }, - "addMax": { + "addMax-aboveBalancer": { actions: []action{ - expectSend(getSectors(maxBatch)), + expectSend(getSectors(maxBatch), true), + addSectors(getSectors(maxBatch)), + }, + }, + "addSingle-belowBalancer": { + actions: []action{ + addSector(0), + waitPending(1), + flush([]abi.SectorNumber{0}, false), + }, + }, + "addTwo-belowBalancer": { + actions: []action{ + addSectors(getSectors(2)), + waitPending(2), + flush(getSectors(2), false), + }, + }, + "addAte-belowBalancer": { + actions: []action{ + addSectors(getSectors(8)), + waitPending(8), + flush(getSectors(8), false), + }, + }, + "addMax-belowBalancer": { + actions: []action{ + expectSend(getSectors(maxBatch), false), addSectors(getSectors(maxBatch)), }, }, 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 b331b1f49..240fadbd9 100644 --- a/node/config/def.go +++ b/node/config/def.go @@ -144,6 +144,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 @@ -330,6 +334,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 09b1e2dfd..3d1d08071 100644 --- a/node/modules/storageminer.go +++ b/node/modules/storageminer.go @@ -866,11 +866,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, @@ -897,11 +898,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 3875746f808fe17e558116c756e1c0a97f074820 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/21] commit batch: Regression test nil FailedSectors map --- extern/storage-sealing/commit_batch_test.go | 65 ++++++++++++++++----- 1 file changed, 52 insertions(+), 13 deletions(-) diff --git a/extern/storage-sealing/commit_batch_test.go b/extern/storage-sealing/commit_batch_test.go index d7cf4a9a4..aea6d455e 100644 --- a/extern/storage-sealing/commit_batch_test.go +++ b/extern/storage-sealing/commit_batch_test.go @@ -146,7 +146,7 @@ func TestCommitBatcher(t *testing.T) { } } - expectSend := func(expect []abi.SectorNumber, aboveBalancer bool) action { + expectSend := func(expect []abi.SectorNumber, aboveBalancer, failOnePCI bool) action { return func(t *testing.T, s *mocks.MockCommitBatcherApi, pcb *sealing.CommitBatcher) promise { s.EXPECT().StateMinerInfo(gomock.Any(), gomock.Any(), gomock.Any()).Return(miner.MinerInfo{Owner: t0123, Worker: t0123}, nil) @@ -173,10 +173,20 @@ func TestCommitBatcher(t *testing.T) { } s.EXPECT().ChainHead(gomock.Any()).Return(nil, abi.ChainEpoch(1), nil) + + pciC := len(expect) + if failOnePCI { + s.EXPECT().StateSectorPreCommitInfo(gomock.Any(), gomock.Any(), abi.SectorNumber(1), gomock.Any()).Return(nil, nil).Times(1) // not found + pciC = len(expect) - 1 + if !batch { + ti-- + } + } s.EXPECT().StateSectorPreCommitInfo(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&miner.SectorPreCommitOnChainInfo{ PreCommitDeposit: big.Zero(), - }, nil).Times(len(expect)) - s.EXPECT().StateMinerInitialPledgeCollateral(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(big.Zero(), nil).Times(len(expect)) + }, nil).Times(pciC) + s.EXPECT().StateMinerInitialPledgeCollateral(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(big.Zero(), nil).Times(pciC) + if batch { s.EXPECT().StateNetworkVersion(gomock.Any(), gomock.Any()).Return(network.Version13, nil) s.EXPECT().ChainBaseFee(gomock.Any(), gomock.Any()).Return(basefee, nil) @@ -202,9 +212,9 @@ func TestCommitBatcher(t *testing.T) { } } - flush := func(expect []abi.SectorNumber, aboveBalancer bool) action { + flush := func(expect []abi.SectorNumber, aboveBalancer, failOnePCI bool) action { return func(t *testing.T, s *mocks.MockCommitBatcherApi, pcb *sealing.CommitBatcher) promise { - _ = expectSend(expect, aboveBalancer)(t, s, pcb) + _ = expectSend(expect, aboveBalancer, failOnePCI)(t, s, pcb) batch := len(expect) >= minBatch && aboveBalancer @@ -217,6 +227,13 @@ func TestCommitBatcher(t *testing.T) { return r[0].Sectors[i] < r[0].Sectors[j] }) require.Equal(t, expect, r[0].Sectors) + if !failOnePCI { + require.Len(t, r[0].FailedSectors, 0) + } else { + require.Len(t, r[0].FailedSectors, 1) + _, found := r[0].FailedSectors[1] + require.True(t, found) + } } else { require.Len(t, r, len(expect)) for _, res := range r { @@ -228,6 +245,13 @@ func TestCommitBatcher(t *testing.T) { }) for i, res := range r { require.Equal(t, abi.SectorNumber(i), res.Sectors[0]) + if failOnePCI && res.Sectors[0] == 1 { + require.Len(t, res.FailedSectors, 1) + _, found := res.FailedSectors[1] + require.True(t, found) + } else { + require.Empty(t, res.FailedSectors) + } } } @@ -250,26 +274,26 @@ func TestCommitBatcher(t *testing.T) { actions: []action{ addSector(0), waitPending(1), - flush([]abi.SectorNumber{0}, true), + flush([]abi.SectorNumber{0}, true, false), }, }, "addTwo-aboveBalancer": { actions: []action{ addSectors(getSectors(2)), waitPending(2), - flush(getSectors(2), true), + flush(getSectors(2), true, false), }, }, "addAte-aboveBalancer": { actions: []action{ addSectors(getSectors(8)), waitPending(8), - flush(getSectors(8), true), + flush(getSectors(8), true, false), }, }, "addMax-aboveBalancer": { actions: []action{ - expectSend(getSectors(maxBatch), true), + expectSend(getSectors(maxBatch), true, false), addSectors(getSectors(maxBatch)), }, }, @@ -277,29 +301,44 @@ func TestCommitBatcher(t *testing.T) { actions: []action{ addSector(0), waitPending(1), - flush([]abi.SectorNumber{0}, false), + flush([]abi.SectorNumber{0}, false, false), }, }, "addTwo-belowBalancer": { actions: []action{ addSectors(getSectors(2)), waitPending(2), - flush(getSectors(2), false), + flush(getSectors(2), false, false), }, }, "addAte-belowBalancer": { actions: []action{ addSectors(getSectors(8)), waitPending(8), - flush(getSectors(8), false), + flush(getSectors(8), false, false), }, }, "addMax-belowBalancer": { actions: []action{ - expectSend(getSectors(maxBatch), false), + expectSend(getSectors(maxBatch), false, false), addSectors(getSectors(maxBatch)), }, }, + + "addAte-aboveBalancer-failOne": { + actions: []action{ + addSectors(getSectors(8)), + waitPending(8), + flush(getSectors(8), true, true), + }, + }, + "addAte-belowBalancer-failOne": { + actions: []action{ + addSectors(getSectors(8)), + waitPending(8), + flush(getSectors(8), false, true), + }, + }, } for name, tc := range tcs { From 31c929e7b728e0e094acee9fc150007740746d78 Mon Sep 17 00:00:00 2001 From: llifezou Date: Wed, 30 Jun 2021 16:32:44 +0800 Subject: [PATCH 10/21] 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 bd566cdcd..92613cbdc 100644 --- a/extern/storage-sealing/states_sealing.go +++ b/extern/storage-sealing/states_sealing.go @@ -105,6 +105,10 @@ func checkTicketExpired(ticket, head abi.ChainEpoch) bool { return head-ticket > 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(ticketEpoch, epoch) { + 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.TicketEpoch, 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 21528c0a95b6e4f72c9af4411aa422fabcf52951 Mon Sep 17 00:00:00 2001 From: llifezou Date: Thu, 1 Jul 2021 10:53:42 +0800 Subject: [PATCH 11/21] 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 92613cbdc..1d0e092e9 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 101d152540b3bd5f76f4606f9755bbc655824dcc 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/21] 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 1d0e092e9..dcea02a99 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 d5b7e81b095932b789f0f4195445a55fc19a69e3 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/21] 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 dcea02a99..1442d82cc 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 dbdbb6f0dd96e2f44d4c586eedad15925bc67af2 Mon Sep 17 00:00:00 2001 From: johnli-helloworld Date: Wed, 30 Jun 2021 16:56:40 +0800 Subject: [PATCH 14/21] 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 6eaa3e908..63bd3c7db 100644 --- a/extern/storage-sealing/commit_batch.go +++ b/extern/storage-sealing/commit_batch.go @@ -106,6 +106,7 @@ func (b *CommitBatcher) run() { panic(err) } + timer := time.NewTimer(b.batchWait(cfg.CommitBatchWait, cfg.CommitBatchSlack)) for { if forceRes != nil { forceRes <- lastMsg @@ -121,7 +122,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 @@ -132,17 +133,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 @@ -160,12 +170,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) @@ -173,7 +183,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 3dc3510c2..1b43bc6b9 100644 --- a/extern/storage-sealing/precommit_batch.go +++ b/extern/storage-sealing/precommit_batch.go @@ -88,6 +88,7 @@ func (b *PreCommitBatcher) run() { panic(err) } + timer := time.NewTimer(b.batchWait(cfg.CommitBatchWait, cfg.CommitBatchSlack)) for { if forceRes != nil { forceRes <- lastRes @@ -102,7 +103,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 @@ -113,17 +114,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 @@ -141,12 +151,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) @@ -154,7 +164,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 57d70e58f3a53f9348a28ef63bae59918f78ff66 Mon Sep 17 00:00:00 2001 From: zhoutian527 Date: Fri, 2 Jul 2021 15:53:21 +0800 Subject: [PATCH 15/21] 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 1b43bc6b9..8b132a2eb 100644 --- a/extern/storage-sealing/precommit_batch.go +++ b/extern/storage-sealing/precommit_batch.go @@ -88,7 +88,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 @@ -122,7 +122,7 @@ func (b *PreCommitBatcher) run() { } } - timer.Reset(b.batchWait(cfg.CommitBatchWait, cfg.CommitBatchSlack)) + timer.Reset(b.batchWait(cfg.PreCommitBatchWait, cfg.PreCommitBatchSlack)) } } From da0920584cf791ab1916dea10464569e4d059ad4 Mon Sep 17 00:00:00 2001 From: Peter Rabbitson Date: Fri, 2 Jul 2021 18:02:56 +0200 Subject: [PATCH 16/21] 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 53dc5092b..007071ea2 100644 --- a/cli/filplus.go +++ b/cli/filplus.go @@ -210,7 +210,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 6610965f8749e5de36dc1d0877f0faa096636fec 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/21] storage: Fix FinalizeSector with sectors in stoage paths --- .circleci/config.yml | 5 +++ cmd/lotus-seal-worker/storage.go | 2 +- cmd/lotus-storage-miner/storage.go | 2 +- extern/sector-storage/manager.go | 17 ++++++- itests/deals_test.go | 2 +- itests/kit/node_miner.go | 47 +++++++++++++++++++- itests/sector_finalize_early_test.go | 66 ++++++++++++++++++++++++++++ node/modules/storageminer.go | 52 ++++++++++++---------- 8 files changed, 164 insertions(+), 29 deletions(-) create mode 100644 itests/sector_finalize_early_test.go diff --git a/.circleci/config.yml b/.circleci/config.yml index 9f8f28b86..d151026f0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -826,6 +826,11 @@ workflows: suite: itest-sdr_upgrade target: "./itests/sdr_upgrade_test.go" + - test: + name: test-itest-sector_finalize_early + suite: itest-sector_finalize_early + target: "./itests/sector_finalize_early_test.go" + - test: name: test-itest-sector_pledge suite: itest-sector_pledge 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 136c00252..79eca74d6 100644 --- a/extern/sector-storage/manager.go +++ b/extern/sector-storage/manager.go @@ -528,10 +528,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/itests/deals_test.go b/itests/deals_test.go index f8389bbd6..8aff414e0 100644 --- a/itests/deals_test.go +++ b/itests/deals_test.go @@ -14,7 +14,7 @@ func TestDealsWithSealingAndRPC(t *testing.T) { kit.QuietMiningLogs() - var blockTime = 1 * time.Second + var blockTime = 50 * time.Millisecond client, miner, ens := kit.EnsembleMinimal(t, kit.ThroughRPC()) // no mock proofs. ens.InterconnectAll().BeginMining(blockTime) diff --git a/itests/kit/node_miner.go b/itests/kit/node_miner.go index d3f0d2e3c..eea2bc0c1 100644 --- a/itests/kit/node_miner.go +++ b/itests/kit/node_miner.go @@ -2,22 +2,29 @@ package kit import ( "context" + "encoding/json" "fmt" + "io/ioutil" + "os" + "path/filepath" "strings" "testing" "time" + "github.com/google/uuid" + "github.com/stretchr/testify/require" + "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/chain/wallet" + "github.com/filecoin-project/lotus/extern/sector-storage/stores" sealing "github.com/filecoin-project/lotus/extern/storage-sealing" "github.com/filecoin-project/lotus/miner" libp2pcrypto "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/peer" "github.com/multiformats/go-multiaddr" - "github.com/stretchr/testify/require" ) // TestMiner represents a miner enrolled in an Ensemble. @@ -119,3 +126,41 @@ func (tm *TestMiner) FlushSealingBatches(ctx context.Context) { fmt.Printf("COMMIT BATCH: %+v\n", cb) } } + +const metaFile = "sectorstore.json" + +func (tm *TestMiner) AddStorage(ctx context.Context, t *testing.T, weight uint64, seal, store bool) { + p, err := ioutil.TempDir("", "lotus-testsectors-") + require.NoError(t, err) + + if err := os.MkdirAll(p, 0755); err != nil { + if !os.IsExist(err) { + require.NoError(t, err) + } + } + + _, err = os.Stat(filepath.Join(p, metaFile)) + if !os.IsNotExist(err) { + require.NoError(t, err) + } + + cfg := &stores.LocalStorageMeta{ + ID: stores.ID(uuid.New().String()), + Weight: weight, + CanSeal: seal, + CanStore: store, + } + + if !(cfg.CanStore || cfg.CanSeal) { + t.Fatal("must specify at least one of CanStore or cfg.CanSeal") + } + + b, err := json.MarshalIndent(cfg, "", " ") + require.NoError(t, err) + + err = ioutil.WriteFile(filepath.Join(p, metaFile), b, 0644) + require.NoError(t, err) + + err = tm.StorageAddLocal(ctx, p) + require.NoError(t, err) +} diff --git a/itests/sector_finalize_early_test.go b/itests/sector_finalize_early_test.go new file mode 100644 index 000000000..3eb980f9e --- /dev/null +++ b/itests/sector_finalize_early_test.go @@ -0,0 +1,66 @@ +package itests + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/lotus/extern/storage-sealing/sealiface" + "github.com/filecoin-project/lotus/itests/kit" + "github.com/filecoin-project/lotus/node" + "github.com/filecoin-project/lotus/node/config" + "github.com/filecoin-project/lotus/node/modules" + "github.com/filecoin-project/lotus/node/modules/dtypes" + "github.com/filecoin-project/lotus/node/repo" +) + +func TestDealsWithFinalizeEarly(t *testing.T) { + if testing.Short() { + t.Skip("skipping test in short mode") + } + + kit.QuietMiningLogs() + + var blockTime = 50 * time.Millisecond + + client, miner, ens := kit.EnsembleMinimal(t, kit.ThroughRPC(), kit.ConstructorOpts( + node.ApplyIf(node.IsType(repo.StorageMiner), node.Override(new(dtypes.GetSealingConfigFunc), func() (dtypes.GetSealingConfigFunc, error) { + return func() (sealiface.Config, error) { + cf := config.DefaultStorageMiner() + cf.Sealing.FinalizeEarly = true + return modules.ToSealingConfig(cf), nil + }, nil + })))) // no mock proofs. + ens.InterconnectAll().BeginMining(blockTime) + dh := kit.NewDealHarness(t, client, miner) + + ctx := context.Background() + + miner.AddStorage(ctx, t, 1000000000, true, false) + miner.AddStorage(ctx, t, 1000000000, false, true) + + sl, err := miner.StorageList(ctx) + require.NoError(t, err) + for si, d := range sl { + i, err := miner.StorageInfo(ctx, si) + require.NoError(t, err) + + fmt.Printf("stor d:%d %+v\n", len(d), i) + } + + t.Run("single", func(t *testing.T) { + dh.RunConcurrentDeals(kit.RunConcurrentDealsOpts{N: 1}) + }) + + sl, err = miner.StorageList(ctx) + require.NoError(t, err) + for si, d := range sl { + i, err := miner.StorageInfo(ctx, si) + require.NoError(t, err) + + fmt.Printf("stor d:%d %+v\n", len(d), i) + } +} diff --git a/node/modules/storageminer.go b/node/modules/storageminer.go index 3d1d08071..8508850d3 100644 --- a/node/modules/storageminer.go +++ b/node/modules/storageminer.go @@ -882,33 +882,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 947c86bd77c01c80297386d68f965925f52c8c44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Fri, 2 Jul 2021 20:57:59 +0200 Subject: [PATCH 18/21] set version to v1.11.0-rc2 --- build/openrpc/full.json.gz | Bin 23439 -> 23439 bytes build/openrpc/miner.json.gz | Bin 8102 -> 8102 bytes build/openrpc/worker.json.gz | Bin 2513 -> 2513 bytes build/version.go | 2 +- documentation/en/cli-lotus-miner.md | 2 +- documentation/en/cli-lotus-worker.md | 2 +- documentation/en/cli-lotus.md | 2 +- 7 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 0cbb105e18b2e38b1576c3caadcd6f782ec7e8d4..b46c9ba5b3689df5e203ff5d4b9217f036db7442 100644 GIT binary patch delta 23 fcmeC*&e*@5aY7g4?2X-jqBv?-PW$b@l!XBRf{_Z2 delta 23 fcmeC*&e*@5aY7fP^v3Q#Q5^0n+ok=NvM>Mua-;~9 diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index fe77f76c469f2823f39e81872279e8225a81d3f7..fd98bad0d831c578aaee8647650fc35b33430b48 100644 GIT binary patch delta 21 dcmZ2xzs!C@2jlXMoucv_m2X~f{O)07003pw2;Kky delta 21 dcmZ2xzs!C@2jl9Eoucv_nXWV5{_bI9003i@2*3aU diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 38c9a073b725d0b2b4a0958e5a8b2503cfac09dc..c6d1eb204fede74e7b3e5a0c3907fac345db636f 100644 GIT binary patch delta 21 dcmca8d{KBp6XU^+&2F3=mCs+D>?&el003#B2{!-$ delta 21 dcmca8d{KBp6XUUs&2F3=n~UyD?kZwn003tq2)zIR diff --git a/build/version.go b/build/version.go index 49ec3f446..92f011424 100644 --- a/build/version.go +++ b/build/version.go @@ -34,7 +34,7 @@ func buildType() string { } // BuildVersion is the local build version, set by build system -const BuildVersion = "1.11.0-rc1" +const BuildVersion = "1.11.0-rc2" func UserVersion() string { if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" { diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index c8abb574b..42f964715 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -7,7 +7,7 @@ USAGE: lotus-miner [global options] command [command options] [arguments...] VERSION: - 1.11.0-dev + 1.11.0-rc2 COMMANDS: init Initialize a lotus miner repo diff --git a/documentation/en/cli-lotus-worker.md b/documentation/en/cli-lotus-worker.md index 0b29da503..b7e04e5f1 100644 --- a/documentation/en/cli-lotus-worker.md +++ b/documentation/en/cli-lotus-worker.md @@ -7,7 +7,7 @@ USAGE: lotus-worker [global options] command [command options] [arguments...] VERSION: - 1.11.0-dev + 1.11.0-rc2 COMMANDS: run Start lotus worker diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index a1583d522..1326c93f6 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -7,7 +7,7 @@ USAGE: lotus [global options] command [command options] [arguments...] VERSION: - 1.11.0-dev + 1.11.0-rc2 COMMANDS: daemon Start a lotus daemon process From 68bde3397773777b433e91ee0962b6d13245afb7 Mon Sep 17 00:00:00 2001 From: Jennifer Wang Date: Fri, 2 Jul 2021 15:58:56 -0400 Subject: [PATCH 19/21] update changelog and bump version to v1.11.0-rc2 --- CHANGELOG.md | 254 ++++++++++++++++++++++++++++++++++++++++++++++- build/version.go | 2 +- 2 files changed, 253 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 718e86f9d..6a9530820 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,258 @@ # Lotus changelog -# 1.11.0-rc1 / 2021-06-28 +# 1.11.0-rc2 / 2021-07-02 -This is the first release candidate for the optional Lotus v1.11.0 release that introduces several months of bugfixes and feature development. A more detailed changelog will follow. +This is the second release candidate for the optional Lotus v1.11.0 release that introduces several months of bugfixes +and feature development. A more detailed changelog will follow upon final release. + +- github.com/filecoin-project/lotus: + - update changelog and bump version to v1.11.0-rc2 + - Lotus version 1.11.0 + - gateway: Add support for Version method ([filecoin-project/lotus#6618](https://github.com/filecoin-project/lotus/pull/6618)) + - Miner SimultaneousTransfers config ([filecoin-project/lotus#6612](https://github.com/filecoin-project/lotus/pull/6612)) + - revamped integration test kit (aka. Operation Sparks Joy) ([filecoin-project/lotus#6329](https://github.com/filecoin-project/lotus/pull/6329)) + - downgrade libp2p/go-libp2p-yamux to v0.5.1. ([filecoin-project/lotus#6605](https://github.com/filecoin-project/lotus/pull/6605)) + - Fix wallet error messages ([filecoin-project/lotus#6594](https://github.com/filecoin-project/lotus/pull/6594)) + - Fix CircleCI gen ([filecoin-project/lotus#6589](https://github.com/filecoin-project/lotus/pull/6589)) + - Make query-ask CLI more graceful ([filecoin-project/lotus#6590](https://github.com/filecoin-project/lotus/pull/6590)) + - ([filecoin-project/lotus#6406](https://github.com/filecoin-project/lotus/pull/6406)) + - move with changed name ([filecoin-project/lotus#6587](https://github.com/filecoin-project/lotus/pull/6587)) + - scale up sector expiration to avoid sector expire in batch-pre-commit waitting ([filecoin-project/lotus#6566](https://github.com/filecoin-project/lotus/pull/6566)) + - Merge release branch into master ([filecoin-project/lotus#6583](https://github.com/filecoin-project/lotus/pull/6583)) + - ([filecoin-project/lotus#6582](https://github.com/filecoin-project/lotus/pull/6582)) + - fix circleci being out of sync. ([filecoin-project/lotus#6573](https://github.com/filecoin-project/lotus/pull/6573)) + - dynamic circleci config for streamlining test execution ([filecoin-project/lotus#6561](https://github.com/filecoin-project/lotus/pull/6561)) + - Merge 1.10 branch into master ([filecoin-project/lotus#6571](https://github.com/filecoin-project/lotus/pull/6571)) + - Fix helptext ([filecoin-project/lotus#6560](https://github.com/filecoin-project/lotus/pull/6560)) + - extern/storage: add ability to ignore worker resources when scheduling. ([filecoin-project/lotus#6542](https://github.com/filecoin-project/lotus/pull/6542)) + - Merge 1.10 branch into master ([filecoin-project/lotus#6540](https://github.com/filecoin-project/lotus/pull/6540)) + - Initial draft: basic build instructions on Readme ([filecoin-project/lotus#6498](https://github.com/filecoin-project/lotus/pull/6498)) + - fix commit finalize failed ([filecoin-project/lotus#6521](https://github.com/filecoin-project/lotus/pull/6521)) + - Dynamic Retrieval pricing ([filecoin-project/lotus#6175](https://github.com/filecoin-project/lotus/pull/6175)) + - Fix soup ([filecoin-project/lotus#6501](https://github.com/filecoin-project/lotus/pull/6501)) + - fix: pick the correct partitions-per-post limit ([filecoin-project/lotus#6502](https://github.com/filecoin-project/lotus/pull/6502)) + - Fix the build + - Adjust various CLI display ratios to arbitrary precision ([filecoin-project/lotus#6309](https://github.com/filecoin-project/lotus/pull/6309)) + - Add utils to use multisigs as miner owners ([filecoin-project/lotus#6490](https://github.com/filecoin-project/lotus/pull/6490)) + - Test multicore SDR support ([filecoin-project/lotus#6479](https://github.com/filecoin-project/lotus/pull/6479)) + - sealing: Fix restartSectors race ([filecoin-project/lotus#6495](https://github.com/filecoin-project/lotus/pull/6495)) + - Merge 1.10 into master ([filecoin-project/lotus#6487](https://github.com/filecoin-project/lotus/pull/6487)) + - Unit tests for sector batchers ([filecoin-project/lotus#6432](https://github.com/filecoin-project/lotus/pull/6432)) + - Merge 1.10 changes into master ([filecoin-project/lotus#6466](https://github.com/filecoin-project/lotus/pull/6466)) + - Update chain list with correct help instructions ([filecoin-project/lotus#6465](https://github.com/filecoin-project/lotus/pull/6465)) + - clean failed sectors in batch commit ([filecoin-project/lotus#6451](https://github.com/filecoin-project/lotus/pull/6451)) + - itests/kit: add guard to ensure imports from tests only. ([filecoin-project/lotus#6445](https://github.com/filecoin-project/lotus/pull/6445)) + - consolidate integration tests into `itests` package; create test kit; cleanup ([filecoin-project/lotus#6311](https://github.com/filecoin-project/lotus/pull/6311)) + - Remove rc changelog, compile the new changelog for final release only ([filecoin-project/lotus#6444](https://github.com/filecoin-project/lotus/pull/6444)) + - updated configuration comments for docs ([filecoin-project/lotus#6440](https://github.com/filecoin-project/lotus/pull/6440)) + - Set ntwk v13 HyperDrive Calibration upgrade epoch ([filecoin-project/lotus#6441](https://github.com/filecoin-project/lotus/pull/6441)) + - Merge release/v1.10.10 into master ([filecoin-project/lotus#6439](https://github.com/filecoin-project/lotus/pull/6439)) + - implement a command to export a car ([filecoin-project/lotus#6405](https://github.com/filecoin-project/lotus/pull/6405)) + - Merge v1.10 release branch into master ([filecoin-project/lotus#6435](https://github.com/filecoin-project/lotus/pull/6435)) + - Fee config for sector batching ([filecoin-project/lotus#6420](https://github.com/filecoin-project/lotus/pull/6420)) + - Fix: correct the change of message size limit ([filecoin-project/lotus#6430](https://github.com/filecoin-project/lotus/pull/6430)) + - UX: lotus state power CLI should fail if called with a not-miner ([filecoin-project/lotus#6425](https://github.com/filecoin-project/lotus/pull/6425)) + - network reset friday + - Increase message size limit ([filecoin-project/lotus#6419](https://github.com/filecoin-project/lotus/pull/6419)) + - polish(stmgr): define ExecMonitor for message application callback ([filecoin-project/lotus#6389](https://github.com/filecoin-project/lotus/pull/6389)) + - upgrade testground action version ([filecoin-project/lotus#6403](https://github.com/filecoin-project/lotus/pull/6403)) + - Fix logging of stringified CIDs double-encoded in hex ([filecoin-project/lotus#6413](https://github.com/filecoin-project/lotus/pull/6413)) + - Update libp2p to 0.14.2 ([filecoin-project/lotus#6404](https://github.com/filecoin-project/lotus/pull/6404)) + - Bypass task scheduler for reading unsealed pieces ([filecoin-project/lotus#6280](https://github.com/filecoin-project/lotus/pull/6280)) + - testplans: lotus-soup: use default WPoStChallengeWindow ([filecoin-project/lotus#6400](https://github.com/filecoin-project/lotus/pull/6400)) + - build snapcraft ([filecoin-project/lotus#6388](https://github.com/filecoin-project/lotus/pull/6388)) + - Fix the doc errors of the sealing config funcs ([filecoin-project/lotus#6399](https://github.com/filecoin-project/lotus/pull/6399)) + - Integration tests for offline deals ([filecoin-project/lotus#6081](https://github.com/filecoin-project/lotus/pull/6081)) + - Fix success handling in Retreival ([filecoin-project/lotus#5921](https://github.com/filecoin-project/lotus/pull/5921)) + - Fix some flaky tests ([filecoin-project/lotus#6397](https://github.com/filecoin-project/lotus/pull/6397)) + - build appimage in CI ([filecoin-project/lotus#6384](https://github.com/filecoin-project/lotus/pull/6384)) + - Add doc on gas balancing ([filecoin-project/lotus#6392](https://github.com/filecoin-project/lotus/pull/6392)) + - Add a command to list retrievals ([filecoin-project/lotus#6337](https://github.com/filecoin-project/lotus/pull/6337)) + - Add interop network ([filecoin-project/lotus#6387](https://github.com/filecoin-project/lotus/pull/6387)) + - Network version 13 (v1.11) ([filecoin-project/lotus#6342](https://github.com/filecoin-project/lotus/pull/6342)) + - Generate AppImage ([filecoin-project/lotus#6208](https://github.com/filecoin-project/lotus/pull/6208)) + - lotus-gateway: add check command ([filecoin-project/lotus#6373](https://github.com/filecoin-project/lotus/pull/6373)) + - Add a warning to the release issue template ([filecoin-project/lotus#6374](https://github.com/filecoin-project/lotus/pull/6374)) + - update to markets-v1.4.0 ([filecoin-project/lotus#6369](https://github.com/filecoin-project/lotus/pull/6369)) + - Add test for AddVerifiedClient ([filecoin-project/lotus#6317](https://github.com/filecoin-project/lotus/pull/6317)) + - Typo fix in error message: "pubusb" -> "pubsub" ([filecoin-project/lotus#6365](https://github.com/filecoin-project/lotus/pull/6365)) + - Improve the cli state call command ([filecoin-project/lotus#6226](https://github.com/filecoin-project/lotus/pull/6226)) + - Upscale mineOne message to a WARN on unexpected ineligibility ([filecoin-project/lotus#6358](https://github.com/filecoin-project/lotus/pull/6358)) + - storagefsm: Fix batch deal packing behavior ([filecoin-project/lotus#6041](https://github.com/filecoin-project/lotus/pull/6041)) + - Remove few useless variable assignments ([filecoin-project/lotus#6359](https://github.com/filecoin-project/lotus/pull/6359)) + - lotus-wallet: JWT Support ([filecoin-project/lotus#6360](https://github.com/filecoin-project/lotus/pull/6360)) + - Reduce noise from 'peer has different genesis' messages ([filecoin-project/lotus#6357](https://github.com/filecoin-project/lotus/pull/6357)) + - events: Fix handling of multiple matched events per epoch ([filecoin-project/lotus#6355](https://github.com/filecoin-project/lotus/pull/6355)) + - Update RELEASE_ISSUE_TEMPLATE.md ([filecoin-project/lotus#6236](https://github.com/filecoin-project/lotus/pull/6236)) + - Get current seal proof when necessary ([filecoin-project/lotus#6339](https://github.com/filecoin-project/lotus/pull/6339)) + - Allow starting networks from arbitrary actor versions ([filecoin-project/lotus#6333](https://github.com/filecoin-project/lotus/pull/6333)) + - Remove log line when tracing is not configured ([filecoin-project/lotus#6334](https://github.com/filecoin-project/lotus/pull/6334)) + - Revert "Allow starting networks from arbitrary actor versions" ([filecoin-project/lotus#6330](https://github.com/filecoin-project/lotus/pull/6330)) + - separate tracing environment variables ([filecoin-project/lotus#6323](https://github.com/filecoin-project/lotus/pull/6323)) + - Allow starting networks from arbitrary actor versions ([filecoin-project/lotus#6305](https://github.com/filecoin-project/lotus/pull/6305)) + - feat: log dispute rate ([filecoin-project/lotus#6322](https://github.com/filecoin-project/lotus/pull/6322)) + - Use new actor tags ([filecoin-project/lotus#6291](https://github.com/filecoin-project/lotus/pull/6291)) + - Fix logging around mineOne ([filecoin-project/lotus#6310](https://github.com/filecoin-project/lotus/pull/6310)) + - Fix shell completions ([filecoin-project/lotus#6316](https://github.com/filecoin-project/lotus/pull/6316)) + - Allow 8MB sectors in devnet ([filecoin-project/lotus#6312](https://github.com/filecoin-project/lotus/pull/6312)) + - fix ticket expired ([filecoin-project/lotus#6304](https://github.com/filecoin-project/lotus/pull/6304)) + - oh, snap! ([filecoin-project/lotus#6202](https://github.com/filecoin-project/lotus/pull/6202)) + - Move verifreg shed utils to CLI ([filecoin-project/lotus#6135](https://github.com/filecoin-project/lotus/pull/6135)) + - consider storiface.PathStorage when calculating storage requirements ([filecoin-project/lotus#6233](https://github.com/filecoin-project/lotus/pull/6233)) + - `storage` module: add go docs and minor code quality refactors ([filecoin-project/lotus#6259](https://github.com/filecoin-project/lotus/pull/6259)) + - Revert "chore: update go-libp2p" ([filecoin-project/lotus#6306](https://github.com/filecoin-project/lotus/pull/6306)) + - Increase data transfer timeouts ([filecoin-project/lotus#6300](https://github.com/filecoin-project/lotus/pull/6300)) + - gateway: spin off from cmd to package ([filecoin-project/lotus#6294](https://github.com/filecoin-project/lotus/pull/6294)) + - Update to markets 1.3 ([filecoin-project/lotus#6149](https://github.com/filecoin-project/lotus/pull/6149)) + - Add a shed util to count 64 GiB miner stats ([filecoin-project/lotus#6290](https://github.com/filecoin-project/lotus/pull/6290)) + - Delete CODEOWNERS ([filecoin-project/lotus#6289](https://github.com/filecoin-project/lotus/pull/6289)) + - Merge v1.9.0 to master ([filecoin-project/lotus#6275](https://github.com/filecoin-project/lotus/pull/6275)) + - Backport 6200 to master ([filecoin-project/lotus#6272](https://github.com/filecoin-project/lotus/pull/6272)) + - Introduce stateless offline dealflow, bypassing the FSM/deallists ([filecoin-project/lotus#5961](https://github.com/filecoin-project/lotus/pull/5961)) + - chore: update go-libp2p ([filecoin-project/lotus#6231](https://github.com/filecoin-project/lotus/pull/6231)) + - fix: wait-api should use GetAPI to acquire binary specific API ([filecoin-project/lotus#6246](https://github.com/filecoin-project/lotus/pull/6246)) + - Update RELEASE_ISSUE_TEMPLATE.md + - fix(ci): Updates to lotus CI build process ([filecoin-project/lotus#6256](https://github.com/filecoin-project/lotus/pull/6256)) + - add flags to control gateway lookback parameters ([filecoin-project/lotus#6247](https://github.com/filecoin-project/lotus/pull/6247)) + - Feat/nerpa v4 ([filecoin-project/lotus#6248](https://github.com/filecoin-project/lotus/pull/6248)) + - chore(ci): Enable build on RC tags ([filecoin-project/lotus#6238](https://github.com/filecoin-project/lotus/pull/6238)) + - Transplant some useful commands to lotus-shed actor ([filecoin-project/lotus#5913](https://github.com/filecoin-project/lotus/pull/5913)) + - wip actor wrapper codegen ([filecoin-project/lotus#6108](https://github.com/filecoin-project/lotus/pull/6108)) + - Robust message management ([filecoin-project/lotus#5822](https://github.com/filecoin-project/lotus/pull/5822)) + - Add a shed util to count miners by post type ([filecoin-project/lotus#6169](https://github.com/filecoin-project/lotus/pull/6169)) + - Introduce a release issue template ([filecoin-project/lotus#5826](https://github.com/filecoin-project/lotus/pull/5826)) + - cron-wc ([filecoin-project/lotus#6178](https://github.com/filecoin-project/lotus/pull/6178)) + - This is a 1:1 forward-port of PR#6183 from 1.9.x to master ([filecoin-project/lotus#6196](https://github.com/filecoin-project/lotus/pull/6196)) + - Allow creation of state tree v3s ([filecoin-project/lotus#6167](https://github.com/filecoin-project/lotus/pull/6167)) + - drand: fix beacon cache ([filecoin-project/lotus#6164](https://github.com/filecoin-project/lotus/pull/6164)) + - Update cli gen ([filecoin-project/lotus#6155](https://github.com/filecoin-project/lotus/pull/6155)) + - mpool: Cleanup pre-nv12 selection logic ([filecoin-project/lotus#6148](https://github.com/filecoin-project/lotus/pull/6148)) + - Update ffi to proofs v7 ([filecoin-project/lotus#6150](https://github.com/filecoin-project/lotus/pull/6150)) + - Generate CLI docs ([filecoin-project/lotus#6145](https://github.com/filecoin-project/lotus/pull/6145)) + - feat: allow checkpointing to forks ([filecoin-project/lotus#6107](https://github.com/filecoin-project/lotus/pull/6107)) + - attempt to do better padding on pieces being written into sectors ([filecoin-project/lotus#5988](https://github.com/filecoin-project/lotus/pull/5988)) + - remove duplicate ask and calculate ping before lock ([filecoin-project/lotus#5968](https://github.com/filecoin-project/lotus/pull/5968)) + - Add a command to get the fees of a deal ([filecoin-project/lotus#5307](https://github.com/filecoin-project/lotus/pull/5307)) + - flaky tests improvement: separate TestBatchDealInput from TestAPIDealFlow ([filecoin-project/lotus#6141](https://github.com/filecoin-project/lotus/pull/6141)) + - Testground checks on push ([filecoin-project/lotus#5887](https://github.com/filecoin-project/lotus/pull/5887)) + - Add a CLI tool for miner proving deadline ([filecoin-project/lotus#6132](https://github.com/filecoin-project/lotus/pull/6132)) + - Use EmptyTSK where appropriate ([filecoin-project/lotus#6134](https://github.com/filecoin-project/lotus/pull/6134)) + - fix: use a consistent tipset in commands ([filecoin-project/lotus#6142](https://github.com/filecoin-project/lotus/pull/6142)) + - go mod tidy for lotus-soup testplans ([filecoin-project/lotus#6124](https://github.com/filecoin-project/lotus/pull/6124)) + - fix testground payment channel tests: use 1 miner ([filecoin-project/lotus#6126](https://github.com/filecoin-project/lotus/pull/6126)) + - fix: use the parent state when listing actors ([filecoin-project/lotus#6143](https://github.com/filecoin-project/lotus/pull/6143)) + - Speed up StateListMessages in some cases ([filecoin-project/lotus#6007](https://github.com/filecoin-project/lotus/pull/6007)) + - Return total power when GetPowerRaw doesn't find miner claim ([filecoin-project/lotus#4938](https://github.com/filecoin-project/lotus/pull/4938)) + - fix(splitstore): fix a panic on revert-only head changes ([filecoin-project/lotus#6133](https://github.com/filecoin-project/lotus/pull/6133)) + - shed: command to list duplicate messages in tipsets (steb) ([filecoin-project/lotus#5847](https://github.com/filecoin-project/lotus/pull/5847)) + - upgrade `lotus-soup` testplans and reduce deals concurrency to a single miner ([filecoin-project/lotus#6122](https://github.com/filecoin-project/lotus/pull/6122)) + - Merge releases (1.8.0) into master ([filecoin-project/lotus#6118](https://github.com/filecoin-project/lotus/pull/6118)) +- github.com/filecoin-project/go-commp-utils (v0.1.0 -> v0.1.1-0.20210427191551-70bf140d31c7): + - add a padding helper function ([filecoin-project/go-commp-utils#3](https://github.com/filecoin-project/go-commp-utils/pull/3)) +- github.com/filecoin-project/go-data-transfer (v1.4.3 -> v1.6.0): + - release: v1.6.0 + - fix: option to disable accept and complete timeouts + - fix: disable restart ack timeout + - release: v1.5.0 + - Add isRestart param to validators (#197) ([filecoin-project/go-data-transfer#197](https://github.com/filecoin-project/go-data-transfer/pull/197)) + - fix: flaky TestChannelMonitorAutoRestart (#198) ([filecoin-project/go-data-transfer#198](https://github.com/filecoin-project/go-data-transfer/pull/198)) + - Channel monitor watches for errors instead of measuring data rate (#190) ([filecoin-project/go-data-transfer#190](https://github.com/filecoin-project/go-data-transfer/pull/190)) + - fix: prevent concurrent restarts for same channel (#195) ([filecoin-project/go-data-transfer#195](https://github.com/filecoin-project/go-data-transfer/pull/195)) + - fix: channel state machine event handling (#194) ([filecoin-project/go-data-transfer#194](https://github.com/filecoin-project/go-data-transfer/pull/194)) + - Dont double count data sent (#185) ([filecoin-project/go-data-transfer#185](https://github.com/filecoin-project/go-data-transfer/pull/185)) + - release: v1.4.3 (#189) ([filecoin-project/go-data-transfer#189](https://github.com/filecoin-project/go-data-transfer/pull/189)) +- github.com/filecoin-project/go-fil-markets (v1.2.5 -> v1.5.0): + - release: v1.5.0 + - Dynamic Retrieval Pricing (#542) ([filecoin-project/go-fil-markets#542](https://github.com/filecoin-project/go-fil-markets/pull/542)) + - release: v1.4.0 (#551) ([filecoin-project/go-fil-markets#551](https://github.com/filecoin-project/go-fil-markets/pull/551)) + - Update to go data transfer v1.6.0 (#550) ([filecoin-project/go-fil-markets#550](https://github.com/filecoin-project/go-fil-markets/pull/550)) + - fix first make error (#548) ([filecoin-project/go-fil-markets#548](https://github.com/filecoin-project/go-fil-markets/pull/548)) + - release: v1.3.0 (#544) ([filecoin-project/go-fil-markets#544](https://github.com/filecoin-project/go-fil-markets/pull/544)) + - fix restarts during data transfer for a retrieval deal (#540) ([filecoin-project/go-fil-markets#540](https://github.com/filecoin-project/go-fil-markets/pull/540)) + - Test Retrieval for offline deals (#541) ([filecoin-project/go-fil-markets#541](https://github.com/filecoin-project/go-fil-markets/pull/541)) + - Allow anonymous submodule checkout (#535) ([filecoin-project/go-fil-markets#535](https://github.com/filecoin-project/go-fil-markets/pull/535)) +- github.com/filecoin-project/specs-actors (v0.9.13 -> v0.9.14): + - Set ConsensusMinerMinPower to 10 TiB (#1427) ([filecoin-project/specs-actors#1427](https://github.com/filecoin-project/specs-actors/pull/1427)) +- github.com/filecoin-project/specs-actors/v2 (v2.3.5-0.20210114162132-5b58b773f4fb -> v2.3.5): + - Set ConsensusMinerMinPower to 10 TiB (#1428) ([filecoin-project/specs-actors#1428](https://github.com/filecoin-project/specs-actors/pull/1428)) + - v2 VM satisfies SimVM interface (#1355) ([filecoin-project/specs-actors#1355](https://github.com/filecoin-project/specs-actors/pull/1355)) +- github.com/filecoin-project/specs-actors/v3 (v3.1.0 -> v3.1.1): + - Set ConsensusMinerMinPower to 10 TiB for all PoStProofPolicies (#1429) ([filecoin-project/specs-actors#1429](https://github.com/filecoin-project/specs-actors/pull/1429)) +- github.com/filecoin-project/specs-actors/v4 (v4.0.0 -> v4.0.1): + - Set ConsensusMinerMinPower to 10 TiB for all PoStProofPolicies (#1430) ([filecoin-project/specs-actors#1430](https://github.com/filecoin-project/specs-actors/pull/1430)) + +Contributors + +| Contributor | Commits | Lines ± | Files Changed | +|-------------|---------|---------|---------------| +| Raúl Kripalani | 118 | +11972/-10860 | 472 | +| Łukasz Magiera | 65 | +10824/-4158 | 353 | +| aarshkshah1992 | 59 | +8057/-3355 | 224 | +| Aayush Rajasekaran | 41 | +8786/-1691 | 331 | +| Steven Allen | 106 | +7653/-2718 | 273 | +| dirkmc | 11 | +2580/-1371 | 77 | +| Dirk McCormick | 39 | +1865/-1194 | 79 | +| Jakub Sztandera | 19 | +1973/-485 | 81 | +| vyzo | 4 | +1748/-330 | 50 | +| Aarsh Shah | 5 | +1462/-213 | 27 | +| Cory Schwartz | 35 | +568/-206 | 59 | +| chadwick2143 | 3 | +739/-1 | 4 | +| Peter Rabbitson | 21 | +487/-164 | 36 | +| hannahhoward | 5 | +544/-5 | 19 | +| Jennifer Wang | 9 | +241/-174 | 19 | +| frrist | 1 | +137/-88 | 7 | +| Travis Person | 3 | +175/-6 | 7 | +| Alex Wade | 1 | +48/-129 | 1 | +| whyrusleeping | 8 | +161/-13 | 11 | +| lotus | 1 | +114/-46 | 1 | +| Anton Evangelatov | 8 | +107/-53 | 20 | +| Rjan | 4 | +115/-33 | 4 | +| ZenGround0 | 3 | +114/-1 | 4 | +| Aloxaf | 1 | +43/-61 | 7 | +| yaohcn | 4 | +89/-9 | 5 | +| mitchellsoo | 1 | +51/-0 | 1 | +| Mike Greenberg | 3 | +28/-18 | 4 | +| Jennifer | 6 | +9/-14 | 6 | +| Frank | 2 | +11/-10 | 2 | +| wangchao | 3 | +5/-4 | 4 | +| Steve Loeppky | 1 | +7/-1 | 1 | +| Lion | 1 | +4/-2 | 1 | +| Mimir | 1 | +2/-2 | 1 | +| raulk | 1 | +1/-1 | 1 | +| Jack Yao | 1 | +1/-1 | 1 | +| IPFSUnion | 1 | +1/-1 | 1 | + +# 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. + +## 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! + +## Bug Fixes +- 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 +- 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 diff --git a/build/version.go b/build/version.go index 49ec3f446..92f011424 100644 --- a/build/version.go +++ b/build/version.go @@ -34,7 +34,7 @@ func buildType() string { } // BuildVersion is the local build version, set by build system -const BuildVersion = "1.11.0-rc1" +const BuildVersion = "1.11.0-rc2" func UserVersion() string { if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" { From e52c639f02767b280f2964af04eb6b2b38ee63da Mon Sep 17 00:00:00 2001 From: Jennifer Wang Date: Thu, 22 Jul 2021 04:50:31 -0400 Subject: [PATCH 20/21] Release v1.11.0 --- CHANGELOG.md | 414 ++++++++++++--------------- build/openrpc/full.json.gz | Bin 23439 -> 23435 bytes build/openrpc/miner.json.gz | Bin 8102 -> 8098 bytes build/openrpc/worker.json.gz | Bin 2513 -> 2510 bytes build/version.go | 2 +- documentation/en/cli-lotus-miner.md | 4 +- documentation/en/cli-lotus-worker.md | 4 +- documentation/en/cli-lotus.md | 2 +- 8 files changed, 196 insertions(+), 230 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6891aaa9e..bbd03b031 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,239 +1,205 @@ # Lotus changelog -# 1.11.0-rc2 / 2021-07-02 +# 1.11.0 / 2021-07-22 -This is the second release candidate for the optional Lotus v1.11.0 release that introduces several months of bugfixes -and feature development. A more detailed changelog will follow upon final release. +This is a **highly recommended** release of Lotus that have many bug fixes, improvements and new features. -- github.com/filecoin-project/lotus: - - update changelog and bump version to v1.11.0-rc2 +## Highlights +- Miner SimultaneousTransfers config ([filecoin-project/lotus#6612](https://github.com/filecoin-project/lotus/pull/6612)) + - Set `SimultaneousTransfers` in lotus miner config to configure the maximum number of parallel online data transfers, including both storage and retrieval deals. +- Dynamic Retrieval pricing ([filecoin-project/lotus#6175](https://github.com/filecoin-project/lotus/pull/6175)) + - Customize your retrieval ask price, see a quick tutorial [here](https://github.com/filecoin-project/lotus/discussions/6780). +- Robust message management ([filecoin-project/lotus#5822](https://github.com/filecoin-project/lotus/pull/5822)) + - run `lotus mpool manage and follow the instructions! + - Demo available at https://www.youtube.com/watch?v=QDocpLQjZgQ. +- Add utils to use multisigs as miner owners ([filecoin-project/lotus#6490](https://github.com/filecoin-project/lotus/pull/6490)) + +## More New Features +- feat: implement lotus-sim ([filecoin-project/lotus#6406](https://github.com/filecoin-project/lotus/pull/6406)) +- implement a command to export a car ([filecoin-project/lotus#6405](https://github.com/filecoin-project/lotus/pull/6405)) +- Add a command to get the fees of a deal ([filecoin-project/lotus#5307](https://github.com/filecoin-project/lotus/pull/5307)) + - run `lotus-shed market get-deal-fees` +- Add a command to list retrievals ([filecoin-project/lotus#6337](https://github.com/filecoin-project/lotus/pull/6337)) + - run `lotus client list-retrievals` +- lotus-gateway: add check command ([filecoin-project/lotus#6373](https://github.com/filecoin-project/lotus/pull/6373)) +- lotus-wallet: JWT Support ([filecoin-project/lotus#6360](https://github.com/filecoin-project/lotus/pull/6360)) +- Allow starting networks from arbitrary actor versions ([filecoin-project/lotus#6305](https://github.com/filecoin-project/lotus/pull/6305)) +- oh, snap! ([filecoin-project/lotus#6202](https://github.com/filecoin-project/lotus/pull/6202)) +- Add a shed util to count 64 GiB miner stats ([filecoin-project/lotus#6290](https://github.com/filecoin-project/lotus/pull/6290)) +- Introduce stateless offline dealflow, bypassing the FSM/deallists ([filecoin-project/lotus#5961](https://github.com/filecoin-project/lotus/pull/5961)) +- Transplant some useful commands to lotus-shed actor ([filecoin-project/lotus#5913](https://github.com/filecoin-project/lotus/pull/5913)) + - run `lotus-shed actor` +- actor wrapper codegen ([filecoin-project/lotus#6108](https://github.com/filecoin-project/lotus/pull/6108)) +- Add a shed util to count miners by post type ([filecoin-project/lotus#6169](https://github.com/filecoin-project/lotus/pull/6169)) +- shed: command to list duplicate messages in tipsets (steb) ([filecoin-project/lotus#5847](https://github.com/filecoin-project/lotus/pull/5847)) +- feat: allow checkpointing to forks ([filecoin-project/lotus#6107](https://github.com/filecoin-project/lotus/pull/6107)) +- Add a CLI tool for miner proving deadline ([filecoin-project/lotus#6132](https://github.com/filecoin-project/lotus/pull/6132)) + - run `lotus state miner-proving-deadline` - - Lotus version 1.11.0 - - gateway: Add support for Version method ([filecoin-project/lotus#6618](https://github.com/filecoin-project/lotus/pull/6618)) - - Miner SimultaneousTransfers config ([filecoin-project/lotus#6612](https://github.com/filecoin-project/lotus/pull/6612)) - - revamped integration test kit (aka. Operation Sparks Joy) ([filecoin-project/lotus#6329](https://github.com/filecoin-project/lotus/pull/6329)) - - downgrade libp2p/go-libp2p-yamux to v0.5.1. ([filecoin-project/lotus#6605](https://github.com/filecoin-project/lotus/pull/6605)) - - Fix wallet error messages ([filecoin-project/lotus#6594](https://github.com/filecoin-project/lotus/pull/6594)) - - Fix CircleCI gen ([filecoin-project/lotus#6589](https://github.com/filecoin-project/lotus/pull/6589)) - - Make query-ask CLI more graceful ([filecoin-project/lotus#6590](https://github.com/filecoin-project/lotus/pull/6590)) - - ([filecoin-project/lotus#6406](https://github.com/filecoin-project/lotus/pull/6406)) - - move with changed name ([filecoin-project/lotus#6587](https://github.com/filecoin-project/lotus/pull/6587)) - - scale up sector expiration to avoid sector expire in batch-pre-commit waitting ([filecoin-project/lotus#6566](https://github.com/filecoin-project/lotus/pull/6566)) - - Merge release branch into master ([filecoin-project/lotus#6583](https://github.com/filecoin-project/lotus/pull/6583)) - - ([filecoin-project/lotus#6582](https://github.com/filecoin-project/lotus/pull/6582)) - - fix circleci being out of sync. ([filecoin-project/lotus#6573](https://github.com/filecoin-project/lotus/pull/6573)) - - dynamic circleci config for streamlining test execution ([filecoin-project/lotus#6561](https://github.com/filecoin-project/lotus/pull/6561)) - - Merge 1.10 branch into master ([filecoin-project/lotus#6571](https://github.com/filecoin-project/lotus/pull/6571)) - - Fix helptext ([filecoin-project/lotus#6560](https://github.com/filecoin-project/lotus/pull/6560)) - - extern/storage: add ability to ignore worker resources when scheduling. ([filecoin-project/lotus#6542](https://github.com/filecoin-project/lotus/pull/6542)) - - Merge 1.10 branch into master ([filecoin-project/lotus#6540](https://github.com/filecoin-project/lotus/pull/6540)) - - Initial draft: basic build instructions on Readme ([filecoin-project/lotus#6498](https://github.com/filecoin-project/lotus/pull/6498)) - - fix commit finalize failed ([filecoin-project/lotus#6521](https://github.com/filecoin-project/lotus/pull/6521)) - - Dynamic Retrieval pricing ([filecoin-project/lotus#6175](https://github.com/filecoin-project/lotus/pull/6175)) - - Fix soup ([filecoin-project/lotus#6501](https://github.com/filecoin-project/lotus/pull/6501)) - - fix: pick the correct partitions-per-post limit ([filecoin-project/lotus#6502](https://github.com/filecoin-project/lotus/pull/6502)) - - Fix the build - - Adjust various CLI display ratios to arbitrary precision ([filecoin-project/lotus#6309](https://github.com/filecoin-project/lotus/pull/6309)) - - Add utils to use multisigs as miner owners ([filecoin-project/lotus#6490](https://github.com/filecoin-project/lotus/pull/6490)) - - Test multicore SDR support ([filecoin-project/lotus#6479](https://github.com/filecoin-project/lotus/pull/6479)) - - sealing: Fix restartSectors race ([filecoin-project/lotus#6495](https://github.com/filecoin-project/lotus/pull/6495)) - - Merge 1.10 into master ([filecoin-project/lotus#6487](https://github.com/filecoin-project/lotus/pull/6487)) - - Unit tests for sector batchers ([filecoin-project/lotus#6432](https://github.com/filecoin-project/lotus/pull/6432)) - - Merge 1.10 changes into master ([filecoin-project/lotus#6466](https://github.com/filecoin-project/lotus/pull/6466)) - - Update chain list with correct help instructions ([filecoin-project/lotus#6465](https://github.com/filecoin-project/lotus/pull/6465)) - - clean failed sectors in batch commit ([filecoin-project/lotus#6451](https://github.com/filecoin-project/lotus/pull/6451)) - - itests/kit: add guard to ensure imports from tests only. ([filecoin-project/lotus#6445](https://github.com/filecoin-project/lotus/pull/6445)) - - consolidate integration tests into `itests` package; create test kit; cleanup ([filecoin-project/lotus#6311](https://github.com/filecoin-project/lotus/pull/6311)) - - Remove rc changelog, compile the new changelog for final release only ([filecoin-project/lotus#6444](https://github.com/filecoin-project/lotus/pull/6444)) - - updated configuration comments for docs ([filecoin-project/lotus#6440](https://github.com/filecoin-project/lotus/pull/6440)) - - Set ntwk v13 HyperDrive Calibration upgrade epoch ([filecoin-project/lotus#6441](https://github.com/filecoin-project/lotus/pull/6441)) - - Merge release/v1.10.10 into master ([filecoin-project/lotus#6439](https://github.com/filecoin-project/lotus/pull/6439)) - - implement a command to export a car ([filecoin-project/lotus#6405](https://github.com/filecoin-project/lotus/pull/6405)) - - Merge v1.10 release branch into master ([filecoin-project/lotus#6435](https://github.com/filecoin-project/lotus/pull/6435)) - - Fee config for sector batching ([filecoin-project/lotus#6420](https://github.com/filecoin-project/lotus/pull/6420)) - - Fix: correct the change of message size limit ([filecoin-project/lotus#6430](https://github.com/filecoin-project/lotus/pull/6430)) - - UX: lotus state power CLI should fail if called with a not-miner ([filecoin-project/lotus#6425](https://github.com/filecoin-project/lotus/pull/6425)) - - network reset friday - - Increase message size limit ([filecoin-project/lotus#6419](https://github.com/filecoin-project/lotus/pull/6419)) - - polish(stmgr): define ExecMonitor for message application callback ([filecoin-project/lotus#6389](https://github.com/filecoin-project/lotus/pull/6389)) - - upgrade testground action version ([filecoin-project/lotus#6403](https://github.com/filecoin-project/lotus/pull/6403)) - - Fix logging of stringified CIDs double-encoded in hex ([filecoin-project/lotus#6413](https://github.com/filecoin-project/lotus/pull/6413)) - - Update libp2p to 0.14.2 ([filecoin-project/lotus#6404](https://github.com/filecoin-project/lotus/pull/6404)) - - Bypass task scheduler for reading unsealed pieces ([filecoin-project/lotus#6280](https://github.com/filecoin-project/lotus/pull/6280)) - - testplans: lotus-soup: use default WPoStChallengeWindow ([filecoin-project/lotus#6400](https://github.com/filecoin-project/lotus/pull/6400)) - - build snapcraft ([filecoin-project/lotus#6388](https://github.com/filecoin-project/lotus/pull/6388)) - - Fix the doc errors of the sealing config funcs ([filecoin-project/lotus#6399](https://github.com/filecoin-project/lotus/pull/6399)) - - Integration tests for offline deals ([filecoin-project/lotus#6081](https://github.com/filecoin-project/lotus/pull/6081)) - - Fix success handling in Retreival ([filecoin-project/lotus#5921](https://github.com/filecoin-project/lotus/pull/5921)) - - Fix some flaky tests ([filecoin-project/lotus#6397](https://github.com/filecoin-project/lotus/pull/6397)) - - build appimage in CI ([filecoin-project/lotus#6384](https://github.com/filecoin-project/lotus/pull/6384)) - - Add doc on gas balancing ([filecoin-project/lotus#6392](https://github.com/filecoin-project/lotus/pull/6392)) - - Add a command to list retrievals ([filecoin-project/lotus#6337](https://github.com/filecoin-project/lotus/pull/6337)) - - Add interop network ([filecoin-project/lotus#6387](https://github.com/filecoin-project/lotus/pull/6387)) - - Network version 13 (v1.11) ([filecoin-project/lotus#6342](https://github.com/filecoin-project/lotus/pull/6342)) - - Generate AppImage ([filecoin-project/lotus#6208](https://github.com/filecoin-project/lotus/pull/6208)) - - lotus-gateway: add check command ([filecoin-project/lotus#6373](https://github.com/filecoin-project/lotus/pull/6373)) - - Add a warning to the release issue template ([filecoin-project/lotus#6374](https://github.com/filecoin-project/lotus/pull/6374)) - - update to markets-v1.4.0 ([filecoin-project/lotus#6369](https://github.com/filecoin-project/lotus/pull/6369)) - - Add test for AddVerifiedClient ([filecoin-project/lotus#6317](https://github.com/filecoin-project/lotus/pull/6317)) - - Typo fix in error message: "pubusb" -> "pubsub" ([filecoin-project/lotus#6365](https://github.com/filecoin-project/lotus/pull/6365)) - - Improve the cli state call command ([filecoin-project/lotus#6226](https://github.com/filecoin-project/lotus/pull/6226)) - - Upscale mineOne message to a WARN on unexpected ineligibility ([filecoin-project/lotus#6358](https://github.com/filecoin-project/lotus/pull/6358)) - - storagefsm: Fix batch deal packing behavior ([filecoin-project/lotus#6041](https://github.com/filecoin-project/lotus/pull/6041)) - - Remove few useless variable assignments ([filecoin-project/lotus#6359](https://github.com/filecoin-project/lotus/pull/6359)) - - lotus-wallet: JWT Support ([filecoin-project/lotus#6360](https://github.com/filecoin-project/lotus/pull/6360)) - - Reduce noise from 'peer has different genesis' messages ([filecoin-project/lotus#6357](https://github.com/filecoin-project/lotus/pull/6357)) - - events: Fix handling of multiple matched events per epoch ([filecoin-project/lotus#6355](https://github.com/filecoin-project/lotus/pull/6355)) - - Update RELEASE_ISSUE_TEMPLATE.md ([filecoin-project/lotus#6236](https://github.com/filecoin-project/lotus/pull/6236)) - - Get current seal proof when necessary ([filecoin-project/lotus#6339](https://github.com/filecoin-project/lotus/pull/6339)) - - Allow starting networks from arbitrary actor versions ([filecoin-project/lotus#6333](https://github.com/filecoin-project/lotus/pull/6333)) - - Remove log line when tracing is not configured ([filecoin-project/lotus#6334](https://github.com/filecoin-project/lotus/pull/6334)) - - Revert "Allow starting networks from arbitrary actor versions" ([filecoin-project/lotus#6330](https://github.com/filecoin-project/lotus/pull/6330)) - - separate tracing environment variables ([filecoin-project/lotus#6323](https://github.com/filecoin-project/lotus/pull/6323)) - - Allow starting networks from arbitrary actor versions ([filecoin-project/lotus#6305](https://github.com/filecoin-project/lotus/pull/6305)) - - feat: log dispute rate ([filecoin-project/lotus#6322](https://github.com/filecoin-project/lotus/pull/6322)) - - Use new actor tags ([filecoin-project/lotus#6291](https://github.com/filecoin-project/lotus/pull/6291)) - - Fix logging around mineOne ([filecoin-project/lotus#6310](https://github.com/filecoin-project/lotus/pull/6310)) - - Fix shell completions ([filecoin-project/lotus#6316](https://github.com/filecoin-project/lotus/pull/6316)) - - Allow 8MB sectors in devnet ([filecoin-project/lotus#6312](https://github.com/filecoin-project/lotus/pull/6312)) - - fix ticket expired ([filecoin-project/lotus#6304](https://github.com/filecoin-project/lotus/pull/6304)) - - oh, snap! ([filecoin-project/lotus#6202](https://github.com/filecoin-project/lotus/pull/6202)) - - Move verifreg shed utils to CLI ([filecoin-project/lotus#6135](https://github.com/filecoin-project/lotus/pull/6135)) - - consider storiface.PathStorage when calculating storage requirements ([filecoin-project/lotus#6233](https://github.com/filecoin-project/lotus/pull/6233)) - - `storage` module: add go docs and minor code quality refactors ([filecoin-project/lotus#6259](https://github.com/filecoin-project/lotus/pull/6259)) - - Revert "chore: update go-libp2p" ([filecoin-project/lotus#6306](https://github.com/filecoin-project/lotus/pull/6306)) - - Increase data transfer timeouts ([filecoin-project/lotus#6300](https://github.com/filecoin-project/lotus/pull/6300)) - - gateway: spin off from cmd to package ([filecoin-project/lotus#6294](https://github.com/filecoin-project/lotus/pull/6294)) - - Update to markets 1.3 ([filecoin-project/lotus#6149](https://github.com/filecoin-project/lotus/pull/6149)) - - Add a shed util to count 64 GiB miner stats ([filecoin-project/lotus#6290](https://github.com/filecoin-project/lotus/pull/6290)) - - Delete CODEOWNERS ([filecoin-project/lotus#6289](https://github.com/filecoin-project/lotus/pull/6289)) - - Merge v1.9.0 to master ([filecoin-project/lotus#6275](https://github.com/filecoin-project/lotus/pull/6275)) - - Backport 6200 to master ([filecoin-project/lotus#6272](https://github.com/filecoin-project/lotus/pull/6272)) - - Introduce stateless offline dealflow, bypassing the FSM/deallists ([filecoin-project/lotus#5961](https://github.com/filecoin-project/lotus/pull/5961)) - - chore: update go-libp2p ([filecoin-project/lotus#6231](https://github.com/filecoin-project/lotus/pull/6231)) - - fix: wait-api should use GetAPI to acquire binary specific API ([filecoin-project/lotus#6246](https://github.com/filecoin-project/lotus/pull/6246)) - - Update RELEASE_ISSUE_TEMPLATE.md - - fix(ci): Updates to lotus CI build process ([filecoin-project/lotus#6256](https://github.com/filecoin-project/lotus/pull/6256)) - - add flags to control gateway lookback parameters ([filecoin-project/lotus#6247](https://github.com/filecoin-project/lotus/pull/6247)) - - Feat/nerpa v4 ([filecoin-project/lotus#6248](https://github.com/filecoin-project/lotus/pull/6248)) - - chore(ci): Enable build on RC tags ([filecoin-project/lotus#6238](https://github.com/filecoin-project/lotus/pull/6238)) - - Transplant some useful commands to lotus-shed actor ([filecoin-project/lotus#5913](https://github.com/filecoin-project/lotus/pull/5913)) - - wip actor wrapper codegen ([filecoin-project/lotus#6108](https://github.com/filecoin-project/lotus/pull/6108)) - - Robust message management ([filecoin-project/lotus#5822](https://github.com/filecoin-project/lotus/pull/5822)) - - Add a shed util to count miners by post type ([filecoin-project/lotus#6169](https://github.com/filecoin-project/lotus/pull/6169)) - - Introduce a release issue template ([filecoin-project/lotus#5826](https://github.com/filecoin-project/lotus/pull/5826)) - - cron-wc ([filecoin-project/lotus#6178](https://github.com/filecoin-project/lotus/pull/6178)) - - This is a 1:1 forward-port of PR#6183 from 1.9.x to master ([filecoin-project/lotus#6196](https://github.com/filecoin-project/lotus/pull/6196)) - - Allow creation of state tree v3s ([filecoin-project/lotus#6167](https://github.com/filecoin-project/lotus/pull/6167)) - - drand: fix beacon cache ([filecoin-project/lotus#6164](https://github.com/filecoin-project/lotus/pull/6164)) - - Update cli gen ([filecoin-project/lotus#6155](https://github.com/filecoin-project/lotus/pull/6155)) - - mpool: Cleanup pre-nv12 selection logic ([filecoin-project/lotus#6148](https://github.com/filecoin-project/lotus/pull/6148)) - - Update ffi to proofs v7 ([filecoin-project/lotus#6150](https://github.com/filecoin-project/lotus/pull/6150)) - - Generate CLI docs ([filecoin-project/lotus#6145](https://github.com/filecoin-project/lotus/pull/6145)) - - feat: allow checkpointing to forks ([filecoin-project/lotus#6107](https://github.com/filecoin-project/lotus/pull/6107)) - - attempt to do better padding on pieces being written into sectors ([filecoin-project/lotus#5988](https://github.com/filecoin-project/lotus/pull/5988)) - - remove duplicate ask and calculate ping before lock ([filecoin-project/lotus#5968](https://github.com/filecoin-project/lotus/pull/5968)) - - Add a command to get the fees of a deal ([filecoin-project/lotus#5307](https://github.com/filecoin-project/lotus/pull/5307)) - - flaky tests improvement: separate TestBatchDealInput from TestAPIDealFlow ([filecoin-project/lotus#6141](https://github.com/filecoin-project/lotus/pull/6141)) - - Testground checks on push ([filecoin-project/lotus#5887](https://github.com/filecoin-project/lotus/pull/5887)) - - Add a CLI tool for miner proving deadline ([filecoin-project/lotus#6132](https://github.com/filecoin-project/lotus/pull/6132)) - - Use EmptyTSK where appropriate ([filecoin-project/lotus#6134](https://github.com/filecoin-project/lotus/pull/6134)) - - fix: use a consistent tipset in commands ([filecoin-project/lotus#6142](https://github.com/filecoin-project/lotus/pull/6142)) - - go mod tidy for lotus-soup testplans ([filecoin-project/lotus#6124](https://github.com/filecoin-project/lotus/pull/6124)) - - fix testground payment channel tests: use 1 miner ([filecoin-project/lotus#6126](https://github.com/filecoin-project/lotus/pull/6126)) - - fix: use the parent state when listing actors ([filecoin-project/lotus#6143](https://github.com/filecoin-project/lotus/pull/6143)) - - Speed up StateListMessages in some cases ([filecoin-project/lotus#6007](https://github.com/filecoin-project/lotus/pull/6007)) - - Return total power when GetPowerRaw doesn't find miner claim ([filecoin-project/lotus#4938](https://github.com/filecoin-project/lotus/pull/4938)) - - fix(splitstore): fix a panic on revert-only head changes ([filecoin-project/lotus#6133](https://github.com/filecoin-project/lotus/pull/6133)) - - shed: command to list duplicate messages in tipsets (steb) ([filecoin-project/lotus#5847](https://github.com/filecoin-project/lotus/pull/5847)) - - upgrade `lotus-soup` testplans and reduce deals concurrency to a single miner ([filecoin-project/lotus#6122](https://github.com/filecoin-project/lotus/pull/6122)) - - Merge releases (1.8.0) into master ([filecoin-project/lotus#6118](https://github.com/filecoin-project/lotus/pull/6118)) -- github.com/filecoin-project/go-commp-utils (v0.1.0 -> v0.1.1-0.20210427191551-70bf140d31c7): - - add a padding helper function ([filecoin-project/go-commp-utils#3](https://github.com/filecoin-project/go-commp-utils/pull/3)) -- github.com/filecoin-project/go-data-transfer (v1.4.3 -> v1.6.0): - - release: v1.6.0 - - fix: option to disable accept and complete timeouts - - fix: disable restart ack timeout - - release: v1.5.0 - - Add isRestart param to validators (#197) ([filecoin-project/go-data-transfer#197](https://github.com/filecoin-project/go-data-transfer/pull/197)) - - fix: flaky TestChannelMonitorAutoRestart (#198) ([filecoin-project/go-data-transfer#198](https://github.com/filecoin-project/go-data-transfer/pull/198)) - - Channel monitor watches for errors instead of measuring data rate (#190) ([filecoin-project/go-data-transfer#190](https://github.com/filecoin-project/go-data-transfer/pull/190)) - - fix: prevent concurrent restarts for same channel (#195) ([filecoin-project/go-data-transfer#195](https://github.com/filecoin-project/go-data-transfer/pull/195)) - - fix: channel state machine event handling (#194) ([filecoin-project/go-data-transfer#194](https://github.com/filecoin-project/go-data-transfer/pull/194)) - - Dont double count data sent (#185) ([filecoin-project/go-data-transfer#185](https://github.com/filecoin-project/go-data-transfer/pull/185)) - - release: v1.4.3 (#189) ([filecoin-project/go-data-transfer#189](https://github.com/filecoin-project/go-data-transfer/pull/189)) -- github.com/filecoin-project/go-fil-markets (v1.2.5 -> v1.5.0): - - release: v1.5.0 - - Dynamic Retrieval Pricing (#542) ([filecoin-project/go-fil-markets#542](https://github.com/filecoin-project/go-fil-markets/pull/542)) - - release: v1.4.0 (#551) ([filecoin-project/go-fil-markets#551](https://github.com/filecoin-project/go-fil-markets/pull/551)) - - Update to go data transfer v1.6.0 (#550) ([filecoin-project/go-fil-markets#550](https://github.com/filecoin-project/go-fil-markets/pull/550)) - - fix first make error (#548) ([filecoin-project/go-fil-markets#548](https://github.com/filecoin-project/go-fil-markets/pull/548)) - - release: v1.3.0 (#544) ([filecoin-project/go-fil-markets#544](https://github.com/filecoin-project/go-fil-markets/pull/544)) - - fix restarts during data transfer for a retrieval deal (#540) ([filecoin-project/go-fil-markets#540](https://github.com/filecoin-project/go-fil-markets/pull/540)) - - Test Retrieval for offline deals (#541) ([filecoin-project/go-fil-markets#541](https://github.com/filecoin-project/go-fil-markets/pull/541)) - - Allow anonymous submodule checkout (#535) ([filecoin-project/go-fil-markets#535](https://github.com/filecoin-project/go-fil-markets/pull/535)) -- github.com/filecoin-project/specs-actors (v0.9.13 -> v0.9.14): - - Set ConsensusMinerMinPower to 10 TiB (#1427) ([filecoin-project/specs-actors#1427](https://github.com/filecoin-project/specs-actors/pull/1427)) -- github.com/filecoin-project/specs-actors/v2 (v2.3.5-0.20210114162132-5b58b773f4fb -> v2.3.5): - - Set ConsensusMinerMinPower to 10 TiB (#1428) ([filecoin-project/specs-actors#1428](https://github.com/filecoin-project/specs-actors/pull/1428)) - - v2 VM satisfies SimVM interface (#1355) ([filecoin-project/specs-actors#1355](https://github.com/filecoin-project/specs-actors/pull/1355)) -- github.com/filecoin-project/specs-actors/v3 (v3.1.0 -> v3.1.1): - - Set ConsensusMinerMinPower to 10 TiB for all PoStProofPolicies (#1429) ([filecoin-project/specs-actors#1429](https://github.com/filecoin-project/specs-actors/pull/1429)) -- github.com/filecoin-project/specs-actors/v4 (v4.0.0 -> v4.0.1): - - Set ConsensusMinerMinPower to 10 TiB for all PoStProofPolicies (#1430) ([filecoin-project/specs-actors#1430](https://github.com/filecoin-project/specs-actors/pull/1430)) -Contributors +## Bug Fixes +- Fix wallet error messages ([filecoin-project/lotus#6594](https://github.com/filecoin-project/lotus/pull/6594)) +- Fix CircleCI gen ([filecoin-project/lotus#6589](https://github.com/filecoin-project/lotus/pull/6589)) +- Make query-ask CLI more graceful ([filecoin-project/lotus#6590](https://github.com/filecoin-project/lotus/pull/6590)) +- scale up sector expiration to avoid sector expire in batch-pre-commit waitting ([filecoin-project/lotus#6566](https://github.com/filecoin-project/lotus/pull/6566)) +- Fix an error in msigLockCancel ([filecoin-project/lotus#6582](https://github.com/filecoin-project/lotus/pull/6582) +- fix circleci being out of sync. ([filecoin-project/lotus#6573](https://github.com/filecoin-project/lotus/pull/6573)) +- Fix helptext for ask price([filecoin-project/lotus#6560](https://github.com/filecoin-project/lotus/pull/6560)) +- fix commit finalize failed ([filecoin-project/lotus#6521](https://github.com/filecoin-project/lotus/pull/6521)) +- Fix soup ([filecoin-project/lotus#6501](https://github.com/filecoin-project/lotus/pull/6501)) +- fix: pick the correct partitions-per-post limit ([filecoin-project/lotus#6502](https://github.com/filecoin-project/lotus/pull/6502)) +- sealing: Fix restartSectors race ([filecoin-project/lotus#6495](https://github.com/filecoin-project/lotus/pull/6495)) +- Fix: correct the change of message size limit ([filecoin-project/lotus#6430](https://github.com/filecoin-project/lotus/pull/6430)) +- Fix logging of stringified CIDs double-encoded in hex ([filecoin-project/lotus#6413](https://github.com/filecoin-project/lotus/pull/6413)) +- Fix success handling in Retreival ([filecoin-project/lotus#5921](https://github.com/filecoin-project/lotus/pull/5921)) +- storagefsm: Fix batch deal packing behavior ([filecoin-project/lotus#6041](https://github.com/filecoin-project/lotus/pull/6041)) +- events: Fix handling of multiple matched events per epoch ([filecoin-project/lotus#6355](https://github.com/filecoin-project/lotus/pull/6355)) +- Fix logging around mineOne ([filecoin-project/lotus#6310](https://github.com/filecoin-project/lotus/pull/6310)) +- Fix shell completions ([filecoin-project/lotus#6316](https://github.com/filecoin-project/lotus/pull/6316)) +- Allow 8MB sectors in devnet ([filecoin-project/lotus#6312](https://github.com/filecoin-project/lotus/pull/6312)) +- fix ticket expired ([filecoin-project/lotus#6304](https://github.com/filecoin-project/lotus/pull/6304)) +- Revert "chore: update go-libp2p" ([filecoin-project/lotus#6306](https://github.com/filecoin-project/lotus/pull/6306)) +- fix: wait-api should use GetAPI to acquire binary specific API ([filecoin-project/lotus#6246](https://github.com/filecoin-project/lotus/pull/6246)) +- fix(ci): Updates to lotus CI build process ([filecoin-project/lotus#6256](https://github.com/filecoin-project/lotus/pull/6256)) +- fix: use a consistent tipset in commands ([filecoin-project/lotus#6142](https://github.com/filecoin-project/lotus/pull/6142)) +- go mod tidy for lotus-soup testplans ([filecoin-project/lotus#6124](https://github.com/filecoin-project/lotus/pull/6124)) +- fix testground payment channel tests: use 1 miner ([filecoin-project/lotus#6126](https://github.com/filecoin-project/lotus/pull/6126)) +- fix: use the parent state when listing actors ([filecoin-project/lotus#6143](https://github.com/filecoin-project/lotus/pull/6143)) +- Speed up StateListMessages in some cases ([filecoin-project/lotus#6007](https://github.com/filecoin-project/lotus/pull/6007)) +- fix(splitstore): fix a panic on revert-only head changes ([filecoin-project/lotus#6133](https://github.com/filecoin-project/lotus/pull/6133)) +- drand: fix beacon cache ([filecoin-project/lotus#6164](https://github.com/filecoin-project/lotus/pull/6164)) + +## Improvements +- gateway: Add support for Version method ([filecoin-project/lotus#6618](https://github.com/filecoin-project/lotus/pull/6618)) +- revamped integration test kit (aka. Operation Sparks Joy) ([filecoin-project/lotus#6329](https://github.com/filecoin-project/lotus/pull/6329)) +- move with changed name ([filecoin-project/lotus#6587](https://github.com/filecoin-project/lotus/pull/6587)) +- dynamic circleci config for streamlining test execution ([filecoin-project/lotus#6561](https://github.com/filecoin-project/lotus/pull/6561)) +- extern/storage: add ability to ignore worker resources when scheduling. ([filecoin-project/lotus#6542](https://github.com/filecoin-project/lotus/pull/6542)) +- Adjust various CLI display ratios to arbitrary precision ([filecoin-project/lotus#6309](https://github.com/filecoin-project/lotus/pull/6309)) +- Test multicore SDR support ([filecoin-project/lotus#6479](https://github.com/filecoin-project/lotus/pull/6479)) +- Unit tests for sector batchers ([filecoin-project/lotus#6432](https://github.com/filecoin-project/lotus/pull/6432)) +- Update chain list with correct help instructions ([filecoin-project/lotus#6465](https://github.com/filecoin-project/lotus/pull/6465)) +- clean failed sectors in batch commit ([filecoin-project/lotus#6451](https://github.com/filecoin-project/lotus/pull/6451)) +- itests/kit: add guard to ensure imports from tests only. ([filecoin-project/lotus#6445](https://github.com/filecoin-project/lotus/pull/6445)) +- consolidate integration tests into `itests` package; create test kit; cleanup ([filecoin-project/lotus#6311](https://github.com/filecoin-project/lotus/pull/6311)) +- Fee config for sector batching ([filecoin-project/lotus#6420](https://github.com/filecoin-project/lotus/pull/6420)) +- UX: lotus state power CLI should fail if called with a not-miner ([filecoin-project/lotus#6425](https://github.com/filecoin-project/lotus/pull/6425)) +- Increase message size limit ([filecoin-project/lotus#6419](https://github.com/filecoin-project/lotus/pull/6419)) +- polish(stmgr): define ExecMonitor for message application callback ([filecoin-project/lotus#6389](https://github.com/filecoin-project/lotus/pull/6389)) +- upgrade testground action version ([filecoin-project/lotus#6403](https://github.com/filecoin-project/lotus/pull/6403)) +- Bypass task scheduler for reading unsealed pieces ([filecoin-project/lotus#6280](https://github.com/filecoin-project/lotus/pull/6280)) +- testplans: lotus-soup: use default WPoStChallengeWindow ([filecoin-project/lotus#6400](https://github.com/filecoin-project/lotus/pull/6400)) +- Integration tests for offline deals ([filecoin-project/lotus#6081](https://github.com/filecoin-project/lotus/pull/6081)) +- Fix some flaky tests ([filecoin-project/lotus#6397](https://github.com/filecoin-project/lotus/pull/6397)) +- build appimage in CI ([filecoin-project/lotus#6384](https://github.com/filecoin-project/lotus/pull/6384)) +- Generate AppImage ([filecoin-project/lotus#6208](https://github.com/filecoin-project/lotus/pull/6208)) +- Add test for AddVerifiedClient ([filecoin-project/lotus#6317](https://github.com/filecoin-project/lotus/pull/6317)) +- Typo fix in error message: "pubusb" -> "pubsub" ([filecoin-project/lotus#6365](https://github.com/filecoin-project/lotus/pull/6365)) +- Improve the cli state call command ([filecoin-project/lotus#6226](https://github.com/filecoin-project/lotus/pull/6226)) +- Upscale mineOne message to a WARN on unexpected ineligibility ([filecoin-project/lotus#6358](https://github.com/filecoin-project/lotus/pull/6358)) +- Remove few useless variable assignments ([filecoin-project/lotus#6359](https://github.com/filecoin-project/lotus/pull/6359)) +- Reduce noise from 'peer has different genesis' messages ([filecoin-project/lotus#6357](https://github.com/filecoin-project/lotus/pull/6357)) +- Get current seal proof when necessary ([filecoin-project/lotus#6339](https://github.com/filecoin-project/lotus/pull/6339)) +- Remove log line when tracing is not configured ([filecoin-project/lotus#6334](https://github.com/filecoin-project/lotus/pull/6334)) +- separate tracing environment variables ([filecoin-project/lotus#6323](https://github.com/filecoin-project/lotus/pull/6323)) +- feat: log dispute rate ([filecoin-project/lotus#6322](https://github.com/filecoin-project/lotus/pull/6322)) +- Move verifreg shed utils to CLI ([filecoin-project/lotus#6135](https://github.com/filecoin-project/lotus/pull/6135)) +- consider storiface.PathStorage when calculating storage requirements ([filecoin-project/lotus#6233](https://github.com/filecoin-project/lotus/pull/6233)) +- `storage` module: add go docs and minor code quality refactors ([filecoin-project/lotus#6259](https://github.com/filecoin-project/lotus/pull/6259)) +- Increase data transfer timeouts ([filecoin-project/lotus#6300](https://github.com/filecoin-project/lotus/pull/6300)) +- gateway: spin off from cmd to package ([filecoin-project/lotus#6294](https://github.com/filecoin-project/lotus/pull/6294)) +- Return total power when GetPowerRaw doesn't find miner claim ([filecoin-project/lotus#4938](https://github.com/filecoin-project/lotus/pull/4938)) +- add flags to control gateway lookback parameters ([filecoin-project/lotus#6247](https://github.com/filecoin-project/lotus/pull/6247)) +- chore(ci): Enable build on RC tags ([filecoin-project/lotus#6238](https://github.com/filecoin-project/lotus/pull/6238)) +- cron-wc ([filecoin-project/lotus#6178](https://github.com/filecoin-project/lotus/pull/6178)) +- Allow creation of state tree v3s ([filecoin-project/lotus#6167](https://github.com/filecoin-project/lotus/pull/6167)) +- mpool: Cleanup pre-nv12 selection logic ([filecoin-project/lotus#6148](https://github.com/filecoin-project/lotus/pull/6148)) +- attempt to do better padding on pieces being written into sectors ([filecoin-project/lotus#5988](https://github.com/filecoin-project/lotus/pull/5988)) +- remove duplicate ask and calculate ping before lock ([filecoin-project/lotus#5968](https://github.com/filecoin-project/lotus/pull/5968)) +- flaky tests improvement: separate TestBatchDealInput from TestAPIDealFlow ([filecoin-project/lotus#6141](https://github.com/filecoin-project/lotus/pull/6141)) +- Testground checks on push ([filecoin-project/lotus#5887](https://github.com/filecoin-project/lotus/pull/5887)) +- Use EmptyTSK where appropriate ([filecoin-project/lotus#6134](https://github.com/filecoin-project/lotus/pull/6134)) +- upgrade `lotus-soup` testplans and reduce deals concurrency to a single miner ([filecoin-project/lotus#6122](https://github.com/filecoin-project/lotus/pull/6122) + +## Dependency Updates +- downgrade libp2p/go-libp2p-yamux to v0.5.1. ([filecoin-project/lotus#6605](https://github.com/filecoin-project/lotus/pull/6605)) +- Update libp2p to 0.14.2 ([filecoin-project/lotus#6404](https://github.com/filecoin-project/lotus/pull/6404)) +- update to markets-v1.4.0 ([filecoin-project/lotus#6369](https://github.com/filecoin-project/lotus/pull/6369)) +- Use new actor tags ([filecoin-project/lotus#6291](https://github.com/filecoin-project/lotus/pull/6291)) +- chore: update go-libp2p ([filecoin-project/lotus#6231](https://github.com/filecoin-project/lotus/pull/6231)) +- Update ffi to proofs v7 ([filecoin-project/lotus#6150](https://github.com/filecoin-project/lotus/pull/6150)) + +## Others +- Initial draft: basic build instructions on Readme ([filecoin-project/lotus#6498](https://github.com/filecoin-project/lotus/pull/6498)) +- Remove rc changelog, compile the new changelog for final release only ([filecoin-project/lotus#6444](https://github.com/filecoin-project/lotus/pull/6444)) +- updated configuration comments for docs ([filecoin-project/lotus#6440](https://github.com/filecoin-project/lotus/pull/6440)) +- Set ntwk v13 HyperDrive Calibration upgrade epoch ([filecoin-project/lotus#6441](https://github.com/filecoin-project/lotus/pull/6441)) +- build snapcraft ([filecoin-project/lotus#6388](https://github.com/filecoin-project/lotus/pull/6388)) +- Fix the doc errors of the sealing config funcs ([filecoin-project/lotus#6399](https://github.com/filecoin-project/lotus/pull/6399)) +- Add doc on gas balancing ([filecoin-project/lotus#6392](https://github.com/filecoin-project/lotus/pull/6392)) +- Add interop network ([filecoin-project/lotus#6387](https://github.com/filecoin-project/lotus/pull/6387)) +- Network version 13 (v1.11) ([filecoin-project/lotus#6342](https://github.com/filecoin-project/lotus/pull/6342)) +- Add a warning to the release issue template ([filecoin-project/lotus#6374](https://github.com/filecoin-project/lotus/pull/6374)) +- Update RELEASE_ISSUE_TEMPLATE.md ([filecoin-project/lotus#6236](https://github.com/filecoin-project/lotus/pull/6236)) +- Delete CODEOWNERS ([filecoin-project/lotus#6289](https://github.com/filecoin-project/lotus/pull/6289)) +- Feat/nerpa v4 ([filecoin-project/lotus#6248](https://github.com/filecoin-project/lotus/pull/6248)) +- Introduce a release issue template ([filecoin-project/lotus#5826](https://github.com/filecoin-project/lotus/pull/5826)) +- This is a 1:1 forward-port of PR#6183 from 1.9.x to master ([filecoin-project/lotus#6196](https://github.com/filecoin-project/lotus/pull/6196)) +- Update cli gen ([filecoin-project/lotus#6155](https://github.com/filecoin-project/lotus/pull/6155)) +- Generate CLI docs ([filecoin-project/lotus#6145](https://github.com/filecoin-project/lotus/pull/6145)) + +## Contributors | Contributor | Commits | Lines ± | Files Changed | |-------------|---------|---------|---------------| -| Raúl Kripalani | 118 | +11972/-10860 | 472 | -| Łukasz Magiera | 65 | +10824/-4158 | 353 | -| aarshkshah1992 | 59 | +8057/-3355 | 224 | -| Aayush Rajasekaran | 41 | +8786/-1691 | 331 | -| Steven Allen | 106 | +7653/-2718 | 273 | +| @raulk | 118 | +11972/-10860 | 472 | +| @magik6k | 65 | +10824/-4158 | 353 | +| @aarshkshah1992 | 59 | +8057/-3355 | 224 | +| @arajasek | 41 | +8786/-1691 | 331 | +| @Stebalien | 106 | +7653/-2718 | 273 | | dirkmc | 11 | +2580/-1371 | 77 | -| Dirk McCormick | 39 | +1865/-1194 | 79 | -| Jakub Sztandera | 19 | +1973/-485 | 81 | -| vyzo | 4 | +1748/-330 | 50 | -| Aarsh Shah | 5 | +1462/-213 | 27 | -| Cory Schwartz | 35 | +568/-206 | 59 | -| chadwick2143 | 3 | +739/-1 | 4 | -| Peter Rabbitson | 21 | +487/-164 | 36 | -| hannahhoward | 5 | +544/-5 | 19 | -| Jennifer Wang | 9 | +241/-174 | 19 | -| frrist | 1 | +137/-88 | 7 | -| Travis Person | 3 | +175/-6 | 7 | -| Alex Wade | 1 | +48/-129 | 1 | -| whyrusleeping | 8 | +161/-13 | 11 | +| @dirkmc | 39 | +1865/-1194 | 79 | +| @Kubuxu | 19 | +1973/-485 | 81 | +| @vyzo | 4 | +1748/-330 | 50 | +| @aarshkshah1992 | 5 | +1462/-213 | 27 | +| @coryschwartz | 35 | +568/-206 | 59 | +| @chadwick2143 | 3 | +739/-1 | 4 | +| @ribasushi | 21 | +487/-164 | 36 | +| @hannahhoward | 5 | +544/-5 | 19 | +| @jennijuju | 9 | +241/-174 | 19 | +| @frrist | 1 | +137/-88 | 7 | +| @travisperson | 3 | +175/-6 | 7 | +| @wadeAlexC | 1 | +48/-129 | 1 | +| @whyrusleeping | 8 | +161/-13 | 11 | | lotus | 1 | +114/-46 | 1 | -| Anton Evangelatov | 8 | +107/-53 | 20 | -| Rjan | 4 | +115/-33 | 4 | -| ZenGround0 | 3 | +114/-1 | 4 | -| Aloxaf | 1 | +43/-61 | 7 | -| yaohcn | 4 | +89/-9 | 5 | -| mitchellsoo | 1 | +51/-0 | 1 | -| Mike Greenberg | 3 | +28/-18 | 4 | -| Jennifer | 6 | +9/-14 | 6 | -| Frank | 2 | +11/-10 | 2 | -| wangchao | 3 | +5/-4 | 4 | -| Steve Loeppky | 1 | +7/-1 | 1 | -| Lion | 1 | +4/-2 | 1 | -| Mimir | 1 | +2/-2 | 1 | -| raulk | 1 | +1/-1 | 1 | -| Jack Yao | 1 | +1/-1 | 1 | -| IPFSUnion | 1 | +1/-1 | 1 | +| @nonsense | 8 | +107/-53 | 20 | +| @rjan90 | 4 | +115/-33 | 4 | +| @ZenGround0 | 3 | +114/-1 | 4 | +| @Aloxaf | 1 | +43/-61 | 7 | +| @yaohcn | 4 | +89/-9 | 5 | +| @mitchellsoo | 1 | +51/-0 | 1 | +| @placer14 | 3 | +28/-18 | 4 | +| @jennijuju | 6 | +9/-14 | 6 | +| @Frank | 2 | +11/-10 | 2 | +| @wangchao | 3 | +5/-4 | 4 | +| @Steve Loeppky | 1 | +7/-1 | 1 | +| @Lion | 1 | +4/-2 | 1 | +| @Mimir | 1 | +2/-2 | 1 | +| @raulk | 1 | +1/-1 | 1 | +| @Jack Yao | 1 | +1/-1 | 1 | +| @IPFSUnion | 1 | +1/-1 | 1 | -# 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 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 - - `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 -- Fix tiny error in check-client-datacap #6664 +- 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 @@ -247,13 +213,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 b46c9ba5b3689df5e203ff5d4b9217f036db7442..fe0c17662ad3ad0af07e497d156c2d06e58adb4f 100644 GIT binary patch delta 23373 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 delta 23377 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�BXMbXtZq+(c?L=v7?DiFI$j*^p zYGLY6kM~fRc`A}mEkX>0YCJqk+UNUjIQId2>|iJ!VX&@z1kh!<&LFa(qy4PXC@|4* z$L-GWny^+YWoe$bL#ZRWIr@2(rk**p1PsoM*PQYc#>x4u{6ZV?ekaU=M~;B^kmMJSJx0oo;8 z)}|N3Ygy7LIB3*Y4@bWN?_72&?0pje{=HML`y}$y^h1tSI8bgXXk_RJ$#uk3gYs+v z*YelxRWVbw0GFJzEt!ZjO%m;18Un!bI54}(FrJQq!HQb@U?Zm(eLQJ;D_&(C6_hDn zQ4W%gg<TjD)P(9U-rAtsKk0O&(g5d8(i-8?cYU(8K-C?(jD(sUe=8}Jcg1Iyn|N9RkgMD zU8>)mng%;+-|q?vrjjZoq}w642*gpOq%^a+PO^1ZDm9l3~WN}?ef=xiEcYUSfB&$k3^+j4P`KR97vj*NDE;4>%0Ic%A$szvk(a0THWlcn~K)-5Aos>R-VqkwjB~W-ev&pa+xcy=G=H< z`(w9`=t274>X#gJ?layxbnXh9dzlk=!kY`;Bp37F2@UHxIj!|Zrn~fy% zmT^rqJUe#_#EoW4E@WSIi9o)-dF*rBTR;FT)<%{q+us7*U98w*I81IAwvUjrlziIQQnnz;aZ>}IEuhr!lS~|qClX*TbaXrf*mCr z2^1mVAS7E7IG^w2o6GZJc{r-hIi{A{p`*Z6+U#p_nXNL(M_T;|?0C0bIvSD*=LqQ6 zwGmscHKnfh_HUS)`b$`$JMaq_Bao2zQZWhfMiV1eRRqx5EmuE6&dv5Uz}&FdcV|Ja zbr`WQk8-ows&^e-&SqZ6E&QJ$H-_1BxF~r&sSNgF1#aZe0p@~m_E3Sr#srKGxQ0n^4i4U9*d#fNX*4X1L`MUqx~q7YUcJxI8QYY91xiux z@#?<-aJjW369A_~s`%+6E+b2F*HZc)bMjnq)*j1$WZ-|5!D?!k$t%?PIj6mEM(k^P z14e;|<$@m=M&Dx&)#=o7OPnG^11l{zn^NPkn%WKleG5qmwxM%0-6t=CTl?u#l&_M~ zOHwydCaD#Jw!Jy3eS!(gPsScuV3F`Gvq7x@D`!+X!~B9cwjr~6aNS^atA$SMl~#82 z0g6mx>EXxep-?M)!U|rn4W^yo3|RTVbQHzmK18ClF>PrhZ5xQt0gN@S{*3cB_r%-* zQw42hXy6FSA%owN5x6FM+*nF~Wt8||B8IWi*8K&qGs`$SS24a(&ZR_U5Ng-XZU#X> zq9qG48VU9aEv$NSPbyCSx!xH@<|*C6B>}kJNiC$19`@V$moR|O>_jUQ-T;(Q?AP;) zn#3foMlE=z^JwkGu33q5W}2bnEkfIYhiDw~e2lC5 zUDtl6aC#(oYAo57G_ENFAyth_aqR{`(bQsDah`!&5m;-iqxY0!O|@`t?uD*Ow^I!F*I^z4G~ixRo0Db9V}RN8M!%N&jR<@)?yL zDBZBO?_(}U`hfS^J%hSX9E3Ek$1&XW#mR z>0LrG*ZT=dA15N@OqgFp|k@avrTAjCd8LK!kx(Xgc?2zUM zJ#i=$E0MPjDg{ruI}Hg}_YvGV`;?GPrzmnhlI`ThUD7@uFIU)Y%iJre84%mXswmKS zpl}bxi#AYI^rMET4C|*3w^S1t`P9~wI^CpAv9i%$FeuQwM&GI=3Z-j+h#b6ssZRt$ zILD)K2ncq(JLCt<__9L@BU4g#b&X0ePbM|~#(DH|zB6T&yTVEKVl9t3V**;K6*AvH zMV(?=l7l192DvdtT^TFr%s27QL6M6s*%OpueO~2*Q^v0J4un5I^J|Bq-xBKf>`kkm zz93`oweO>T;}8@Pj0OcD6NKmto(St4KeZ|tV>nVN084L=ackA<<_~#0)Mpk@;(%jV5I7-uVRI7* zhR%lOCjlPw6|+cXG}}2~a!?mMh=ruXX|wm=L;+W4agAU}ZQ18UPwcmsVtl!7DAmRM z)DgZF2ts;5pNaq{$)bc|UhZ536A&mO>HC7$hEpiRB4i|cSfd(giMD^9c}(`VFVsRf zeAA7dOw?{}6@d9SAp^-Yz>6B}gc z0bMK0+_k+OKShDw?x7WCUp9t@Zo)b`Pg9#455`y<)ABVdx90W%-c>EDAn0Qy*I^Pq zQj&*cPEC#3uwHROk4@lYOYgPdafc~>@A8w&?wQNSmtedg6E!Z7Kua-oESJ(212T|3 zEMj=^mev~m*cP&ZxbK`1Z+6p z;uP~CU9=QUeyB}}_3#2BVS(Nkn@#gs6isJv?aGKl_N~~Z6l2jpDrw@jR&RV%cm`kX zM-*wEh*>U3`$pN|yqN^?kPv==-y{rW=_@jYtiVLwS|I$V81t4aLc72)-3CY|kom#B zBqAhH3iE%U=f!y%_i(D#HEGELh*$U?#ZPUt%9Xi~SSVe)#-x&-2ZP+KycJo7mdEI? ze|u5i0@bx8lNl#tokc(HQU0(;oEgbkGbG`w(z&{7HY)4s}Id$the70*-Ei;Cw`SmjuYks+=I4J-ww$h zCgAq0b-Vd1+N`~LdXd3tQoDY7GIGpPZMr7o{h*8b7kB7=Ch5eP@yoI4#%~>bHqc-y z5Jf6r{BrUl;Vl~{E8<6M#aA6` z<=rTF76KkG-_;{ND(ubx*&Z^*{V=eE*f8=Iq7Zq5X&kZniW*1VVa%eUOpx?77{^ph zA_jUHmrYrb{0{b3A7&5Jydt0h1g?>RN_GW^vOtjn@!VHnOa`ARPz_{3z=%GHpr)Vg z747lBq8VI8(*umY-_gnU{$E73x1KyWyj*|1D3RkW3RA%et&RgER%7KJzj)9Uws!En zi^kru#4by5$`5EM!5%MpMr&y$R@rMt`9Rroqg}MUiJ+ZN;@H5t>Wb-IB?25!;{7TJ z&Bt7`a0gFIQaqbtoOpoU4N0BT8Gf)vM;Q$i+LxB@`Tp9!NFJZSeUnv3L7i~b7{u`7{@2q%;!Hz{{=R!#` zzu{tG7I_c8EX2`H${+n~!z5S2q?yUBvs3x@Sf3@rD~|F_eH&QbPsJ0Q5H+*twOjzS ziYp83Uhwp6U#di-OI+=y+Z%ah$S@fQZQXE@%gTO_-;4K=i+NI<;6gtN zRRs7u`9F*eB3aT`m>9mkw{D8*oF_6{!zU+WXIFnkj~0lQq37Kj+B23W;DU*56nR}O zXIlCoe(L@o;G?Fnqv-_lb4%pp(J%EWx&^1{)5pJpe(_pxgzr0J~CeC^{-+by;b-i*J+i4X~q+8jD=$ye4R( zVNvs6&4`k+NYbr@t~K*n+9JwY1h0e%izDDmE&!!YCK0Tw(}<6Rza3K@bf~1o{rni) zFKmDJpUN0Cx{(%qzJDiu9{;OI?L|Y6ch{bYTl77Keer6D4xT9y^hSv zgkFNE_|y&>SEK%RD!jJZA5OrsJWu8vpYPkx&_7k$T-g887$5=}+bg?2zZx%!*sCH9V$_1L&__4wi4LJIS6;SXX>a;f8?(QR(}I1N zJF8i~RQ_&d+0AEs@q%N6XM`m&x8(-ZTH_T3PKr*!*;w04saN9xZ}E51vGnI+g=rftiVljOVyc2>4VD)v&Yrbs zj+u#y#2G=k4xV!B!U1OS(-tlq_(?uwT!*ks3)B|mY=_efM^lYrrBoYDd^= z`wt?VhW{_qwP0rIS48ztrK_;XlJMuuNHn`{i5)iF-#g@vg5xNu#?zXY3q_v8`co#v zY8$f2jlxE2>i8UX$_OWJoE}jA5`#bT29K>~GE{LruYtFSw`EIMcG8lmzN)s$9lEIa z_Jt}TKLCS9w8Qgk7I0tCKeFyYV@JBTqNl1S8__+DiEvRm1o(tc5a47F@0+WAuam?e z2o>>O9zq`6+?Nx-m0=!V@t6~<)qDb~*5-H0Yszym+o-?OTUu?UtHyXGYw9q17DHmy zC$)$D;AIS5JE>cR6&Rk^D}Tvxls-#Zq-`djl>yeDXzMs5dkJsD@pJn*_Y=6yk%d~p zP#$^YM+Zd?q{@!LW5Qxr*C}5q%yo#w zFaWZBLU6Y11Yx9Cf8`S$TKBT;8&v$bAk*&UbUf|a8n;bmPJH`2Pwm{JpB?dcj63PJ z&N!ZZw)d}Oi=2y|V2ex{6~QtcDv?t$w;hE>AqlZv(nEAh^1Vi=@a4>k+pi~dbdy^< zX?FBN?7c+zD??M{O#XtF{S z$b^P=^9Tj=d5FAK;=s425Ovy*j|6qM$^87L<8rtvb=ZW=Bd;$nV4AN;(1WJEn z95{#&7(FzpUT;AuqlTLi6!dnE3`vIR`|3cIu|z?$%e;7SE~JA=<0i*=xC)yJz*L7I zwFx)r!kmEwAUm#ovSGq3v2zY=fKOA*Q!}olS}mH^U;&TW9Tqo(*gX?_R^9Bz2}$=gmI9+yHTfaj^nYLPD8$CzCUKhs)A?~^#YGgU+lNsZ4e@6jJKsk#;y>zgeV)#vAUHd}MMD()+mD^Y#_K0= zr03*{zr9nz-RF6H>za3Mb*;wPKM*9*E6#@?qjbZ}-3#BJT5e4U^=F*X7v`UeX8s=yZCdj)7l^<2tuRQ@3 z^scO2Sb}|YMddefP@vuMED2OOox3dB20M32VbixXur?IA1wDT%Ya@rRi;5^WSVTb4 z`GMF9;^>v>vB+}%G6{5m{)$fW6LGo2oC zz>t%RIK!nMqFKTw`Ec=1q{hUo6g%bj{;AcuS0q|-B6e!V?woD6F&j;=J&1Tp%!Q{ywNpP!ws*>502=5Qb#lr1rA)G?*4>!BUp7b9QDsugW$2x;3Z_A z>20GVHcVa3E~df)_pw5(T9@%8j*SUdyoxy#u3d23@w)~HK&kj2i7KC#F1?BZ?Mwlz zLMfINKbOzU1I@*BjVeGf_rb(jeqoF@1ZwV3#ITBXNSg$jLU%^6I?~$9$Ob?Co?U2P;A+$p$%v z7*oR_*;yV|JMv%)Rk8Dm-NXem7UHbxAx>?&^^^zf)y--B!h$=89Ds`5^5nX?V!v>w zrCH*Fn3QR^%$beo?yv<8m%Q335nIRf?< z6HFYS4ub)0<#-WayYMq0EU%gjII{t9N{F8SdEO8xD(w17!#T{)0_Z zk85#9BY{CYE->!5{aiwyaUYFocwSTSHHoZYIFxI2#4-)Vf&5)dlT<@Q2^A5&` zW44BlsvJ{md>RXc8z98Cgylo=#ie z;WAAjh<^$O@lQJ24U0D12cmEl!j4`#Db}UqLX#apSKO3d(K3&WXUdbE*of?HkSAc+ z5}w6OB)dZ}p&7MDoWeO!rxIhi&s=JO)>=5Ej|ooMK)IJuC*v%rHYmU^0o5oKB7`&m zAu9fk)b(Lzu2+i-9d5Lc)1zkhn32Y%Ii<|3@P=detDfX(3Ay{*vvF^I z#EYV*z-}C*vH5scL>jdRB`F(W_zKWsrA!`Lu@@vRO1Z+t%|D0prky%KQF*G~%R2-y z1Q8VW`;75O9}GJV)=&5>`koQxwlS6v+!>3I-VFZ z8?kq7B(tO+D~f8TI~hl{EX9~-<&E$r-j8!vyF3v)IBV>0*b4pMxDm6K1*g9&fyA8#V#7@Z13HSz%O5m$?GFW85!yN+Lm1b9(w%OBF>{unS{ow zBG1l#O0%54K==r5O^2ZJp5bhd)r-l~Km+19hZY`LF511VwvC-|Y9FqceCJ|!RK!%Y zyP9dt{n6bUHMej_`P1ot6$7A`^BMd2tAPe$d-u!fKjrq6o-W(aqs8Ae5=0*-(+ACg_L886K3jqtO625^navUw>;vz6V~65iL*Sp`SEq|8l@*?`T{UN?uVeWbF?Z ztcL_iwrU-wy+9N54sUG)gvq|RonOq!lV&{>X)mjR(x>PWP^Abcv;Y@3LtZlAET36e ztmUrx-vH9@^28!L2L{!-fz^))hoqU+Jd`mCr_bN)(<+MI|}-TXa^IgmHOyDs6!N0{MkF`ds9dZdmz)eR_bPb!Yb#Xz-3JeaR= z#hGq%DuFc5uhC6x2)BxJWfn&$zu^snV-f=sWPv2g{#Q;r4&_o<9;^q%O$>6CvePSH zB_nQd<)Y1~u70kuV&hZttVtNldcU?7fx*-_C4CGto>;QMFcAX|$hSAPRyWVE^)H|o zJLhYCAH8VrYys;bzJDTCA(6PysN*7|A6>OPY%2{OpJ32&44Ie2e49eQ%fQ84%EydC#yS)6cw7i{-hIDYPtH4vJOq7+@S)S)`?J0 z8Lj95=7$2MwwHEj9&SC{%To%r(#%Vilwbt!cZVqE^`f++W?1>Q-`S$O73?_zySwC6 zC-%$M-e$Bk`(LV84e%W>14OOtp?XH~q5`a0N1BS2KoFu-&+U4;(HeqI&xi}F!V%pX zi?@HW`)hdiOJcbVqoc>F0Z(5KW~&swdqXgQpf$a7es|%R72*zfpJ9Iv^6oc2=TKY| z;#X++qMV9r$TB~X6|yhP-zQ~ly{jqN?kh|8YLc()h7CrBUznAmqCT ze-vSJxzEU9_{TOZ;@sV8>l@Ui)rIOAKhmG4?^H2YlqEhAx$<6L#{(|4S|c1&g$hSa zB&*8;hz2ekR*;Ruw77-u+L+Gv!+^^{MTh(~!!t*wJd0U=dt?YY5Nn-`2Rz6@y6l`S zYbJDmVuP|OSs^|x&GE9E6eX$JBt!&bXzEt?&vDQx9yZN{)FAi8Ymwc-fGd& z2I%kYz9Sd*a3RN27lSXzZZE+uuTZRa;K7>n{li|wwdVJjJaBNPk znvP+C>+Y^FkQW!=*4ODehiZ?giOv+NeE8pG@Vr9Qi=A&U_5dCAzU)SHm!geiGQE(O zB(aW<2}-n6G)&GFv$%J(+j)K4#D||pC&Mj2cCH=Laz@(KV%$?sk=9^b^@ZPktGd4` z`A2yrow%q>PQm|qt`9#$u%3~o<45B-O<@!!*<}xNB_b!+WoqMp;sftvJm`ct7^?CtmQ5@jC(JKF5b(L23G{8gmH0GAO^TPy&Jm#Q>;1*w_j{gs}|!4 z7P?J3R&0@yNDn+a(o(W1?~uqH>lH7P^BUJ3S^<-6_axJ@vp=%?9!==#nKi(eo;)#< zQt`4nG9mxjXv5*Mnb5|y6rl2xb7>$^^(Xx@#x2M=2>$*eeX~rGgVy1(Uvh1xE;vFA zCl2}b881L|C^WF9BNteLg~*X8It(ry$Z^xaMjy&XIPW64Kq~jYll!l@qj`z}j{F)T zvah8E;o)C$(>_`x#eacQ$mnXU_rgQRc#ztGeQhf4OPinq&>sXh&V4hWy%Mk=w1pPp zLb!`*p}5#63)w~Hu>=iWwoaxIYy2XLljVRVWw|DQ+CMxN37%(M9#3Q|N9o!F>J?QU z^jF%#lo47)(Km&Y#j2-n%JrrbC-oh1h@MgPM>XIHh=Tu&yTmF~AxtnGqWD17tCNHs zEK+Wo^Sr9S1_e}LjTKB)>$zM`Q;4ivuYI;<-*)NKd#u$&IbQ+WCl|I(5ym3BRUM#! zsI#%b>^S-$N_m>* zP%%`55XqJP=b6K{r2D^*HO`&qo68=53P*~+bp`#OcokUA1r*=wa)aM4r?Rm*c_kXG z-u?0pdol@|;12!mlu9v?3x)jn900*3!xVeu-qA3e{IY0~0#ivl!AlKzmjTm8y-7A) zn}3b_$DWp#&gaxcasDYYd|i|qg}wT=wy!!aUNRqY9D{NM+uJc~&A)oYyA1@cbi5D}WtZB3(V-9{Jk!g#hhgUt1cD z8hPPvLlh9+(!hM4?3;d`CkhiyOFC& zQ=#$ZY!wb}r&gx>&~+CzsMwd`tqjhp#y#58`2o8A0g84bxTR{mT23)fB*Wm?JWT&& z_Vckbc%LzTvgtjTrMM;RQNTflryGO)8qrUf3VK*g6O_D?f1N=%l*U6CSaeo&(0P(S zqFwl76(d-5C2vg-#$j%oWt^nuQ-0$>;hc`_n?b4xus4532coe2SaHy@MAVI%qYRHU zs%Z#4QTG-cmk}CF4Y9}+CNM16qf2U7k&$HxxAU_7UBuff-LkEvJ;}4sG48G3Y_!}Q zg?3MeKxX2Sc1v^|w*~0(wyJqet z9kAv}clR=@qnQv|GwLQ=g(u*ox>bhN4#=nKj^|PN@E`ZcVbDhZY`?Uf5fxhorMvjhgS>&$|%Ff#eaWX zKx8m%=%;}qDEKF4x2x@dus+2`m!V>!bSvdW>kv;kGCDs<&C<%VS14-WThw(G_4g?v zTL@RC1>21w%Fy1#2Ky=+T9NH)od|1OuBp7nHZw9)*oCTFBZsdtLb#=$u?@b`7z_3xUGv4?0$o;{#3UO+^9|6!jOiKA@E9>Op{wx4U=`Ya(MB;P&L#T zeMWUdCC+frZEf&gu?FDU3VUX)(+H>2VoMH{ez}lC?a@>i!3OXpV0Ihw_&u~Lx&Bk( z)(ZVrt@CHIp0keh`BHMhmIgy6;m@9SDzk$!HL7qngG-2zok!u1S=wJqVcALrvz5`V zWIB}Qmzc&7dA{DPB?OlDpufyum<0bqk=kOT{944}P{sYvX#-#!A3h$O>D={}E$mxK zAA{_Qs7Bj`ljG|9PZ9hE{5FF)PJW8hx0E|GZe@{4`P-H;opjXEk`}$KU1e`$cln_D zgb48WTtJ3lP{hwsGPxQAsUZHhPu}qPaTrf*qpd6YO;}R0jn&sbFlPM;al%VW^{Tlx z&oz*U7B}DL0rcpsjBt5={Q;Yk+A%sIX@*KK0FY53d?J{ zzY$z{6lu}}h=2LWsG}s%*>5AA#T`nfvGmJcyERV>0jYp%vOVnasYr?mA7r!gbS zMAfS2Lq8s}$!?qR_A$VMF!r+wt686cGehg6*#;=!Vd?u7{vkH`9%RFo>3~$M=itZb z@mUR$(cGeOlEtg4Z-vcow?p!AuDoB%l*VR>DRHJx7|0WzJ?Un0mPBLjLQ`?Nulv7y_BVn5uy&M*m?W_I-D_1V^pxVJ8U1~vI>!!WmxodJNIP!3XId7Arz((*Uc=4@ zUX+3UkT98L|9D7j4VCQMPw^KlYOgszHHrBER~QEqr;WT+sS1Cjn%Mk~0KZwIe zERv~1blUQj6R6k_=s`JJDx*5Jj%EUn>ZF~kyyik#YIkW+j=XCN4q!=ZDV;&iLXNZ& zf19&?9p1i^VvhNiLkE0gde=crbN0L>j4gDmke{WkihM#!#{#`Yah?;ARX{A!$mE)3 zqCX)PAwSgjtKopH{r8&KE5j0mA`BaBbMUMN<6RF-M%J@Ggiv^N5-D=1X8SSipgRGq zQa#z@cnBI}oH4x~4WNr^IZo%jbKeHu&^nehp=RIdNtZ!HT>3r@VBWuQhO4O_+)HM2 zAh!@)@GPmyv!YWU*Y@PCWN*;aEt_<@{Fg{cmz&yfXoWiJdcj`z-G)Y5V3y%lA$f$S zVsXG`%SGT&>|N(a>@9;d&u>Gq>&z;+T8j=nr-1gf<0DJ$9l#g=_%pGdQNgiihGR0t z&rD;K+fQChDjYp>4t5q$DlGvO_v(Gng3D<*MtwD-xtw75dlDUG>6@0*zoERW_4YRI z+9<7x_(UrhFEC=RvyR2yW1ao93BS|Ts;o#-A}(xxVrpc8V`}l@vtvUEoh^9>4&w+i z#pf1eUH`~KKmg!o4<(f#x8?n&F*vFzp+j|FX-YgejP9S z>r9U*FxQhkw_JuP$!Ed8w#tyxKf%tXxNYy~%`=f*lNnrgmbXoFr59N@>%qi7(sfO% z&4Wzl6kgbP%pY5j{#i%TUJ)!+VJVi+XJ*ph3_3#tg$-a|W6!2_Ay3mCF|a=vBRa6y z^9^B~p7XP*+R;*q4M%)s1fN`vI7Ojz-zkC%?#L-(i!OfMrUBX~=mIWWQ)(kz`7k3b zR`)QYflPgP`X`NgO$6#uq2gSb`=;@OIOsNdMO0gdRG#fr zY0b;BxG|v6z2O^#U+8@hL ztR(g;yO5i-A6aIo)tC-<87{(~XBghhdc!5Fk?qQE`PjeQTijX> zoL@Uz%&4X?2S$+hN7bCy@Xz6=DFE@pm0D- z#c4>B0SW_ExG~>r!rOb~$sB&uRgu!L^wbEZRG+;mc)qfMeFGn#wgZT4as@^8xlh=G zzcMEiY77YEe%@I=57z!l6piPr1=_sN)jpuo3kxm5F3C1_3u#NWZC2S^O_$yXESU>u zQ0jn&9~-__OH|ey;%pcO-AklpTl*t{o?AjdsVpV z`l5FmxLO^I77TtF2-ED~51gJgMA@I9)cdnx#(V;Cfh5_qRk4MLr$+_yrV9nDDRdbr_kTRvFp+f*QAODTV%4^N! zO-7CzEXF>AHv~`yc!-Ges&c%27H`k)^_q!HUb@U*B_h}8yd=-+A%cE@N!Kf&`8MX2 ze_G;(?1@^oYg=lT)G6g7HZlkBlM->(q>Pl}h?XN-GX;`(k5vdDnOAo!a2#SDMnbY} z1ym1IendNE9_8XZ8cZ-(nXnvsED_e%js6XiOdP=|=6hd*wV%>2f(c;VKJYt`Wtt2 zy?#k4*_%ek1bG}Q6>0W#Oje(difN5q(wIFBGhN$KFj>4xW1V+Ba3so+C@a6P{H`s# zgO%RfcpZGcA$jZmH_EQ^Pd=fW@{zTes7?8|@ed*5z9>>r(Pe&Fxu`-@xl@#OlC{}IDp zzo%kL$nBl>g^5pZPU*Q&fb>Gm^qa&|scg+#+gq>RzTSGXweu!d0WzW1EVi?$5OxQY za71{-74~=+z)-M$7u?RF4VQY8lV0sg*+9T%G+nRE4s+IbwBJCN;NFf9Pvz?TNyk z+6`dIv@^!SH${Wq+k$a$G46x1$un4V=Sxh=njdFPrl!Oh3Iph&0~kUNi)lPx=CK}m zqQFu-IQJ?c#ue|94{phs@68V0)`DD`tFi}J?aZ}kzrFppZb@tn)h+GXnSHiortk&C z4|Hj5ob~R3;L^tWOc#aZe{j#EXighx1BxO{#LjjN0{Z?VY1AG7<;Kwl^Q0AX7QHZi z9LIZ3U`=e{d!m3wFW#NqcG+IUT^C1r=QBa3jK6Gy%)Yw^uSb-T&D)91dqL2-uF~X8 zJ6AuMXWVDVqt{5{mX1xVz72I_eWr7Y3OG6sXOs2k%xjZ2)Pj?le|~KZ4?3`F-lsp)cXMW zM@-Bk`PnTs2D$oGLV5m!TC`jmaBIGhn}qrErst>l@qWpQX}UKyX8H#udc;Gd==Kqv zpWW3oxqQ0rhLJ8>f7vZ}hw2LWx-X~Xc1mui_(ZuO&nb zQ~#1=Gn{2Bzho#-dWN`hObK^4@Er-9sc%TnLRsICduNqEe>Y+b5m9tUlzUf&GfAEu z6Cd4b6!tkpDZo1jC`ak9F$@AkM(Go!89s;v9S)Oc-;^_$>Lk4rr<(p|+{EM&(gpIB zlJ>PzSiMxMnp+E-8o9}}u23-%cDMM| z4zMYzcZk*Xf2ZtLvvLZoS?Tt5<1J)ev$SLFYvy-4s4^5OQE#JT} z4`?yN^vD)~NQ`eckEBb8cpbPU-R@KU!S@_b{>@tQ{bZ?6sGqrMRCVhG(FpM!G zCYhK~hPHAfR2qa>X~kXkJx8NvXWz^0?{f0J{7V}h)Cs;ewm48I!Y+Pm%p$ym6b&-5QJLcUS>m@)AG1?*iU*|FEL>!XpbNb)ynfyk=j-h3{wa{cH#S5Wx;;VR2_AW(a zS>~zAxsG_X@R3XRYgu2AduOAcjB`?$oO{$q3%plha+I~rvX_jhb-p|^{FdTMb1F5x zHY`jv$N?nndb|uoXt|f9)6xzf7f7$`|C1pM)*VH>x2f&gvo6fB0vMdXj`iG|p z#1Q9jg!%w-9!)SA0W81`K03hW+X)q50);nL#pPqg49(}sXC4d! z#K4V8j4miZgh$Nek3qN46T#GUfAx2SxVj6U`4DuAyhtElPx};n{BnMw{Wf$9730Dj zpuZy+$j*}74|1OzV1MnBe8Xa_b>f(tmIhRe3uBNIOBo(v0)u2g6F8Mif*=EsUlJa9 z9^!l$1;I2KXfn}#a5KiLqvSFFZZgq9n7qhe;CV(csN8% zQqP0qL%H-*DTKd=Tql0zYByYxv>3-D0wrMSgFz%rGeH2T7$c_F2?@lwUO?IXGfpGs zq2GPP1tv-p*1sf#s`U99<@5m(-r92~CEYR5Xhdg*BF`3kD*0``EqP=lsX!db6AA%G z!SJOnGmx9YGi?|ED+zAWf7%*27Mez~3G%^U3Lr>Cdk7@^_rNoK5MqR_wssT$xGvDoE}a^6^?;DqGC*ch&t=Lck0iDr3O>ORK;Pij*x5_yUJ$re_~=bcE2p9+!Ob`5LizTwt9b zKl4K06hj0m2ZHp`1&$~G3=Ja^x2&Q^=&#U`H{L1sgekdTPy>0lCG5AvJBjPciPjIJ z*jlu+p8Tgb(0>@RQ5uW=JQ_$CWPZ17uF$uTn$M6iR%Xx+!bj*Sv zc~|Q^|C)`pt`_smZksFRMlJSJ%D60-_ltF!i@OxayZ1WSjis$vFuwbD*z zU{r@=6VFuJQ;=Z8cG}H6lxy8>g8EwL_Nc&??W136klD6g29M4k8qE=7M~oLqjE$t- z@)WN&5r1DbbIRK$xAJoYnKzbXrISS^soue;qP)oA0Iw-0QWcD$55jFQpfpfHYWe7d z(yJ)6GPh($l64)IO*U9wl4?p(&A|YAS0D<3pdgS`OoyCFf~{*if(}5FT4yqmXRyi^ z>LDEJ3qP`wF<;z_5ks*BC)Sx?l1uXG^ToSepnq&MHdYv|zAsy0E(rw5oFxGP%PqcC z&y$jC9}8BIjJo}j92_44F^0q#QZgn5Gb6uw*#Au{$orW_&&(XCM&-tUy8I>43dGon z4#lE&{Gc@6wL3GYOd>9_29@%Z)Y?bgPZ$LB#zb)Q|4fYxva+HEYoKg^ z(SN%~*(VAOToTnZ1&ZD{Lya@kI75vy)GXq1OrGc7ode_c*+W42(?S`{yg&^Kl^IxfX#6sETdei+GeSc>ub0w>zY?g234kFm(ZUd%0Sqf~W;aOh! zE!IqgFC88f3WI936P<~`pac;l>pa!`ST4BDLvybCbIYzimu1XSTh1zNJGsDBo!|SO5Z6i=y;staZiZHH3hAhD`dsb>ZC8(oG=Sd0aHl! zl8t;3v)Xe0mu$2GO&nf~@;M@k0;b?t7piLtrd1mDuN*~s;1t2nN*+FWJUk+nG!__&cW)Ia$+oZyG zw_L&oj2+?NtMYRaO$>CY4DU1eWqI!+&+A&%HJI)B7`5V1HMMN1%( zcHNeQ7f02he*Bdks+#HRP_sO19U6&O^J(*+?Iy>+m|Y(P7!e^KMIDoURJAl`Xi_DB z8#5KXLClT|Rgc3WCSFy|e1dN%An;&%)k(9I_-ign;edRO01?5a@fD_| zApr*gikrJ6X-iL1;eX=TU<*BX@ofTs53tZd)j5cWz(FpQIb;l9Bc6%J0f`SrNJpel z1Tjsh;ZZWgJ|Z3hJ_^Nn&Bgn0@jhIY>;NT*O@2y#jmr^9g=YRU4nm@BqvgA@W ztXTfw%{O(1`S_TH6q9m>8*37ws#}|vbUL+JBqDCpf`3S;qKY8!m_%?%7`)^q^7~+d zAW0IqNjgEvZvvoe#N_$80`LY-!I04jz`{9PJ%k4JQxuea5zWI4aZN;kAb8~G@@<_- zcuKsFkagzUrtVC(J@X`{4K*J_Q?B9+D(2j9^afLtSbpu2eBnm_zh42A#(Z)gSe8j%_buTK}o-vqt%?rbC@= zz^7cGNxM^AsW7RZq}(eTg^3Eyrj2VqaV{HH<)L&fe&B6p&QnU{U`uYx+ zN`EGlP4Revy(@jHzMdVKt7v5fuB0XbQt9ZD>uTRHIiL~ISs-Ur-bc`*BK1&i_>!Jh7GARidMe3=1s#3Y;phOd~Y;j zXk=39Unsh>+3y`f0c+Of0#6VZa1!d9uzzY>o#T;h^&`q;aRLLS+BKmn5D_LpSDcG< zKj7*2ngp513$OAITk_RhqqVnH9}5(3r}!`Or1XHdnZUw^X>&_h?TN0bqSS+K%(y^E zy1}WrMt??4KD0$(iR^)U4AWm?0xbrevWSiYPZ>_P!565N4MgpLig|l8o?*(ZZ+}MT zNo}|46%4N3;42t#mj=3qI7k4)6XyUaj=R4jS#`)Vh{ER3FwH8Dt2nZlg+Ko28-PnGJ))BF9^Dt2eJ)RDh+1}+=UkErR{7% z5Jqf-lu5wI)E@N4s1GLaO73|qKz~R%$Adt{KTxVeLA9qa2O&e(m_|I9=1u=|YZaf| z-r8!gI_dSAZ(}XQ@|10=S)r4Z1QDsTKUHq9feOcgeHc3+YeN)(BZ!^N$=RG%=D=^) z-7B0D@2fch7b;p!r&FJA!v2==fYQLmCRJ*`nI7beXLj<<7%5Nu-0cUGz<(BVO$z{J zfKcJwKOVsS!+2spgnRbVp4=L1@i!O*NbJJ^60g0*I9J>97VvZM%vdGx=$MFE=eF2I z{gKU;%-NL(=9w`l=dSj~p|)b%^B6%t3DPxQDF0r%8@p9!C%ZN^L@0UbuACN+*{d3Z zr{0@~Xb7V~)P*;&J8k(!s()QIT87=IX}IZ_4E88O<LD-3;HQ12oy=c84vjMZ@njCZrz_9!yEFu}t2~nQG3$irf`B0p zsh~3uB>XkjL3=^utA95chG?#Os>&Rw#4;wL$)XRCV<;{d;KPxDw~ac96U@630a>+L z|M2}srxR})Y&z?*2naA2Tt&pm=o`>n{I6;UmcF7iPgNym??Ne3{piOY9p9~dm@<1Y z!>6=^#G~Gx+v|-~ZkjDff1v4wGCOu-PrChCynpEvx-stmTwe#M7QoW< zm>Se^Jd$HuyCi$p5CPDj`-21Ie(m<*Z8t^cVc8(XhV~Xe#6vE z%^b2hsxnfN}8D_ckwR_Ezu_qm%6KPn38j zlj>I$220G=+}qW+cGVJ8g^H}qFgqB8 zJ{n!KEq}c2QI2lJc*;kwZm({`zlUV=X6XI1Gr8UzPw17n8ThwX@OGQ`eznbTroOuE z4W!I>cc^OS&oUBYGNEmIis#;@AG6q&>Ehv}>pdF1>DqpY*?+C8#hd-^cua#~GDkP- zPH(YL%iyk0;5hetDaf(BqW*ByB(pS*200qkk$(ndZxCkp{?Y>TRSl)PU6(>xgVy+J z!F;Zug;weyyI!8IdhT*3vvg>M8p++L)O!KOYHl4X)kM$nkw<;)F$%#A3WAsBf{_{b z!qED?hjVpG={r1Wb;)AQW<(4R+owOwR&KAJQ|W$6nwD11K}pxy6hDopPE`N`Ugex! z`%D04^NFb2iFAUr9?!TyRC*UBm69t>Dg$}y-|bVxRX(6GypFFyJ{1q7<=GJgZ dKj&4pC~~W^&;I!J{{jF2|Nnidmiteo1OSlMb3Xt8 diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index fd98bad0d831c578aaee8647650fc35b33430b48..b653c2e7f7795f541bfd2b3aeccecc93b9f77a89 100644 GIT binary patch delta 8034 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 diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index c6d1eb204fede74e7b3e5a0c3907fac345db636f..4b2eb6a5a4f3c66cb107472c37695e8eda692360 100644 GIT binary patch delta 2408 zcmV-u377WK6V4Nme}C}Gzz(Q6w!=@fH(Hn_=`^LpRh-)Q0Q=OrR?2X$(CT9wsRAU(YYaq9cq~e0ipm7bR;^GRX z268*-`z@K!##iPN%YtBlYx)xmW1Cj-C+Yu&vA%Y-~rxD5Ug2GBX1Zs zuuBASf-Ufb-p0w|+~tz`TNYkUY_r==?Q3dh5_9Vx<{TWN&lsMFa&g7h!A8^ zewE$S%q7=YWgW47X}3DP+l-Z!Tt+WfwX~rqrd9cxq8TW}(XH+zJzMFqL*BMcR3@ie z9g5h1z-Bya2edNd*4yCEdB$JSA6&^wgu=WmB)U7TgF~K1!GP_)fgQ?XzrxOejIWH? z+Ka&emGffACy>tP1mn{H)fHLPL zkKd;$hZ8sEF=*HGYZ%}I#m&VrQS-357i)fR`rH1ATTlTmM(h^DiZv*Fg`hA`JP(JM z_5hdCs4uNZg`^HkAU0()9Aio<;kWDu!===?7+(&5fXYnOFs_Dirv~HN{Twe&8L{b4 z2!GF_q&rU#m(Bk~?N@}&DtYJa*&{byyXT`&p<{5*TT)gnS5snZzf7kRRI$DF6Dt)r zrefx&_H4ChJ2lVN>1BJi5u5Uo{!Ei(rzW=V1L&T+{8KpELGlz?{5+$$iB3h7_n%y< z^;8-8h@7f6FB4fLQ<31c+l$@y5ahfxa%KRAVEB6 zInoWo@mCrA?}Pt8ZGcxLHGaeJG7|U@^RF^^UiXPoG^?!@l$bf-zKGU-2z##WQi{=S zJCfMQB2y&xwje=pGPNn`UUWOzrsNZUfa?H9l(Z-@%KfChD&XWK4>d?WDsOxYAbbGvaYxCv5TgOq`A zmC}m@akheZ9<>@@zwX9Usll?+xz3OT-m6g};BWv8JF7dc7$E3kn`_{t=Z z@--M+)PHx{K0SRMk{lJlI);#>&fC{#8mVFQayU% z^F96(1i{TR_hM^`A+=-${C}8S%64g{o~Oo zq^aCYUhX{O+fasbpD3t~_v(1>C4<^`Irq6XcrNX}i-Out`Qi%Q8p6mgp86#m+NpDx z$EG~TfIZVv_VVyp?TBhebaIX;=MJ+r=wkuZ6D%9zz2sQ7!kvmPD#27dTT*+fqtLEn z@Kh(CC8;w9wU4iT{C_L*@xSL(&Lliym3VVQTrK3>xZ~0~r1+{@DoXVc2e>Aj+dHbd5`#Qb*|qM593t)|Qh#%Z2*A4WU zE2QQ`|3xK|pcG}Z8|IJ&Qsf>GK~s1{5=_o4i4;fLh>{smpnoVL?~xW%%d_`bNA~x; zuC6ZB`q=Gv^6qH`2<*LO`A`0o75OA}exM;Jo9&YP)L8lAzqeq)Pi7Q*e^~tG0{eVl z*Xt9-oUHbrM1S621_rC77{(}bMG%Ost(f$u37$`XRveRK9$pkv{1tz#UGt&UH2v_Y z*{MbIS46X$lZ?@468PH+k{J;0RWR2>)^hnOMC!Som$cepz>cuLb_J~ndeSJ;zErI`EC>Svdo_2iUBlBkX1v07C7*eZ3 z#yq)(`gwsmbzbOII4QY3;5RUOt?s*hdihl%qdLHzd=xEyv#~_v^KuWL>U60m4Bc(TB%7p_Knk*1O{|>$*Wgvov+yWE5 zd7M*ojwrLJUZS4E@oYs+ef8WW<~>;JS(FdH39}GEpLDM|k@H4UaQ5>sK>fb&`bJZI zqbb0G{hZ8XsLLgBU`Ul6*R0LM^EhlX#z9^um0`EAP5Xg-Ubo%tysPZ>j#YeevWeda zRsZrRsFDJ-rppweXEQT#(rn3D_dpYyoA(lVOi>%DIS4>R0Aj(t7Kwz%n16@n7lrNB arAprR@oIIu`fmUL0RR8Kc1!k#asU8O9K=2V delta 2411 zcmV-x36%EE6VVfpe}B$}*}*FVJD}#=l6dfai5YP;=^xYvlT+4sZ&_msCSU_wAWcDC z6%28AcQ@lVZ0a!+y^-j*Z(Q7ixK_e5)ftM&-ncDfa;D%(HHN{z26Ed-DlW(j8rNVd zF0No|Ah(0Q-;xP!d}S`NEC>d;ra!?zZWrZU>8;1QB#NA&H-Gvkoe~ooLt@*bO9O!r zT%4ih4ZBeSlqVRHjS*8I7_l2MRyAvy5j~+E`s{|SZrI)39X7D^9EXSn9^lOc!J73n z@`hmpyF?Ht*aA=JZJaF5T`sA=W#Q$-HoNWAzNU62F}MC<&cPx2oZ*Q$t_{J6qf6cN zi82s)&~CL_27mtSITQWs_mzRig7fL03m5R<-RjoB#Ik(0h&>kE1)-=OXG&}d26kgj z(a0qTLMAqX$O1+Ttb7Kd->VIayZf%zEqw9=Oofw+Dlx$KXoTC9fd%~KQ2`bnDB*!V z3|D|jly31Cw=y=T)k&RJj>Hx^Gv?X$t%0e6P$*I>NPo^1>=mLC5wx|)?-9+dKHI2` z2tgL*SJ_R?Tyl+7))Cv6cB|97%~)BNIOJ&*4A|})*r6=;E9@M| z_{xZ_{eSo@Rb|tYZqu3)IIc@>X6*C_s^;DV32?XqWK(vJ4eSXU5Aa+mR}PxZnct;h za;G^B-Tb*LxaO;AYsk=?*nHA-h*Th&#HCGF@TbLpX22RV{(m347p<0FQyMJ%gOQ01 zR!OW7Qe{AeGxTP{xxLGSZwAPA*d;u3mbPjZQh!Sd8+U7^KHHcz({w=COBaB5*#htf zD05!&_2nzGW z^Kgi14{#}s`qGM2Nb0ZzVpBH5F{Y#ve#?F^TuP0L@#XLbsLWIi<7yapYA~+d&++1v z5r3Qhgzzj%y7L5a+5At`enr@jBsGbR2fdD=8?GOTyZ&(n z62ya+Bi%3@f0e=iKKTFB26$Cc<2MX1BY_Vw|0;v$b)P6jv)WogiJ1fLi)ihKu; zutEHguxkhrR|+QTi<+hEtAXOCaNS3465HoJ>*_b4vw5MU!5&iqN2?Aww;RWTn;_*i zNErxMDZNM#XDf*3QLFLw>ux-i8hD_vrsXdHeDR7UakmEZ@(bH~Mb{e{Hk(0E)0vm{g zuS^0dUxTql{dcGB)6>@>$x#8UV+cv=ynP+_)N#*A$36X=y!{pU#T#XPntvwBb7f>g zL%Tn^JPX`YzIO@-(uCO#DGWtW6Ma#04bb-Fq2gQ?)YTjfEvIycmEV%mnq}!edv>}g zGi;3Iq}D*uwqLkvyv@l&>!@_d9fzv4^gOR0G0JjyFAz#%U-_X411Z-}==eHAOhq3c z)uR_a-{U_)5Zo+tFSe!_Qh!TUz>mqLY?o&0d1@Sa6b|bcaAaD1Pw;V_Tt$4*YfaaK zZkd#W2L=92!!V^6Zi;U)nL;BAn4(h}m*h=G?|%>?#CGmthtbl8x1iNprx*rH+|&k> zOc$NWPhtY;K1yreUvx>guO?l2503kTKmFx;3+}i-Ce9QV({67{yMNxI?|IPcJoEyH zz0dJVn##@O<<2v{4P_|ziGu2Qua5U#GN^r*bDwL2=hE)GD5&j}FRsw7A&mUusb9jO zojQkkY|3*C*fT9MhuVGda!MeYF+G=)bb!Q{-6NO7c%D47uj`iCO&9%(_fJbRCI zWPi`=>gqzRkKKMJ@19nGz}{Py|Kv|ukxx?R2O5I1*)GXXjg>F{dkYr)WJa;~hs9qm zu+R5(y*^RQ$$x79N#y-yV6aMxVT>|Y1cBJvib;Q(;Q91t#W6YN;YBgUU-8%4H6L0{ z(+{7Tomw=1MKrrP$rybmfxoRFnE~Nm1#>-QEtjuCE_*q_Sac?3pT1txWd~#qalfYz z{#N?b%hj$hEk1g-a7I1Q`Hk0VbpZtr7XNbiwS)20E`ROrUnC_H$-0)DNZbcYzv9m& zN^im@JoY*Ub~2@XE09oYaS<7ppY)m56#=|lgX?iNRBn6 z77}`T34cuKrAV-+=Ru!|j<(Hk3}RUVqy!7m^=J(=QhEcXTsUB%$pR7d@8DZf1|n$4 zEiloW$2m3Uh%$@nCF(gG&sNmbSI=Ey-h;KCMfu>HFbfg%N%xu)Id3EdXFm@E)bIPQ zZ#306ngT4?&&f=Nx?B(Xlb=%#}yUJegSj8tN zoA`}T^)HWtDk(r~x=ayzHZv0^&6b>X4>Ym4c`uR26t$6>g8)PXAQs$fkw|!q`FCi3 dQP^Hxs^o1SuU5CK{{{d6|NnXC>dA_7001F;oId~n diff --git a/build/version.go b/build/version.go index 92f011424..9262af171 100644 --- a/build/version.go +++ b/build/version.go @@ -34,7 +34,7 @@ func buildType() string { } // BuildVersion is the local build version, set by build system -const BuildVersion = "1.11.0-rc2" +const BuildVersion = "1.11.0" func UserVersion() string { if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" { diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index 42f964715..b3dcebaae 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -7,7 +7,7 @@ USAGE: lotus-miner [global options] command [command options] [arguments...] VERSION: - 1.11.0-rc2 + 1.11.0 COMMANDS: init Initialize a lotus miner repo @@ -42,7 +42,7 @@ COMMANDS: GLOBAL OPTIONS: --actor value, -a value specify other actor to check state for (read only) --color (default: false) - --miner-repo value, --storagerepo value Specify miner repo path. flag(storagerepo) and env(LOTUS_STORAGE_PATH) are DEPRECATION, will REMOVE SOON (default: "~/.lotusminer") [$LOTUS_MINER_PATH, $LOTUS_STORAGE_PATH] + --miner-repo value, --storagerepo value Specify miner repo path. flag(storagerepo) and env(LOTUS_STORAGE_PATH) are DEPRECATION, will REMOVE SOON (default: "/Users/jennijuju/.lotusminer") [$LOTUS_MINER_PATH, $LOTUS_STORAGE_PATH] --help, -h show help (default: false) --version, -v print the version (default: false) ``` diff --git a/documentation/en/cli-lotus-worker.md b/documentation/en/cli-lotus-worker.md index b7e04e5f1..a983a596c 100644 --- a/documentation/en/cli-lotus-worker.md +++ b/documentation/en/cli-lotus-worker.md @@ -7,7 +7,7 @@ USAGE: lotus-worker [global options] command [command options] [arguments...] VERSION: - 1.11.0-rc2 + 1.11.0 COMMANDS: run Start lotus worker @@ -20,7 +20,7 @@ COMMANDS: GLOBAL OPTIONS: --worker-repo value, --workerrepo value Specify worker repo path. flag workerrepo and env WORKER_PATH are DEPRECATION, will REMOVE SOON (default: "~/.lotusworker") [$LOTUS_WORKER_PATH, $WORKER_PATH] - --miner-repo value, --storagerepo value Specify miner repo path. flag storagerepo and env LOTUS_STORAGE_PATH are DEPRECATION, will REMOVE SOON (default: "~/.lotusminer") [$LOTUS_MINER_PATH, $LOTUS_STORAGE_PATH] + --miner-repo value, --storagerepo value Specify miner repo path. flag storagerepo and env LOTUS_STORAGE_PATH are DEPRECATION, will REMOVE SOON (default: "/Users/jennijuju/.lotusminer") [$LOTUS_MINER_PATH, $LOTUS_STORAGE_PATH] --enable-gpu-proving enable use of GPU for mining operations (default: true) --help, -h show help (default: false) --version, -v print the version (default: false) diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index 1326c93f6..aeefd8dfa 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -7,7 +7,7 @@ USAGE: lotus [global options] command [command options] [arguments...] VERSION: - 1.11.0-rc2 + 1.11.0 COMMANDS: daemon Start a lotus daemon process From d6783736dcb119711c120033e37d4c107dcc2931 Mon Sep 17 00:00:00 2001 From: Liviu Damian Date: Thu, 22 Jul 2021 16:31:28 +0300 Subject: [PATCH 21/21] Nerpa v13 upgrade --- build/params_nerpanet.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/params_nerpanet.go b/build/params_nerpanet.go index 6663a9162..3cba64ae2 100644 --- a/build/params_nerpanet.go +++ b/build/params_nerpanet.go @@ -42,7 +42,7 @@ const UpgradeOrangeHeight = 300 const UpgradeTrustHeight = 600 const UpgradeNorwegianHeight = 201000 const UpgradeTurboHeight = 203000 -const UpgradeHyperdriveHeight = 999999999 +const UpgradeHyperdriveHeight = 379178 func init() { // Minimum block production power is set to 4 TiB