From 6ca2a148199b47d9f0eb0eb40fb4bc2a712967bd Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Tue, 22 Jun 2021 19:16:36 -0400 Subject: [PATCH 01/14] Always flush when timer goes off --- extern/storage-sealing/commit_batch.go | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/extern/storage-sealing/commit_batch.go b/extern/storage-sealing/commit_batch.go index 61553601a58..929d733062b 100644 --- a/extern/storage-sealing/commit_batch.go +++ b/extern/storage-sealing/commit_batch.go @@ -108,7 +108,7 @@ func (b *CommitBatcher) run() { } lastMsg = nil - var sendAboveMax, sendAboveMin bool + var sendAboveMax bool select { case <-b.stop: close(b.stopped) @@ -116,13 +116,13 @@ func (b *CommitBatcher) run() { case <-b.notify: sendAboveMax = true case <-b.batchWait(cfg.CommitBatchWait, cfg.CommitBatchSlack): - sendAboveMin = true + // do nothing case fr := <-b.force: // user triggered forceRes = fr } var err error - lastMsg, err = b.maybeStartBatch(sendAboveMax, sendAboveMin) + lastMsg, err = b.maybeStartBatch(sendAboveMax) if err != nil { log.Warnw("CommitBatcher processBatch error", "error", err) } @@ -170,7 +170,7 @@ func (b *CommitBatcher) batchWait(maxWait, slack time.Duration) <-chan time.Time return time.After(wait) } -func (b *CommitBatcher) maybeStartBatch(notif, after bool) ([]sealiface.CommitBatchRes, error) { +func (b *CommitBatcher) maybeStartBatch(notif bool) ([]sealiface.CommitBatchRes, error) { b.lk.Lock() defer b.lk.Unlock() @@ -188,10 +188,6 @@ func (b *CommitBatcher) maybeStartBatch(notif, after bool) ([]sealiface.CommitBa return nil, nil } - if after && total < cfg.MinCommitBatch { - return nil, nil - } - var res []sealiface.CommitBatchRes if total < cfg.MinCommitBatch || total < miner5.MinAggregatedSectors { From 93f7cbe58717f78baa75ad556e100177bf07ae0c Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Tue, 22 Jun 2021 19:30:33 -0400 Subject: [PATCH 02/14] Add a helpful comment --- extern/storage-sealing/commit_batch.go | 1 + 1 file changed, 1 insertion(+) diff --git a/extern/storage-sealing/commit_batch.go b/extern/storage-sealing/commit_batch.go index 929d733062b..3c0af1176cb 100644 --- a/extern/storage-sealing/commit_batch.go +++ b/extern/storage-sealing/commit_batch.go @@ -108,6 +108,7 @@ func (b *CommitBatcher) run() { } lastMsg = nil + // indicates whether we should only start a batch if we have reached or exceeded cfg.MaxCommitBatch var sendAboveMax bool select { case <-b.stop: From 616e5688fc4a62f3747b1983785b2844e32ba0f2 Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Wed, 23 Jun 2021 12:30:32 -0400 Subject: [PATCH 03/14] Remove MinPreCommitBatch --- extern/storage-sealing/precommit_batch.go | 12 ++++-------- extern/storage-sealing/sealiface/config.go | 1 - node/config/def.go | 2 -- node/modules/storageminer.go | 2 -- 4 files changed, 4 insertions(+), 13 deletions(-) diff --git a/extern/storage-sealing/precommit_batch.go b/extern/storage-sealing/precommit_batch.go index 9439ae14c52..d1d2f58785f 100644 --- a/extern/storage-sealing/precommit_batch.go +++ b/extern/storage-sealing/precommit_batch.go @@ -93,7 +93,7 @@ func (b *PreCommitBatcher) run() { } lastRes = nil - var sendAboveMax, sendAboveMin bool + var sendAboveMax bool select { case <-b.stop: close(b.stopped) @@ -101,13 +101,13 @@ func (b *PreCommitBatcher) run() { case <-b.notify: sendAboveMax = true case <-b.batchWait(cfg.PreCommitBatchWait, cfg.PreCommitBatchSlack): - sendAboveMin = true + // do nothing case fr := <-b.force: // user triggered forceRes = fr } var err error - lastRes, err = b.maybeStartBatch(sendAboveMax, sendAboveMin) + lastRes, err = b.maybeStartBatch(sendAboveMax) if err != nil { log.Warnw("PreCommitBatcher processBatch error", "error", err) } @@ -155,7 +155,7 @@ func (b *PreCommitBatcher) batchWait(maxWait, slack time.Duration) <-chan time.T return time.After(wait) } -func (b *PreCommitBatcher) maybeStartBatch(notif, after bool) ([]sealiface.PreCommitBatchRes, error) { +func (b *PreCommitBatcher) maybeStartBatch(notif bool) ([]sealiface.PreCommitBatchRes, error) { b.lk.Lock() defer b.lk.Unlock() @@ -173,10 +173,6 @@ func (b *PreCommitBatcher) maybeStartBatch(notif, after bool) ([]sealiface.PreCo return nil, nil } - if after && total < cfg.MinPreCommitBatch { - return nil, nil - } - // todo support multiple batches res, err := b.processBatch(cfg) if err != nil && len(res) == 0 { diff --git a/extern/storage-sealing/sealiface/config.go b/extern/storage-sealing/sealiface/config.go index 499a2befa0e..b237072d304 100644 --- a/extern/storage-sealing/sealiface/config.go +++ b/extern/storage-sealing/sealiface/config.go @@ -22,7 +22,6 @@ type Config struct { BatchPreCommits bool MaxPreCommitBatch int - MinPreCommitBatch int PreCommitBatchWait time.Duration PreCommitBatchSlack time.Duration diff --git a/node/config/def.go b/node/config/def.go index 177871cc508..d1beb843b89 100644 --- a/node/config/def.go +++ b/node/config/def.go @@ -93,7 +93,6 @@ type SealingConfig struct { BatchPreCommits bool // maximum precommit batch size - batches will be sent immediately above this size MaxPreCommitBatch int - MinPreCommitBatch int // how long to wait before submitting a batch after crossing the minimum batch size PreCommitBatchWait Duration // time buffer for forceful batch submission before sectors/deal in batch would start expiring @@ -285,7 +284,6 @@ func DefaultStorageMiner() *StorageMiner { FinalizeEarly: false, BatchPreCommits: true, - MinPreCommitBatch: 1, // we must have at least one precommit to batch MaxPreCommitBatch: miner5.PreCommitSectorBatchMaxSize, // up to 256 sectors PreCommitBatchWait: Duration(24 * time.Hour), // this should be less than 31.5 hours, which is the expiration of a precommit ticket PreCommitBatchSlack: Duration(3 * 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 diff --git a/node/modules/storageminer.go b/node/modules/storageminer.go index b7aae0f44d1..3a28d5c85a6 100644 --- a/node/modules/storageminer.go +++ b/node/modules/storageminer.go @@ -830,7 +830,6 @@ func NewSetSealConfigFunc(r repo.LockedRepo) (dtypes.SetSealingConfigFunc, error FinalizeEarly: cfg.FinalizeEarly, BatchPreCommits: cfg.BatchPreCommits, - MinPreCommitBatch: cfg.MinPreCommitBatch, MaxPreCommitBatch: cfg.MaxPreCommitBatch, PreCommitBatchWait: config.Duration(cfg.PreCommitBatchWait), PreCommitBatchSlack: config.Duration(cfg.PreCommitBatchSlack), @@ -862,7 +861,6 @@ func NewGetSealConfigFunc(r repo.LockedRepo) (dtypes.GetSealingConfigFunc, error FinalizeEarly: cfg.Sealing.FinalizeEarly, BatchPreCommits: cfg.Sealing.BatchPreCommits, - MinPreCommitBatch: cfg.Sealing.MinPreCommitBatch, MaxPreCommitBatch: cfg.Sealing.MaxPreCommitBatch, PreCommitBatchWait: time.Duration(cfg.Sealing.PreCommitBatchWait), PreCommitBatchSlack: time.Duration(cfg.Sealing.PreCommitBatchSlack), From 9521c0b773df169ab1de3bcb4d252e8f6f40aab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Wed, 23 Jun 2021 19:45:08 +0200 Subject: [PATCH 04/14] Add miner-side MaxDealStartDelay config --- node/builder.go | 2 ++ node/config/def.go | 3 +++ node/modules/dtypes/miner.go | 3 +++ node/modules/storageminer.go | 28 ++++++++++++++++++++++++++-- 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/node/builder.go b/node/builder.go index ce00fc18d9d..54e58e28af1 100644 --- a/node/builder.go +++ b/node/builder.go @@ -436,6 +436,8 @@ var MinerNode = Options( Override(new(dtypes.GetSealingConfigFunc), modules.NewGetSealConfigFunc), Override(new(dtypes.SetExpectedSealDurationFunc), modules.NewSetExpectedSealDurationFunc), Override(new(dtypes.GetExpectedSealDurationFunc), modules.NewGetExpectedSealDurationFunc), + Override(new(dtypes.SetMaxDealStartDelayFunc), modules.NewSetMaxDealStartDelayFunc), + Override(new(dtypes.GetMaxDealStartDelayFunc), modules.NewGetMaxDealStartDelayFunc), ) // Online sets up basic libp2p node diff --git a/node/config/def.go b/node/config/def.go index 407eb8ad6b7..5c2c8de03f8 100644 --- a/node/config/def.go +++ b/node/config/def.go @@ -58,6 +58,8 @@ type DealmakingConfig struct { ConsiderUnverifiedStorageDeals bool PieceCidBlocklist []cid.Cid ExpectedSealDuration Duration + // Maximum amount of time proposed deal StartEpoch can be in future + MaxDealStartDelay Duration // The amount of time to wait for more deals to arrive before // publishing PublishMsgPeriod Duration @@ -320,6 +322,7 @@ func DefaultStorageMiner() *StorageMiner { ConsiderUnverifiedStorageDeals: true, PieceCidBlocklist: []cid.Cid{}, // TODO: It'd be nice to set this based on sector size + MaxDealStartDelay: Duration(time.Hour * 24 * 14), ExpectedSealDuration: Duration(time.Hour * 24), PublishMsgPeriod: Duration(time.Hour), MaxDealsPerPublishMsg: 8, diff --git a/node/modules/dtypes/miner.go b/node/modules/dtypes/miner.go index 16af48add62..5c8abf3ff79 100644 --- a/node/modules/dtypes/miner.go +++ b/node/modules/dtypes/miner.go @@ -88,5 +88,8 @@ type SetExpectedSealDurationFunc func(time.Duration) error // too determine how long sealing is expected to take type GetExpectedSealDurationFunc func() (time.Duration, error) +type SetMaxDealStartDelayFunc func(time.Duration) error +type GetMaxDealStartDelayFunc func() (time.Duration, error) + type StorageDealFilter func(ctx context.Context, deal storagemarket.MinerDeal) (bool, string, error) type RetrievalDealFilter func(ctx context.Context, deal retrievalmarket.ProviderDealState) (bool, string, error) diff --git a/node/modules/storageminer.go b/node/modules/storageminer.go index 3a28d5c85a6..715fb9a2be0 100644 --- a/node/modules/storageminer.go +++ b/node/modules/storageminer.go @@ -59,7 +59,6 @@ import ( "github.com/filecoin-project/lotus/api/v1api" "github.com/filecoin-project/lotus/blockstore" "github.com/filecoin-project/lotus/build" - "github.com/filecoin-project/lotus/chain/actors/builtin" "github.com/filecoin-project/lotus/chain/actors/builtin/miner" "github.com/filecoin-project/lotus/chain/gen" "github.com/filecoin-project/lotus/chain/gen/slashfilter" @@ -486,6 +485,7 @@ func BasicDealFilter(user dtypes.StorageDealFilter) func(onlineOk dtypes.Conside unverifiedOk dtypes.ConsiderUnverifiedStorageDealsConfigFunc, blocklistFunc dtypes.StorageDealPieceCidBlocklistConfigFunc, expectedSealTimeFunc dtypes.GetExpectedSealDurationFunc, + startDelay dtypes.GetMaxDealStartDelayFunc, spn storagemarket.StorageProviderNode) dtypes.StorageDealFilter { return func(onlineOk dtypes.ConsiderOnlineStorageDealsConfigFunc, offlineOk dtypes.ConsiderOfflineStorageDealsConfigFunc, @@ -493,6 +493,7 @@ func BasicDealFilter(user dtypes.StorageDealFilter) func(onlineOk dtypes.Conside unverifiedOk dtypes.ConsiderUnverifiedStorageDealsConfigFunc, blocklistFunc dtypes.StorageDealPieceCidBlocklistConfigFunc, expectedSealTimeFunc dtypes.GetExpectedSealDurationFunc, + startDelay dtypes.GetMaxDealStartDelayFunc, spn storagemarket.StorageProviderNode) dtypes.StorageDealFilter { return func(ctx context.Context, deal storagemarket.MinerDeal) (bool, string, error) { @@ -564,9 +565,14 @@ func BasicDealFilter(user dtypes.StorageDealFilter) func(onlineOk dtypes.Conside return false, fmt.Sprintf("cannot seal a sector before %s", deal.Proposal.StartEpoch), nil } + sd, err := startDelay() + if err != nil { + return false, "miner error", err + } + // Reject if it's more than 7 days in the future // TODO: read from cfg - maxStartEpoch := earliest + abi.ChainEpoch(7*builtin.SecondsInDay/build.BlockDelaySecs) + maxStartEpoch := earliest + abi.ChainEpoch(uint64(sd.Seconds())/build.BlockDelaySecs) if deal.Proposal.StartEpoch > maxStartEpoch { return false, fmt.Sprintf("deal start epoch is too far in the future: %s > %s", deal.Proposal.StartEpoch, maxStartEpoch), nil } @@ -898,6 +904,24 @@ func NewGetExpectedSealDurationFunc(r repo.LockedRepo) (dtypes.GetExpectedSealDu }, nil } +func NewSetMaxDealStartDelayFunc(r repo.LockedRepo) (dtypes.SetMaxDealStartDelayFunc, error) { + return func(delay time.Duration) (err error) { + err = mutateCfg(r, func(cfg *config.StorageMiner) { + cfg.Dealmaking.MaxDealStartDelay = config.Duration(delay) + }) + return + }, nil +} + +func NewGetMaxDealStartDelayFunc(r repo.LockedRepo) (dtypes.GetMaxDealStartDelayFunc, error) { + return func() (out time.Duration, err error) { + err = readCfg(r, func(cfg *config.StorageMiner) { + out = time.Duration(cfg.Dealmaking.MaxDealStartDelay) + }) + return + }, nil +} + func readCfg(r repo.LockedRepo, accessor func(*config.StorageMiner)) error { raw, err := r.Config() if err != nil { From 63626e1d0a3f00a525f1e0359f6175b2624143e4 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Wed, 23 Jun 2021 15:02:23 -0700 Subject: [PATCH 05/14] feat(scripts): add the mkreleaselog script --- scripts/mkreleaselog | 253 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100755 scripts/mkreleaselog diff --git a/scripts/mkreleaselog b/scripts/mkreleaselog new file mode 100755 index 00000000000..c5902707501 --- /dev/null +++ b/scripts/mkreleaselog @@ -0,0 +1,253 @@ +#!/bin/zsh +set -euo pipefail +export GO111MODULE=on +export GOPATH="$(go env GOPATH)" + +alias jq="jq --unbuffered" + +AUTHORS=( + # orgs + ipfs + ipld + libp2p + multiformats + filecoin-project + ipfs-shipyard + + # Authors of personal repos used by go-ipfs that should be mentioned in the + # release notes. + whyrusleeping + Kubuxu + jbenet + Stebalien + marten-seemann + hsanjuan + lucas-clemente + warpfork +) + +[[ -n "${REPO_FILTER+x}" ]] || REPO_FILTER="github.com/(${$(printf "|%s" "${AUTHORS[@]}"):1})" + +[[ -n "${IGNORED_FILES+x}" ]] || IGNORED_FILES='^\(\.gx\|package\.json\|\.travis\.yml\|go.mod\|go\.sum|\.github|\.circleci\)$' + +NL=$'\n' + +ROOT_DIR="$(git rev-parse --show-toplevel)" + +msg() { + echo "$*" >&2 +} + +statlog() { + local module="$1" + local rpath="$GOPATH/src/$(strip_version "$module")" + local start="${2:-}" + local end="${3:-HEAD}" + local mailmap_file="$rpath/.mailmap" + if ! [[ -e "$mailmap_file" ]]; then + mailmap_file="$ROOT_DIR/.mailmap" + fi + + local stack=() + git -C "$rpath" -c mailmap.file="$mailmap_file" log --use-mailmap --shortstat --no-merges --pretty="tformat:%H%x09%aN%x09%aE" "$start..$end" | while read -r line; do + if [[ -n "$line" ]]; then + stack+=("$line") + continue + fi + + read -r changes + + changed=0 + insertions=0 + deletions=0 + while read count event; do + if [[ "$event" =~ ^file ]]; then + changed=$count + elif [[ "$event" =~ ^insertion ]]; then + insertions=$count + elif [[ "$event" =~ ^deletion ]]; then + deletions=$count + else + echo "unknown event $event" >&2 + exit 1 + fi + done<<<"${changes//,/$NL}" + + for author in "${stack[@]}"; do + IFS=$'\t' read -r hash name email <<<"$author" + jq -n \ + --arg "hash" "$hash" \ + --arg "name" "$name" \ + --arg "email" "$email" \ + --argjson "changed" "$changed" \ + --argjson "insertions" "$insertions" \ + --argjson "deletions" "$deletions" \ + '{Commit: $hash, Author: $name, Email: $email, Files: $changed, Insertions: $insertions, Deletions: $deletions}' + done + stack=() + done +} + +# Returns a stream of deps changed between $1 and $2. +dep_changes() { + { + <"$1" + <"$2" + } | jq -s 'JOIN(INDEX(.[0][]; .Path); .[1][]; .Path; {Path: .[0].Path, Old: (.[1] | del(.Path)), New: (.[0] | del(.Path))}) | select(.New.Version != .Old.Version)' +} + +# resolve_commits resolves a git ref for each version. +resolve_commits() { + jq '. + {Ref: (.Version|capture("^((?.*)\\+incompatible|v.*-(0\\.)?[0-9]{14}-(?[a-f0-9]{12})|(?v.*))$") | .ref1 // .ref2 // .ref3)}' +} + +pr_link() { + local repo="$1" + local prnum="$2" + local ghname="${repo##github.com/}" + printf -- "[%s#%s](https://%s/pull/%s)" "$ghname" "$prnum" "$repo" "$prnum" +} + +# Generate a release log for a range of commits in a single repo. +release_log() { + setopt local_options BASH_REMATCH + + local module="$1" + local start="$2" + local end="${3:-HEAD}" + local repo="$(strip_version "$1")" + local dir="$GOPATH/src/$repo" + + local commit pr + git -C "$dir" log \ + --format='tformat:%H %s' \ + --first-parent \ + "$start..$end" | + while read commit subject; do + # Skip gx-only PRs. + git -C "$dir" diff-tree --no-commit-id --name-only "$commit^" "$commit" | + grep -v "${IGNORED_FILES}" >/dev/null || continue + + if [[ "$subject" =~ '^Merge pull request #([0-9]+) from' ]]; then + local prnum="${BASH_REMATCH[2]}" + local desc="$(git -C "$dir" show --summary --format='tformat:%b' "$commit" | head -1)" + printf -- "- %s (%s)\n" "$desc" "$(pr_link "$repo" "$prnum")" + elif [[ "$subject" =~ '\(#([0-9]+)\)$' ]]; then + local prnum="${BASH_REMATCH[2]}" + printf -- "- %s (%s)\n" "$subject" "$(pr_link "$repo" "$prnum")" + else + printf -- "- %s\n" "$subject" + fi + done +} + +indent() { + sed -e 's/^/ /' +} + +mod_deps() { + go list -mod=mod -json -m all | jq 'select(.Version != null)' +} + +ensure() { + local repo="$(strip_version "$1")" + local commit="$2" + local rpath="$GOPATH/src/$repo" + if [[ ! -d "$rpath" ]]; then + msg "Cloning $repo..." + git clone "http://$repo" "$rpath" >&2 + fi + + if ! git -C "$rpath" rev-parse --verify "$commit" >/dev/null; then + msg "Fetching $repo..." + git -C "$rpath" fetch --all >&2 + fi + + git -C "$rpath" rev-parse --verify "$commit" >/dev/null || return 1 +} + +statsummary() { + jq -s 'group_by(.Author)[] | {Author: .[0].Author, Commits: (. | length), Insertions: (map(.Insertions) | add), Deletions: (map(.Deletions) | add), Files: (map(.Files) | add)}' | + jq '. + {Lines: (.Deletions + .Insertions)}' +} + +strip_version() { + local repo="$1" + if [[ "$repo" =~ '.*/v[0-9]+$' ]]; then + repo="$(dirname "$repo")" + fi + echo "$repo" +} + +recursive_release_log() { + local start="${1:-$(git tag -l | sort -V | grep -v -- '-rc' | grep 'v'| tail -n1)}" + local end="${2:-$(git rev-parse HEAD)}" + local repo_root="$(git rev-parse --show-toplevel)" + local module="$(go list -m)" + local dir="$(go list -m -f '{{.Dir}}')" + + if [[ "${GOPATH}/${module}" -ef "${dir}" ]]; then + echo "This script requires the target module and all dependencies to live in a GOPATH." + return 1 + fi + + ( + local result=0 + local workspace="$(mktemp -d)" + trap "$(printf 'rm -rf "%q"' "$workspace")" INT TERM EXIT + cd "$workspace" + + mkdir extern + ln -s "$repo_root"/extern/filecoin-ffi extern/filecoin-ffi + ln -s "$repo_root"/extern/test-vectors extern/test-vectors + + echo "Computing old deps..." >&2 + git -C "$repo_root" show "$start:go.mod" >go.mod + mod_deps | resolve_commits | jq -s > old_deps.json + + echo "Computing new deps..." >&2 + git -C "$repo_root" show "$end:go.mod" >go.mod + mod_deps | resolve_commits | jq -s > new_deps.json + + rm -f go.mod go.sum + + printf -- "Generating Changelog for %s %s..%s\n" "$module" "$start" "$end" >&2 + + printf -- "- %s:\n" "$module" + release_log "$module" "$start" "$end" | indent + + + statlog "$module" "$start" "$end" > statlog.json + + dep_changes old_deps.json new_deps.json | + jq --arg filter "$REPO_FILTER" 'select(.Path | match($filter))' | + # Compute changelogs + jq -r '"\(.Path) \(.New.Version) \(.New.Ref) \(.Old.Version) \(.Old.Ref // "")"' | + while read module new new_ref old old_ref; do + if ! ensure "$module" "$new_ref"; then + result=1 + local changelog="failed to fetch repo" + else + statlog "$module" "$old_ref" "$new_ref" >> statlog.json + local changelog="$(release_log "$module" "$old_ref" "$new_ref")" + fi + if [[ -n "$changelog" ]]; then + printf -- "- %s (%s -> %s):\n" "$module" "$old" "$new" + echo "$changelog" | indent + fi + done + + echo + echo "Contributors" + echo + + echo "| Contributor | Commits | Lines ± | Files Changed |" + echo "|-------------|---------|---------|---------------|" + statsummary Date: Wed, 23 Jun 2021 18:51:20 -0400 Subject: [PATCH 06/14] pull actor v5.0.1 --- go.mod | 2 +- go.sum | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index d3ea7c57e97..a29a108b0c5 100644 --- a/go.mod +++ b/go.mod @@ -47,7 +47,7 @@ require ( github.com/filecoin-project/specs-actors/v2 v2.3.5-0.20210114162132-5b58b773f4fb github.com/filecoin-project/specs-actors/v3 v3.1.0 github.com/filecoin-project/specs-actors/v4 v4.0.0 - github.com/filecoin-project/specs-actors/v5 v5.0.0-20210609212542-73e0409ac77c + github.com/filecoin-project/specs-actors/v5 v5.0.1 github.com/filecoin-project/specs-storage v0.1.1-0.20201105051918-5188d9774506 github.com/filecoin-project/test-vectors/schema v0.0.5 github.com/gbrlsnchs/jwt/v3 v3.0.0-beta.1 diff --git a/go.sum b/go.sum index 08d6a0689a1..89af9d973c4 100644 --- a/go.sum +++ b/go.sum @@ -318,8 +318,8 @@ github.com/filecoin-project/specs-actors/v3 v3.1.0/go.mod h1:mpynccOLlIRy0QnR008 github.com/filecoin-project/specs-actors/v4 v4.0.0 h1:vMALksY5G3J5rj3q9rbcyB+f4Tk1xrLqSgdB3jOok4s= github.com/filecoin-project/specs-actors/v4 v4.0.0/go.mod h1:TkHXf/l7Wyw4ZejyXIPS2rK8bBO0rdwhTZyQQgaglng= github.com/filecoin-project/specs-actors/v5 v5.0.0-20210512015452-4fe3889fff57/go.mod h1:283yBMMUSDB2abcjP/hhrwTkhb9h3sfM6KGrep/ZlBI= -github.com/filecoin-project/specs-actors/v5 v5.0.0-20210609212542-73e0409ac77c h1:GnDJ6q3QEm2ytTKjPFQSvczAltgCSb3j9F1FeynwvPA= -github.com/filecoin-project/specs-actors/v5 v5.0.0-20210609212542-73e0409ac77c/go.mod h1:b/btpRl84Q9SeDKlyIoORBQwe2OTmq14POrYrVvBWCM= +github.com/filecoin-project/specs-actors/v5 v5.0.1 h1:PrYm5AKdMlJ/55eRW5laWcnaX66gyyDYBWvH38kNAMo= +github.com/filecoin-project/specs-actors/v5 v5.0.1/go.mod h1:74euMDIXorusOBs/QL/LNkYsXZdDpLJwojWw6T03pdE= github.com/filecoin-project/specs-storage v0.1.1-0.20201105051918-5188d9774506 h1:Ur/l2+6qN+lQiqjozWWc5p9UDaAMDZKTlDS98oRnlIw= github.com/filecoin-project/specs-storage v0.1.1-0.20201105051918-5188d9774506/go.mod h1:nJRRM7Aa9XVvygr3W9k6xGF46RWzr2zxF/iGoAIfA/g= github.com/filecoin-project/test-vectors/schema v0.0.5 h1:w3zHQhzM4pYxJDl21avXjOKBLF8egrvwUwjpT8TquDg= @@ -684,6 +684,7 @@ github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Ax github.com/ipfs/go-merkledag v0.0.3/go.mod h1:Oc5kIXLHokkE1hWGMBHw+oxehkAaTOqtEb7Zbh6BhLA= github.com/ipfs/go-merkledag v0.0.6/go.mod h1:QYPdnlvkOg7GnQRofu9XZimC5ZW5Wi3bKys/4GQQfto= github.com/ipfs/go-merkledag v0.2.3/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= +github.com/ipfs/go-merkledag v0.2.4/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= github.com/ipfs/go-merkledag v0.3.1/go.mod h1:fvkZNNZixVW6cKSZ/JfLlON5OlgTXNdRLz0p6QG/I2M= github.com/ipfs/go-merkledag v0.3.2 h1:MRqj40QkrWkvPswXs4EfSslhZ4RVPRbxwX11js0t1xY= github.com/ipfs/go-merkledag v0.3.2/go.mod h1:fvkZNNZixVW6cKSZ/JfLlON5OlgTXNdRLz0p6QG/I2M= @@ -702,6 +703,7 @@ github.com/ipfs/go-peertaskqueue v0.2.0/go.mod h1:5/eNrBEbtSKWCG+kQK8K8fGNixoYUn github.com/ipfs/go-todocounter v0.0.1/go.mod h1:l5aErvQc8qKE2r7NDMjmq5UNAvuZy0rC8BHOplkWvZ4= github.com/ipfs/go-unixfs v0.0.4/go.mod h1:eIo/p9ADu/MFOuyxzwU+Th8D6xoxU//r590vUpWyfz8= github.com/ipfs/go-unixfs v0.2.1/go.mod h1:IwAAgul1UQIcNZzKPYZWOCijryFBeCV79cNubPzol+k= +github.com/ipfs/go-unixfs v0.2.2-0.20190827150610-868af2e9e5cb/go.mod h1:IwAAgul1UQIcNZzKPYZWOCijryFBeCV79cNubPzol+k= github.com/ipfs/go-unixfs v0.2.4 h1:6NwppOXefWIyysZ4LR/qUBPvXd5//8J3jiMdvpbw6Lo= github.com/ipfs/go-unixfs v0.2.4/go.mod h1:SUdisfUjNoSDzzhGVxvCL9QO/nKdwXdr+gbMUdqcbYw= github.com/ipfs/go-verifcid v0.0.1 h1:m2HI7zIuR5TFyQ1b79Da5N9dnnCP1vcu2QqawmWlK2E= @@ -712,13 +714,16 @@ github.com/ipfs/iptb v1.4.0 h1:YFYTrCkLMRwk/35IMyC6+yjoQSHTEcNcefBStLJzgvo= github.com/ipfs/iptb v1.4.0/go.mod h1:1rzHpCYtNp87/+hTxG5TfCVn/yMY3dKnLn8tBiMfdmg= github.com/ipfs/iptb-plugins v0.2.1 h1:au4HWn9/pRPbkxA08pDx2oRAs4cnbgQWgV0teYXuuGA= github.com/ipfs/iptb-plugins v0.2.1/go.mod h1:QXMbtIWZ+jRsW8a4h13qAKU7jcM7qaittO8wOsTP0Rs= +github.com/ipld/go-car v0.1.0/go.mod h1:RCWzaUh2i4mOEkB3W45Vc+9jnS/M6Qay5ooytiBHl3g= github.com/ipld/go-car v0.1.1-0.20200923150018-8cdef32e2da4/go.mod h1:xrMEcuSq+D1vEwl+YAXsg/JfA98XGpXDwnkIL4Aimqw= github.com/ipld/go-car v0.1.1-0.20201119040415-11b6074b6d4d h1:iphSzTuPqyDgH7WUVZsdqUnQNzYgIblsVr1zhVNA33U= github.com/ipld/go-car v0.1.1-0.20201119040415-11b6074b6d4d/go.mod h1:2Gys8L8MJ6zkh1gktTSXreY63t4UbyvNp5JaudTyxHQ= +github.com/ipld/go-ipld-prime v0.0.2-0.20191108012745-28a82f04c785/go.mod h1:bDDSvVz7vaK12FNvMeRYnpRFkSUPNQOiCYQezMD/P3w= github.com/ipld/go-ipld-prime v0.0.2-0.20200428162820-8b59dc292b8e/go.mod h1:uVIwe/u0H4VdKv3kaN1ck7uCb6yD9cFLS9/ELyXbsw8= github.com/ipld/go-ipld-prime v0.5.1-0.20200828233916-988837377a7f/go.mod h1:0xEgdD6MKbZ1vF0GC+YcR/C4SQCAlRuOjIJ2i0HxqzM= github.com/ipld/go-ipld-prime v0.5.1-0.20201021195245-109253e8a018 h1:RbRHv8epkmvBYA5cGfz68GUSbOgx5j/7ObLIl4Rsif0= github.com/ipld/go-ipld-prime v0.5.1-0.20201021195245-109253e8a018/go.mod h1:0xEgdD6MKbZ1vF0GC+YcR/C4SQCAlRuOjIJ2i0HxqzM= +github.com/ipld/go-ipld-prime-proto v0.0.0-20191113031812-e32bd156a1e5/go.mod h1:gcvzoEDBjwycpXt3LBE061wT9f46szXGHAmj9uoP6fU= github.com/ipld/go-ipld-prime-proto v0.0.0-20200428191222-c1ffdadc01e1/go.mod h1:OAV6xBmuTLsPZ+epzKkPB1e25FHk/vCtyatkdHcArLs= github.com/ipld/go-ipld-prime-proto v0.0.0-20200922192210-9a2bfd4440a6/go.mod h1:3pHYooM9Ea65jewRwrb2u5uHZCNkNTe9ABsVB+SrkH0= github.com/ipld/go-ipld-prime-proto v0.1.0 h1:j7gjqrfwbT4+gXpHwEx5iMssma3mnctC7YaCimsFP70= From a290982ca03e912db25ce5bc75ed5ef629624ddf Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Wed, 23 Jun 2021 16:57:34 -0400 Subject: [PATCH 07/14] Lotus version 1.10.0 --- CHANGELOG.md | 34 ++++++++++++++++++++++++++++------ build/openrpc/full.json.gz | Bin 22485 -> 22482 bytes build/openrpc/miner.json.gz | Bin 8090 -> 8086 bytes build/openrpc/worker.json.gz | Bin 2579 -> 2578 bytes build/version.go | 2 +- 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a85726f378..b2db58fecae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,10 @@ # Lotus changelog -# 1.10.0-rc6 / 2021-06-18 +# 1.10.0 / 2021-06-23 -> Note: If you are running a lotus miner, check out the doc [here](https://docs.filecoin.io/mine/lotus/miner-configuration/#precommitsectorsbatch) for new lotus miner configurations explanations of the new features! +> Note: If you are running a Lotus miner, check out the documentation[here](https://docs.filecoin.io/mine/lotus/miner-configuration/#precommitsectorsbatch) for details of the new Lotus miner config options and explanations of the new features. -This is the 6th release candidate for Lotus v1.10.0, an upcoming mandatory release of Lotus that will introduce Filecoin network v13. Use this release for syncing with the [reset calibration net](https://github.com/filecoin-project/community/discussions/74#discussioncomment-885580). In addition, included in the new network version are the following FIPs: +This is a mandatory release of Lotus that introduces Filecoin network v13, codenamed the HyperDrive upgrade. The Filecoin mainnet will upgrade at epoch 892800, which is 2021-06-30T22:00:00Z. The network upgrade introduces the following FIPs: - [FIP-0008](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0008.md): Add miner batched sector pre-commit method - [FIP-0011](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0011.md): Remove reward auction from reporting consensus faults @@ -12,11 +12,33 @@ This is the 6th release candidate for Lotus v1.10.0, an upcoming mandatory relea - [FIP-0013](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0013.md): Add ProveCommitSectorAggregated method to reduce on-chain congestion - [FIP-0015](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0015.md): Revert FIP-0009(Exempt Window PoSts from BaseFee burn) -This release candidate does not set the upgrade epochs for mainnet, but does set the upgrade epoch for the calibration network to 321519. - Note that this release is built on top of Lotus v1.9.0. Enterprising users can use the `master` branch of Lotus to get the latest functionality, including all changes in this release candidate. -A detailed changelog will be included in a later release candidate. +## Proof batching and aggregation + +FIPs [0008](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0008.md) and [0013](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0013.md) combine to allow for a significant increase in the rate of onboarding storage on the Filecoin network. It is hoped that this will lead to more useful data being stored on the network, reduced network congestion, and lower network base fee. + +### Projected state tree growth + +As a result of the accelerated onboarding of storage onto the network, it is possible + +### Hardware requirements and suggestions + +As the size of a single state tree grows, so will the size of the minimal datastore needed to sync the blockchain. The Filecoin protocol requires any node validating the chain to have the last 1800 state trees (2 * `ChainFinality`). Depending on how fast storage providers seal new sectors, this could get as large as AMOUNT in 6 months, and grow as fast as 20 GB per day. This increases the necessary hardware requirements to validate the Filecoin blockchain, but can be supported by images such as [Amazon EC2](https://aws.amazon.com/ec2/instance-explorer/?ec2-instances-cards.sort-by=item.additionalFields.category-order&ec2-instances-cards.sort-order=asc&awsf.ec2-instances-filter-category=*all&awsf.ec2-instances-filter-processors=*all&awsf.ec2-instances-filter-accelerators=*all&awsf.ec2-instances-filter-capabilities=additional-capabilities%23instance-storage&ec2-instances-cards.q=ssd&ec2-instances-cards.q_operator=AND&awsm.page-ec2-instances-cards=1) and [Google Cloud Platform](https://cloud.google.com/compute/docs/machine-types). + +### Future improvements + +Various Lotus improvements are planned moving forward to mitigate the effects of the growing state tree size. The primary improvement is the [Lotus splitstore](LINK TO DISCUSSION), which will soon be enabled by default. The feature allows for [online garbage collection](https://github.com/filecoin-project/lotus/issues/6577) for nodes that do not seek to maintain full chain and state history, thus eliminating the need for users to delete their datastores and sync from snapshots. + +Other improvements including better compressed snapshots, faster premigrations, and improved chain exports. + +## WindowPost base fee burn + +Included in the HyperDrive upgrade is [FIP-0015](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0015.md) which eliminates the special-case gas treatment of `SubmitWindowedPoSt` messages that was introduced in [FIP-0009](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0009.md). Although `SubmitWindowedPoSt` messages will be relatively cheap, thanks to the introduction of optimistic acceptance of these proofs in [FIP-0010](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0010.md), storage providers should pay attention to their `MaxWindowPoStGasFee` config option: too low and PoSts may not land on chain; too high and they may cost an exorbitant amount! + +## Changelog + +TODO # 1.9.0 / 2021-05-17 diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 5a002a26f20c4ea835f624f5545c42d8271703ef..fe80856db35425e416b8d25ce4b9c582d08d2f83 100644 GIT binary patch delta 22358 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 Hp#%O0Br!)H delta 22357 zcmV)&K#afAuL0Gs0g#1%{WbHpd;j!%QzRzT=e?aDfAe$PkTV>lEV(C@$hKBkvs6cG=+;NaC^6a=5CkIn^)Jn<6byT1t6fk%lzw_fsn)BLYTdMF5g> zTm#3WOCsOuwiCz!p#sd107HZb2pRPw5BYrs!h=BoZg3EQVL-hr5D|d`kaWK!L*&sZ z;s9Pl9Kd0KE=jL{-wPpwQ@xZCliMBJo?*!`MWnoK30DWF@bFM zfq2x%WGuH1asgCm647*uLmeV0(}|&(HiOGyVoHd z5BqET*ng=JOC4S*!K%kA`KG{Ee@V39Bf!uIF+@CnGK6VDijxM1;Ka90jA-y3G)iv0hOk0Q7x^I7dFf3A8nEEF`8FQ8v{d z48b=|d-?!^ed;3*yttWQZvrs!u{@V@jA;}I?8&#UL+D*0KN&@y`j-F_A3*R)wwgdb zS<7R8puc;+s%tiyZ4Uo}9)g1#?oYO7131_g!vViS)9?>^`)3%<=rsIeI31zcXs|WH zgJ`xLMQCgDdP`mV_==ee+8u>`j)I^9k*bH8T}d!z5Ipw#{J!BnA0e?PiC?$t9QU4k zn-ktaw*H8qkJvokp*X;tD;~GZa}MeW50NK-uR!^hueodfRIhpYz}0dpxh6K8$|p<^ z>+SSL>l>SctzN%(fxRoFM*ntpc*-apRdO%=-iH8ra&*(?@7{Mz_Gv^!Z|8k~Ugwmh zQv8iXO??UAl%5OIPd___OrD(l&+iD2C!)90TkrLIAI%TNAjU1u1r+FvQuQIr*v}Y$ z@F&DM9HTSjAsh<6Jn#na5+UxLobQgu42_{c66%FIk4-G8-2Exy0!~BCysGnbj>op$ z4=Iz)2@DiZDnaOF+k+e(BBZvgCFfiGjQe7m_4l^mnPZl@e7yheVS%RnK4;&a<U#juTIR(O|d97w*t}ASnv8X`96}jfA}PVTM%9S6JBW1U>OL9p*Q-OBC@klmc2tbB3dI$p}d~(?v0)a!0L?2-B3kLzdLV=V- zp#Ypt(IrVn)Y@nS{3r|*!to`R`h^1+a0)`oIUWW`DZ$I&fuLXluhAv(@knX5MEWfw zMyL8S;1mIlh>sY6B7HsKlys_;Xs4AI6gi9aB)e#a+Dm}92Mn#phj?Qdp_<6@j|D>OE&!o@>7PUIO;ITPs-eCH_m5?DlIt@bHBR^bhQ1K ze1k#ML1y?C+o6{u{_11;%sKbM1@3m~On-M(-Bn%ARaJ@-&5b+;)ztHo$+id0GT9L# zh~w_knCV|3hozRf3ml$HiN#LzN+C82T&7*lNH;dmv=GzIB-dbn`OzOxXY@(l+OTFR z%VpHM$*)+6xIUK`dr}AVZIg@05sGD|&Ii==w>B%A_O_=r1wUU!VA=wPps#p{A0H(0_9gKoBqOd1%8)ZUKV7*ncO2_*Px{&h`6R@CYg02Bso7cccm<$M#>SD&6fS%{_#QC>N*^TJ{n)M0p9W`M>k?JPqIBjk+F(r67F??nxK!+ao~}cKUyiQI^nl&>edB^YEpY; zux4h1wCd}BaU;_Ab9@gpwn_Y#7DJ>l7#l>I7t~D8c4##-oGn_7yCi6p#Scc5r8u?% zx$2;|B60;66O_U*UJL=|!VDns76+7|*Mh#L1Zg9_!qd|{hK~`MikK6$hD0U(wL^iL z#6I>Nl7GTTzVfD2p!~XacS`_1++ra&!&-9x%8{ji_#-eU!PZqattk1DwoI){K z0HcdZ9Ujl>_kTmPJ_t99&oqwzh@ihefus$?tcI1tNU-y8x|k%GT%s4n1v7MwnD`Zj zVK4*os47n(4hTX%@+EE^BcYVXmqeoE)Uyi`Dkg~afp(!%_hUy5e@TG;PtfE~@V}Qt zsh|OW5WBnb@&Cq;#on%Jyt{Wv!2iB}{rc7G*Z*rent#RFnSuPBMuBfW1N{C&PydD3 z+kM#w>LXr=-M!4;yDxwKzBGJa*fuM4u_P?nFR3=e0iOs)wgy*k$AgG4h(F0@xQWBt+X=h&CfBI<&(FJmF$<-Ow&@maG5VEafhww%dwaLEDlw23 zrG#%VXsbwl2J~fPjtTM%5}!^9;{1@&sg5n`OmC`ywV^*An}vd|9ndMny#z1hyL5P4N>wxAm~zQcsFIED4Cq27!RSeasJ(RjsXU9 z46}N5_hx2!7Q+NF7`r^AHTwJokVIyDJI#K+8we=9;$R59E5%SI(b#ctb%I26j?zn# z3l}Fej^wUx-_HSr1R%%)jF^6VN#Y>u*igGXob<@}7^ew$NOh%=>Q<9Q^dsbdos+8S zzVrQBhLi?Ys4)RJhk4TNfHy%Z6U7L?G_@i?x0t7HCoTx)**JyBV^&&O^Kd@mkRxSg zBl{sp9{JUO(`2mrh@ju`;v?uUD~Qv;YP#(R`Z+1diN7$_wD3Q4|C-z>(ky zmD3!oq;+fHD>u&49#o0UoFeccWY*`F$$#TrlLUD#py*7pP3JizTU&>J6Y~9K_=oIg zMZePlEOcz9aYA>wfC6)YJr3ZIMp{ocW-y!-sQNE-_{T3=!}iM%a`cN*I|ZDkv|g3| z(K2Zg+aTd5*$N@>@o02OhDh8X(^A|}ppUB~{ZE7RH=Cl}&a4(wW-v`@ant8EBH%gx z%Vftm!9>b`TbnHdrcFP8oA?kt*t1Jxu<^c0)uH*C?+aLsvJmV|$ok119v>4sa#a{+ z4(ph04LmvxBY6#P^zXP}T`FyMNp$6S#^vyg*^^MSkjYC6QE$EXtaL{2>vTo|Mnvqx zz}u(O>1q3`o$o(CQ;BMJW}(_F0dBa;`L@7=ffogeqRRWLA8HGKZ+e&ILN4thuSS-W zcx}sS*UTHcf{x29C8P=J#`@+~OQPMabj35J-<#`o&R^zs5Dx_hP{0cY2_IE3yta3} z2&nGT`%pk(+N{Nmj}MeA8Y0Bj)ZYUzq%@eP5UL+K>uTJL9*UiTryfbRTTT_kb4{b+ zwM{g6ete+#ZxzjdslH%o_@id2?#y*#a3^jXW>f9Z;Kt^`;5SOYAN_Uv*Khy%_ci+X zKO#KZ-sSA;fA4wUZ$IuGo^O8SAL!A=E&FtG{oDVDQFnc8liTn8SU8;?>||qeqfY;v zxuR!CFpREYaDZTWb=n}Q9Hcrd#o|U&$gYrBlWmU=THvF9;wba^lv1x06A?hkm`eU2 znHTV7iy`F52b2IkzolWG>d(J3#PepEHLaiB_1UabBddcYx9$`p5ACZB>~e3iAm&?v zB{AJUK9CHT9XnqDzaU31X|W>Q9RG!4H-?;P*lB#9s$Ma3^hyhye`h1_oWfZ^p|2%} z_x+waqp{e3GT1Z^Dih~+TZ)!~P;P!!d1Ev4ZCUs){q*N2Le&=BPOw+yfwRZ0vb!B# zZHH71+<6E!ZkolX48<%)f=eCRe9CCE7H2LGVcrXRd#*@ot5MH$h>5Sty>vrTad#Vk zf>&98z<))E&AyCAh}mJS%s_Me3UbZUJI$2_hQ}3u53dn`z(Y)^@NgWUe$D|fogN1- zC_x}JDx8y}aW*k&IQQ-ui^eDZ^feLIxe{ zeyeV$$f9fh19tTxX+NN0?koBC4xE2gt*%ozn<63<=Dyas%xp?lWmp&yuW*GBlS$sS=KV$%uBo*a-xST5)kxJJBK!d!9}t(>fO; zr?eviU?N#HmC(qzFvp>?K7xT09-f5oQ0Yxmd&0ACtPnG!A>}YwYTcl70fq62O^Q(z zalcaciMWDs{Ff>~-j}nw#=hiN(=v2Y!j=SQ=kH$Zgm95X@d@PRItXc=Rj!VX>&$6? zlQy^dy)$^DB0pn4;D45{k?&`mj1{AIikMEHp^NJsL^`XPZegsXJ8!lIoBiHCLptLb zRwrkDeSPD#`rpO+`i}bFe|oAynqm^-V;HaS{sa<&0{tn+1PcrWmD|$EL!#e1Lp-EJ z?`%g9axQ~^^m$0!g))aiz1L?j;;P_(;2z}5-Hl_OSqi;i$NU`W@6x}&(a4*q&n%qI z+6(bTOkyFe>(azapzw)23N;t3bw#h-8Tz}Ysg8CHLa&8TRaJQ3-VBWLLaR&uEK(&rCaY zseP}`GxFo(+)lS~kfpa3-*ZC8ohNoe$CWU@hJM!x&#!ad?|p{T>YcmOaVv|+8?0?} z9kU3(O?zfrj3vS0c9+(WT^q=G=I3dg`wzDv@&xizX2e~N#ErIN$5KJtVeM(W5nbAU;FBDW+(w6Gi7cwDm7*wtY^f^J?Q=2i5jRR92t4X9&w)mN)}49d zZgtM1U8ONeG_?<`z+Ks^(&%0G5%Lr2b@q6VyDur3U=ilLs}VQNs043+CP)R!q;47e z#|QE(2C`u=GbM+e3iZjVP+dO35)P;>oU3lp@ie5YLwtRv^Bi00OYq{AZg_^~SNX`p zoreQ-Lx9ykT$@NE$u<>?q#+dY+zYCjEIFy@bFrCLnk|xzgl?1_en7jCN$*k#$GboiW-Oqn$C@8Ka+%G5V=VD~(1s$@Xgn<0A5kflw#0=-2l0 zN(yeC#9~^4Ko{&%zf2SoSJomiL6`wXsQ~-O2Yd68T4~%=nsh;hOy#2H)ss>}0TpdkmoUJ8fXs)eJrDvHOGX#`7h3 z@rnz|;24>ty65`WF2Ay4H#39V#%}0V{Jze)pd@vDs>Lsyjnd zdW{xx-_3%kBRWcG(GIinUL(sq^##!L{CKm?)v8{9Bje4hHH=Fm80F8oyS(%3F7f;V zr@yugzBw>lKqi(@T&4ojy;YZ~9@|#WSJ4|lA<#4w90&@Se(!3{xLPx=*3A9jtVYY9 zslU=SnS0#54m%~~UA{0MF`X_s3Bj>KMhScy2{3LBu(lnWIvHsV89D+mPK(SlA|Tdf zlBt}3MQkjloXbaLxUMlzO4w7UDP`i zkepug3F|e@MQpo851|fi%ryR-;}4%5i?QA4{16l63pO*-!7<^{XoNjg(I6szSEnNj z$d*nLt(cMK;pVFq=0d5In7DvJfc%u1;ee8VBnxY(aUt-uQ{E-fre4Sp;3D#_fFB_V z4QIvzBRSa9b*gZ8^JHW2w$VCtu7vgO1tydJb@%L5(&AK|p_kyrtHc?}#s-ufVcykB z+JaE|+bRzSRntkS7vQojJ;jf+q;{$<%_GPy`&}ZOW+q;_Ll?{<3JlLDij7^E_h}G+ zK!I2yY?z1uCX8dXv4I>yE)wY}Npxxy@#?&GVGH7gcVSuW!muT!G=KS22<>$7ljKTXlTZRgj+JoLz6t?FI zGM(#K0=p6=c|Z-6KhqF+>IVme`Unhv^)p(LdPiCD|`TyF&ixfXFpwlqjD3 z8Zr!r0RkKe$%At`MJoGG-vlQ>aY^K8DkD%j%bN)zz=J^`N6dXE=4u8;YdM5}T=!iX zW8;dAJjji#(bOM7{(%cTg#sNSv=7@~%MyfIc3mzfUo$auN?)&1FDetFes_Vxb0mI4 zvzOq7ezJ$h$7F6`Pt_deTNO*a05U&07()(52mud<%VX(t3t-968v>+R-3yv!kPjK1 zW`BRC#4|ebZ|cTqHuwng6FkK-LRAqxg52zL^753SDUPNwldaH|DmY*SkDcDXNwEH( z^Sy~j{(FM{^-Q=P5e$=EGA)0Fn)O$=Wsx%9-Jz>lKN~hMyP&PL?`G|7#xa|1 zr_0v+_;+uLe5{Vx5EIB|ABabNiAd!pah zGu*`C?d^nJdy{L_`{(DqY3Q;vrDh?Mmlo{F`W*#qttJn#wO*r&&(P5XS1!Os#4uX$ z5oPYda2D2VLuSxsXMl=61-2pLT6mP~^HfhVS0@>ZwM%j=zzE`i13XF^=?8)Wbc?)5 zEHNh0aUPEIaGb{~a~_V0+f#q>m`i&cyxWQr^NkwYU7o(h2xT#HZlE+5mZ%EzQmTRY z?bh;?1i3k76$Nq_8@g|LXDI*81PVp|Lxw#B_=HA*4~9sy10%`+yd*KD7Zgn3H3Abn zo`3*fp#V=P^#L6LOuQhHs0d&JekVg^iI5L}2PmZ8gfEXPSlP-Kk1KzctWi2!RjicG zxr|92Epig&{ScwenuxCqvNbZx5p3_sRSBhqRQbyMI7h@k50O`+s4n)jrb4+%wNh87 zJqxm@vXm$bCWr_}B9SeXJ{zN8i9T6QsB}W56Dn6(s4OBd%RBlB-X0=--C7>zxaYll zi95CULcTdgOzsf9L-c?L?%=_p-v6Gw+*AWpwP;D4eO#t)+U0&GvDyv2wyCP?0WcexrUgul;%w20A zIJ@VnV(c1MK#jGIkT^pev1?R5PIf3e1Hn2%u9YIcYM6Q_-co;SFh)Yh?!zgKhyZjH zZt;J8j<2^edaD@OXL^-adA3f%aT3l`m2kFe%*q;NeaB+rGkDVxVaMGc z5?N>FV2h~ZE-JWB{=q>+0;*1&LDzBiYNwl8>DfBW?J)OK#oTY}tO=MPX2O&u(rS;p z3jk`}fYjRyGz|kNQ0m>I9)IHFx%jy}PQ7YsS&lflIop34`HSgRP9c+*XK6=sSyu3V z?*e;QI(fynv%^zH>8Q%Ks}h6gmw)%ZW3o>pqHV`>dhH?TQKBq=JWgR_Y~9K4d7}as&!~tL!?Z8x}l^T0E?R?o9@j7>Uz6c6zpD}k6X;g)j7Fk-rI0d9}zTVqAP0g z*m5la^5i5=yE88zh+sJ7R=#6WU`8^xBKz|@!sCC5FdlRt%@4!m=oYGW_ma~ED!_&S zo*@t6P~X<&fX`Cq*cBL?Spe~Wl zi7uCI4|0?^=SsM|$f}+rFTBb>Y|Dyffo5>Ys~?NS|)id6W}fYz9%c) znT>wd6yWhn1y5Nb$W>>|F+9)uxIVS$g12?PsuHmuA%&xl$%uBd2V?-WvgQu)+WrJ$ zqO_cKQNf?El*(iHR(6B@eCAtrFD8f~<*( zH@8`LmWe?L%`U&+LkBYEFI`1IZ1KIdsqB>ADE-cQuiyKO#0_Ov*+=Kd6O^SI7|N~? zliQWi2x0Xn2ie{O%L zdInES9;{fDn%w`%R<~uC^QWSH9e~mqcoYkrJ=8W#VscTsov3qFip-iNmCcdgp^#iW zQH}SPbqX_R;aQjZ-g;LT5)o1w>_Op8P9r{P&(-C+*YR{eei~)}IUW<_8`0q ztruQ#oQCkDTvITVe}ORK6D1ySH3NT;$qP0`Q`uvAS-z^j){69*(iG;N{%{6vXW(`Q z?zRT*493pL2bv^w=X4WPRdL_vdR8`F@h9kYS@MwVxDTsJOyAeVDCI~`U3QmtG}Si+-E=B*;t;EP6$x=f?voVX7ZG;k)REJgoHJc<;4{uQR!x70Yq)F2 zggdP9M6iZq!dI91d$V2_>zLzuz7oMAF1qA&sfKf3x|QsJwn~<0*zx6X?6s;+g^c1US3FL6^A$Q%l) zngLJ#KL;Tq@@mG^GMgVjwq1W3X_Vh!bxY)l$Q+v3YU`32*`LumZz{Q=M@Z~bGQ#E1 z7^`!dbgww8nIZ}5n5lMFd|(!8!@*6OB}MjLK;Y4E2I%OeICej_|?b%dMp zW~U!jn>#z##6~G{$}nYE%yxZ0bt^f?e<8&weZ=EQZ)an3ka>1OZ_IzAGZY5ULwmDB zgwCMAR6buD^n0f)B50q|z^6B)x3j&T{FgFeU#<}|MJ3cH$eu0LGIgN-uJRepeWtBb zz+6jv;Y)3pxQbP)m~deWteg;XJM`>QM8DZ=GWH)Kp&9M2SV#4?Pc#}?RR%2rpF=p~ zmO8a4LAL@B^*hcQnihZF=ZN@-tzDAOa>Z4~(TtBKn8KNI<{Tmb1)XAV4SeNDe{9x# zfe9A~`pc70SI(=m3gJf8rT!i@UtrjIb+-fqRboWDTazTHsF_N?~k=S{jDyP%? zbT{pcq;shD8B~udU;>-05D!NxsWYDKw6R3 zG`Sls!7JU$A$>`j))s!~c^C8*a6Wg`(osuCEgiLV)Y5;cWSvTOVYX(w$(`{W1@b6% z;%9VUOV=r-i5&$LitVk%+^CXaEwrz?ZQ@7;L4dg`pk9s^pbTK*1(7_X02Ac~sXQZx z0rjq&r_~*MS~cpG%(<~ztc}gJL0A7r=kDdWD#uklcCPA)xqH2Ba(+HvEDGwpAqpyI zPEF&1Y~p|SvS8VNo{rMHlkh6Wx$cYBJ&yyh!mWzeZz`T`n=ofjSk(2Z74 zv;6a$2@(^eBiQr>l~alDhv~urpU^1q!4OG-k0HpBui-r1;It=HJbrb9=h9i1L;hBI zjo*Jfs@ZO@P(}u)hjn^bYi{R#oq1Uk@O?-;RObIInH}Bxj(MFJPrO`cs zr~X+5hDOh%3qRvH7RRwTj^z$H7RLiP9$@u(fbI1r~8)DOoIU4rf3xNH|nA`K9=|43e0P zSAeY=#bi@c-Uo}?0piDkcT; zWA22!4vCZ|i3t)?u2R_$w0w9;^hhvR0~eW;rF3K_29<7E%3!LOpa2mbF$88b(zzAP z2V4?#3q29c)M(l1$d+P)$(8yGGPHlTT*_NgC<7b&I71!|aRyiAUthx@QUP7+OGb$V z8;iCrt@&nI1qB`qf><~&enMgXYB6LV<#X+$=5CIoa2&-Q3CF8E+p?NFOAqX(y8ZwL z`Bh%iw~z9cy{m{fkd)qTX-k2iU0FWIn>*foA>MpYmmZAc@d6GI?Y$r7@Zx_3zPsAZ zGlB886W`tF7!mW^^}Ke2cSJplefN5yJLN&^955UU>R8anvc_c=bQPJp$LwJ)E#1g} z&ovCRBx35TDS%&twh@=nZ1} z#!`YV2@HRz1cJpRH@sPq=PHM<@@yY_L~2W&DLe(cJ)IZUAhv-@HmEN5r*gO zdV}kfB*hD)+DNn6^a2ot}vkoQ7hidDULOcgX0pw-bN34y;Xo?Nc(sl3eaih4Jq%C1+(zWJq{!!eaY zr8Aq*cKl9J)>V7Fc+B-vB$6$P!}u{>1U?X91izX3Bco$ zpB=e!7qp#sd10FcapN2gPDvUT>kq_*MO zQ$-|?i${GNA*xNBv^>YP{Ihx4j%!Ys;UXKh477J&obMtmx`ol2zAKXunaH3ixP^qL&4b*?wo%+a}3S{GB{Ppu1q&povy4XD%fta44q)!kxi35 zE3UrE0Nmxm8+Z#}^6I3k^G?&FD(#`-h5IfXOH7k4{uY5zrqgC9SQ`sO@D zo|Fy@Tx;ndH>xj22MY;^~DT{RZmn$UFB`R>P z%^>$B;-#b7<|$v!)r)OYzTe?8J&${<9PcbMzOymvyoL7Te5NMpW0%hCygH9T)BP8?u{bWx(6w&}QY5L>gh>A24>t@hjZP39aU6zzZd?d$Cn`nOT7 zy$WUDHI-w*Hz16DZ8#ICRMNX;`JM92>>@;;>Wy#IwpHy#JB2~wFolG)04>rJi!hL6~vAn)otM8t=~uDYK} zP|IdElUgl9N`p4+WocTD({!As<1`(o={QZtX*y2x{y5E*sS0E&Cp<(sg;ix0H=3OL zvW(O>7*v>^TC<4?%%UvfOU(sZGlB7-F4WvHeva{TjGtrt9OHlYC>g&hrsi`Ll$jdy zFyjJZhLia0k+UqDO|DEa*=Gof1+`iVMEi2_NfqKa+5SuL;#CgjncBius;qb}E-ay; z?E5Ncgdb%d`AWBwiX&U*9;+MKaE~#sx#Jkg21c^qJD*S{MlcAvWE;wK?&y-=mP2%` ztYc*zEBhQ-*{6S+0_)wN$&=Qg$?oyi836V^wLgAVTTbmcN;95wu|-NjU84po>aja( z%N`=G)X`K&Qyoox)HLu_Ah%5ojf8|m)6kz6>p3+J}xm$zzM`p*RvXxH;3vHpJzwNLw5=-=Mld4a=oB)hgx z2wEPy*+Hw&9%zWV?q?Vc1MGn-G%Hr|9OG+5!0|y+`SW?!t??gk1_OUUw+7-*vKemT@b-4XuD!`M>izTc-t>VkN9mHV z)|(pdQhk4ugWwY;h#kTx5bcvuRKTdkUPHXLKY^Hh2&p%zL0&(8zEV)^uvT$g8_bpK zlVC3x1b|TT8r_C+lYx0HCQtzCc@YCQSWGYh0i{<%=v@IMzoLNO1P(b8%foHC6}vN+ z1tr%mq58c;cMF<7)S;^~c*HO6*2JMtnVm>1uTXzmasL@8RJUuq;uPxHhZR18RtQ%1 ztV64>^dd7b>BgU{;VOu!?g-U6p z>v@Dyl;J{(Clg4Sz64~y2*T9wPMw^j1u!3 z3?gK7m`9MG;3*cpo%ia;Awv5wOkbWdG{w<0)_A6x(^Kz7cYHoB;Ua9M7zrd~FUV=~xj;j2C{C3h(jEM2Oqjv3ag#nR;1 zs1DaAUa7XXAmI($RS(aza;<-dO}M_cJ*#-jwlHEQvwhj~gdgpwBF*0)hm0LEUK%ns zl6K2m{IrqyQ;U{*TN5p%_3BE|?kktgjuzh>h&eTCl}RG4S38B_54{mTwaQHau`@~( zMzyg{WV__7y<&m@)Q@i_lp}3E;KmFAhDh8Xr0oLYh8n|$Y6JF<5BPs2x%hJMWe1#3 zXcYLm61jj^u~hPy?3j^w zdD`__z`g#-u?IDAUz&epV&+8w6qt<9qc99Qy0ezR)UgQ_9;`#Wc0sQY(cv$4yg|iq z^>NkJU2?vx=oWeccxfBJbt5_g@qz&;O5R^ee{3w?_DPRBD#6k`asM97bw(jYC|-l41w#Z{#Lc}#y!k9 zmZ8`d_)^2twm~Byf+!p_=p*?Nkj(Tl%4_aNfkgFsL6LtxaFj`uPof}@kN_A4)Vtz9 zUQ*;snv#C59%?@pO+7}5mQUrUN(l2iA4zeG)<9hO#Sgt%WtdR=+ZrM2%OqK>7tO_KfePJhAx&x+D=1 zSZ`PIsq%))kI++9j+5!a#5YJSzB~l+@?Da2z@dL$Z5-TF(}gWJNJ@z#uaB=S#oxmrqFFCtF>@TEi>(9@6^gRHp;#;O2zV&a>mU}Imos1 zc#G%JPWzR(wRLgRa!z*6$<8_1IVU^EdaM-d;hgN8lbv(2b53>+8Lu2Nc20H;R`gn? z=&9M+-#2AmIY4T6ud$EVJ`DmW5QD)Ujfj8W(JQYBVv~vN6#72$Pcib)IsQxM5YTm= zD{W(Pm?C&9i3;@S}=~M>Sh-vLE7f?hTK%Odb`Eqr#g)O;5#q6MS!J0^&9qbgHxEsLp?? z?sREEYZ_Tac;h6r7v6R$qGR%Hwq|TQGlx%u1ifEx%1Cp7JnAFEmvtmLDTFp@3nh-z zZ06@^TFmTSCOKHrkrDLJ-~U)rn%uPPvV50%0w@HUhT1~ts~34+1dY!7Kr%szjg%n| zhgiAiD#Lf22~m+E^~nYkFOg!bTq=LOCeo1G`@5rTOCW2HA(O77a`sd%gGNg0n15$M z)9MLWR)zmW$jC-hK+zEr)z0-+BqZ*=Sk~KDZG(w2!&<}<#jSG!MjSq2e4l>d+Gj&y z`k{7-f37&*VWk#k>!$dWSM8%x9%C#@J7M67#+y79TG13;a)P;7B=R)vZy$e8^5bWh zoanic=7f@@ZF2-7j?YtRg3&c%Gb0mVlJzrnVI2>UZFgRJ@v0Wf_AFeQ2ib~Zg3YGD z4|!)|-`MWBAcjzz9@jMZ1Vweyaix67yTK}yVOdqIY9f}3>})TUSDXWtSv;FH7Y0G< z)qI1+1VAvApQ4=aDWD9D7@dE{n5GZ7pkXLq=0ekwu#RP=v(2umC0o*zZSP+4z_vFa zx;n`BeSb)p2HyX?9HWlVqB=nk;{ICzM`A;qgI7 zBw>2re}S>g$QIhxxV1zY45Mq~jggiQ%a`48HN_kTb2Y{86-m8mvIl*F>w16%rs7`h>;OxI@$!lA&rC)AC;r--C|CMi#jD=On0#<_hPP4Cnh0EG^G%5A6;#2>)fnJPoj9Yjo%1LTi8gcg3d z4RMTy=A>rs;*QIn8xQnNrix5rCSG|H5PCwI=eWBF7CD z6Q98w0w@DKM8tVjIodvtwr9_J%|a$GUFEM5l52Ecl6Un0K|jExYY1o_#-dV749Fg- zWru&Z#b!yLQaxfLa{xbS5m!yhNGT3!IixjLAc@adg#eOyb+-b?0p?*OB-vJs>b|Ov zXs67hT%1S4DdwsYmg61^h;?&)z0toxqKQKo1)UumQUHsg)FBoli~@gc4~s+jhdpLZ zhPOqlxoBYhhAkcJasu3n78dLIroVAV;q@zu z$u=4t6XbQQRHWJCG1+}FET%Pf2{3ycW`?%KV6u6Y#yanM;82u9QC5Co`BPhV2P?g| z@jCc&L-N-B@04BTpL|9)<%jatF&gZ~k^j2%S=@bp0?8QVjqaxiv17lt)7#iQ82o=m z>Gz|*ZvXo2KmWc)AOA;$N87ucef{q}@B8h?y~Fd(kNg8Yy0~SZPOg9ZA2I6ndn&ht zJl^S8nE3SOl%5O4kY1>jewSD(m92TOHF)#>?cm*D`(3UBWJ2v(Y-dv`?Di?)i13Ij z-s3|6LseTry9l)N5U2rV!!4JW*0z66SV^l~RLy7CFaxwx{f;8+%rR+Qc19n<)|P&A zqAL6pvPZyX&6`d}%l_$6wCdP#$tv#IbIVM)xxP8qn4YuBWIRF^VLvJ%w&6&!7Q<79 z_UUwrh2}&m3v_hT&(}}XGM`x!ltSKIUHv&!jk2{lVs%%hG`CUcYiaG7vORyb2f&hO zXN-mKiUz&+1>@jy+y^DdGgx%zOH9g|9%oIaro|Zw1L&cB7(x$=S-f86v7ULNz*00g z_bNfg74MP{Zb_N%%?{qyf?QgwvIk|HWmgnX+qMU!JBIG=24U!-Q@Xo5qIuMGx4Y(wAagn=10J6Z$H8**57=_YpkftQ5pGfJ#g{Gn_PFQ zA#bDwDs-Gez1Kf`l-WJsO@40Srlkm6f9wfF^SXCL&i}@FaA8G=)0lVm1S!+{jT*0EAD17qTO{PoWoh#%`@i`{;y z*=$TWrq0yv8G2Uf?HURi665#VghiYS<)~Dp$(D;L3Ju(hu@R1iZz<5cUb${?zaFxc zMD|LrB<$7|qp$W4GhRBG>}=X0Vrey0;8}qyO|ehfP}4WmW{IhzbCrgZbci?6st5qB zczSOfBjb=(kgaDu`=;XpLPf{$qqv;d?VAwf)5njZ`}gKvBkPGR+J5d>2ZOdO6NY2lxOxIG%f_ye`Q zUf15g{)<6r-mkrT6s;>dnpn%-`Zj;aP3XinWzC7?rmkGBWD79@wolAtW1=7 zNpY2qkK!@Pq;GS0O_r0>+?;@l4h!ha1*Id}B~OXFns)3T1>J6O1uRJ)yDN)hmJ=8KD5m4X6C?`ulFM)*zt*HG#jDo8sb$PP`ELs zlu4r&qcYRY=(4ev;j2f!IsA81`kuv6nssei0-{GYKqLYkth;P>$Ig3-t3(|kIPy+@ z0{GBs3Q)Y_9>6_F;MCnJh<(90rcPvqwK@V+c_*(hWN)a@==mvDzemP@uZKy%kTqbJtTkO>b@8xA$;X*!@H_HOotQ7E zs4puh|4HB_Kw-?why6_^FlxHY#|L*nCX!ID@0#ZaDjSZ-HofHKtMbSYfM<$9S-hO( zi1Z_Sy5BDeiv%fgJ@NRqETygh#|)U4+aV|!6DI>xb5Fw)GYUsGLN(|hIR56P8QNn1 zX;SWCa26$$ct!P`9OIG%nc$Z&CEBqFKH=3$*LJ;h0Dp^~Eu+N#7Yu;}sfRQO{=w>e z89@X}7w?~`6_-wC7onFng<5Pme(VQ+>nMP>09fOKm?-{jU!>13vO=X9`Oi=B*cw@^ zbr4kygTot<+$D6CAUD3EEWhz&C8j_}{_C)&%8VU^%_J9-4(h(jjy8rEmQsU16ebBQ zj}rk<>rKp%!syrU;PV@N;v_KNRTF&^aZ-&!hbt<@h+Bd2BC5(Mlr z=ED^?RP|v?*IK>S-SBDuTzg)bfjYAb6U5JhxMb&nVaT&BITo4|_VVn)~hX+qB0G0J_b~711W%RvF^2IWJ z^#4K8S@O4Q*7q_a4Y|4C>jPS0VTkJ4NAIK z0k)LL+>Q((638m*wGf|Q89Adih@kBM$EeLyw6M=|PCLI!CWtEzqQJ8gJ^z!U_QTDc zpXn3p6}Ns&LY@Gc^i-8y>+_{B`{uW zBv}$?FLzN8P0X?!(b)s?sechX>xL6j8A?vbXYyr#ns~bEPmO|*q8@LDIhoDYoZ#~5 zW`I20!zsu^R1vBuFws1##Cfn`Xq5r}NYhOz?B4R)q<1@@j67y5+0HrEz`K|Mou-yv zWpkx_?lY@heb1&1oLQrq9%c zO~_q8&W*T1f6FZWGWM($8f*x^Ys6ez>uy&@_1cjBUG6Bjbw7PsnpCOeJF(92-GR}L z$)%%rREsJ>M#Oi@G1Kf36g2}?XKw;2pn~MO>{mwt&7zO0G*;#oQJa zCU;^0G|e|_7Mko%RZqvw$t{CGb@hGu-|vvb%h9uAFq1BEIAz%X*i0=UUMO45*FaFz z)x?Bg#EI`J2M8jPpqRGo?Ykr5H~+DcK>j29$VwR-!zx{QaNwF@iKI7aVP>$V*mt{= zbm_XUwkDaZ+Txr1dxb!zh+^%b49Sv`F1f*<2JWpWqsub7g;-YEumRdxeV zs+HEP1q7HAp%x&=coo9NC|v)0|DGYI_08ZLf%Wi~109?uy!A9nVOmPS)wDYwp+E;By$F-p-%O4*UExGX+P zhVzUY<*M3LvJ4@B?GRn@i-M*l3v=?69eN1c2BSgEg{{Ri$_ES!iXA4rnw%KJPHs!I z$>D|)U-EHq)Cj=M^Sq!(0#^EGfC>K(r7TUO z+T>iv1*cqETf1700Zp$xLZa-qTRg`xNN?9hK6&`W?;n_cz*^!VyUh?otu-gSnR2R& z6k5tv00a0{pWlD~=|Y4v7Xor?v)otWrmAy@Uj@!(VP6p-9S0LeBdd0D&bOh={iffq zD#&^Th76J?lznFbpGYX8(xmtbpHqD4tSBSFF0cF5(|xSo&N{QGJ^)PYvlp@&DQh?X z#{#XF4W=?I7trRzs-{|QNmKxK9mV`4>btYdHP_({SLVUU?YC=N3Y2slyVBI#_H9~S zK(4bxK7i+s6Q8!N2-zR4CI)JVM-j40YfUBoffVTPuPW6_KK!anf`eFp1`FC;wYeh( z1nb?`8^UJ0&GWnO506ckz1bZx+Z?DRw7-X(N3KrO8>fyKU&?+#Jn*F zGElf4dqcKYl~~HD1+AIsX%29(+)8??IZ3U3GOc>rydY7hqB@hk?v(VPGEj)~X|`aw zg9JHQ+?g8n-JfR@7~l~faxLHEka z21O5#JoDn^sl$etfBW*;DwN4+RRv~;7g30X2gQont{nqzY)1C|fIJi*{Epk%d&O$; zp1(KzTv*|@iYq=e_yJ(vnLW~k?7Rm39X$w<8HmStWIr|jS&Fq7Rjry0@SM@Vg`f#Y zaOz9pClv-6NZp|J!`=-?Uh+#CA8P^`n)M#-}LQ7?BLxhR}{MJr5z3>K|_UgiI3EsQD0XuJ6FxsX`YsPNk!$MVT{JcAx zB0d}zHY=B?+BK9SlBoT)epbD^a8nXUINT~rR8uX7A*n=Y&WOerobX3Fk5MH9*^@|1 z`#K45OeqiyfdhIYh4^j#uo}JbjPPOLXKGXjD}@{WXmeshdJI~~W8Ze25axXR17`D_ z-_~uBdi&AN2vGY*MEH#Jyo7NM*T_puDCY2Gl8rpG_>K+v%Y0(k!wX8cwQ_u9dbnh& zT0Cds*P4_9w_EnRKcnzjvRrs{-jHiQ8}O~I-!oR+ecY6G%lhUDTKw8nw-)@- zn-;gy_^0aA4z6DL^N;mRqXH*G59zBWRA>hJ=1h(KCNcz{h+ly|qt!%vV1)~S1Qs2{ z3Buu!uUrK=w`^>(FsN*+1cNomQ^trr08GnPmgloW$i}vun4@pkgS64xdQ$Ve(7l#GBz%_ln=CGb(aBc}T)qUzw-BNGVS z8eF$YkGR;~v)`q0J)Gr5#t{%*QX5QfG_wUHm5=?eofqz{)a!*nGp}+NDe?@b zeIK56mA*JI#%d7tEgAoMR*3Dg%Ht6#X>xFr>*;xG+}9zaa-xlFGc$H7O5jUYQYG3 zA!yxGi~xcr=qrC*l6-6fOm-KmI`8`ojWK{s=7}o(Ta0)^{%u>z(oD=GFO7HhjTui* z)>4f*!)7qAeI$?TNWFljB(C`D^(q~$;~!Uq0S;Z#a$7*yb;&aLIi$(ec__d1QSTEHlD&$znvWz*|^o2EJ^fS~C4LkN2 zpD^$Ai$K~j4jM|C4p#Ka+U9}-aq_RADdGvlGd+w*8*QflF26ffQh5PhfA!x$LCM30 z3+~(B;yN=t8TlitL#%X6D{Dw^v|zyMhJZaVW;;G|4o^HAJ50v||M4V%I~nqFY8(`7&0urfokn3YB4ui7!>tgo=0@2tL}|2i!~Xtx)1#v{1IA zjA)Iti40sL$ELH!*0SK~)+KS>=CYpdl`2(`*76WdgFBXWKGrbxa`1zQhr3)l7mm^? zgmbOdMRk%0yS8rI#!q}Ca~5n7?Ck4$*%_{L-0BAXGx;C;l^jvM(SHqDMU|7t9uqkf z4Ine0O^E&>HIpBoYcA_6?WWSg4&8sX56-Gs2Pa^9ZXt3#q^170(V!M zwfFka$|VV(%#3`*`WoIg`Ul$E)3*+)Dt)#Isc^)@#Ct?ENrk96Stph6FSjb%ld#$P zAJ?eSWfzlBp;%K(`fnppXO&Rt1jT3n{?$lu66CCo&~s_@<31-mU<*q0$GH4I|IVqy z?X535J+9a_x{8K|c{CX++>k!VrlFXg)z{a^9RJG$&5Y!6J8ym1Z|k5Ke_apBiMTsnR|<9Y3xzkNqxeiXsy;KMDyOos=xZy(#EkBb)H zFL6h)x&PU~ZTDAS?*#8ujoqz61dqpfhNKlxp6al+wPY}FK?|`j#;adoN=Q-bBeSkU ztaj;Y-c!>BFR#&-5^R^y2YDbT&-CVw)qe{WH>%9)ABGwlaj#MMl zMQC*Qj`dO;FPb%smsX{=64$-1elIIxuGZb;*wEnP^W*$KYyjZjzZrO$NR259;Qs;k C6HI~t diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index c8c1bcfd20b3184b43300b60e53f4425869d0319..989f3b020ec566c763c89dc02d2d7f6a9dae0c78 100644 GIT binary patch delta 8022 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 Yi4*hb>E`MG2LJ&7|GwgoBf5+M0Cs7KF8}}l delta 8026 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 p0uVE2EfR@ Date: Wed, 23 Jun 2021 20:54:52 -0400 Subject: [PATCH 08/14] add changelog --- CHANGELOG.md | 249 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 167 insertions(+), 82 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b2db58fecae..8c6c2ab5414 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,7 @@ # 1.10.0 / 2021-06-23 -> Note: If you are running a Lotus miner, check out the documentation[here](https://docs.filecoin.io/mine/lotus/miner-configuration/#precommitsectorsbatch) for details of the new Lotus miner config options and explanations of the new features. - -This is a mandatory release of Lotus that introduces Filecoin network v13, codenamed the HyperDrive upgrade. The Filecoin mainnet will upgrade at epoch 892800, which is 2021-06-30T22:00:00Z. The network upgrade introduces the following FIPs: +This is a mandatory release of Lotus that introduces Filecoin network v13, codenamed the HyperDrive upgrade. The Filecoin mainnet will upgrade, which is 2021-06-30T22:00:00Z. The network upgrade introduces the following FIPs: - [FIP-0008](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0008.md): Add miner batched sector pre-commit method - [FIP-0011](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0011.md): Remove reward auction from reporting consensus faults @@ -18,9 +16,16 @@ Note that this release is built on top of Lotus v1.9.0. Enterprising users can u FIPs [0008](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0008.md) and [0013](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0013.md) combine to allow for a significant increase in the rate of onboarding storage on the Filecoin network. It is hoped that this will lead to more useful data being stored on the network, reduced network congestion, and lower network base fee. +**Check out the documentation [here](https://docs.filecoin.io/mine/lotus/miner-configuration/#precommitsectorsbatch) for details of the new Lotus miner sealing config options, [here](https://docs.filecoin.io/mine/lotus/miner-configuration/#fees-section) for fee config options, and explanations of the new features.** + +Note: + - We recommend to keep `PreCommitSectorsBatch` as 1. + - We recommend miners to set `PreCommitBatchWait` lower than 30 hours. + - We recommend miners to set a longer `CommitBatchSlack` and `PreCommitBatchSlac` to prevent message failures due to expirations. + ### Projected state tree growth -As a result of the accelerated onboarding of storage onto the network, it is possible +As a result of the accelerated onboardiPreCommitSectorsBatcng of storage onto the network, it is possible ### Hardware requirements and suggestions @@ -28,9 +33,9 @@ As the size of a single state tree grows, so will the size of the minimal datast ### Future improvements -Various Lotus improvements are planned moving forward to mitigate the effects of the growing state tree size. The primary improvement is the [Lotus splitstore](LINK TO DISCUSSION), which will soon be enabled by default. The feature allows for [online garbage collection](https://github.com/filecoin-project/lotus/issues/6577) for nodes that do not seek to maintain full chain and state history, thus eliminating the need for users to delete their datastores and sync from snapshots. +Various Lotus improvements are planned moving forward to mitigate the effects of the growing state tree size. The primary improvement is the [Lotus splitstore](https://github.com/filecoin-project/lotus/discussions/5788), which will soon be enabled by default. The feature allows for [online garbage collection](https://github.com/filecoin-project/lotus/issues/6577) for nodes that do not seek to maintain full chain and state history, thus eliminating the need for users to delete their datastores and sync from snapshots. -Other improvements including better compressed snapshots, faster premigrations, and improved chain exports. +Other improvements including better compressed snapshots, faster pre-migrations, and improved chain exports are in the roadmap. ## WindowPost base fee burn @@ -38,7 +43,87 @@ Included in the HyperDrive upgrade is [FIP-0015](https://github.com/filecoin-pro ## Changelog -TODO +### New Features + +- Implement FIP-0015 ([filecoin-project/lotus#6361](https://github.com/filecoin-project/lotus/pull/6361)) +- Integrate FIP0013 and FIP0008 ([filecoin-project/lotus#6235](https://github.com/filecoin-project/lotus/pull/6235)) + - [Configuration docs and cli examples](https://docs.filecoin.io/mine/lotus/miner-configuration/#precommitsectorsbatch) + - [cli docs](https://github.com/filecoin-project/lotus/blob/master/documentation/en/cli-lotus-miner.md#lotus-miner-sectors-batching) + - Introduce gas prices for aggregate verifications ([filecoin-project/lotus#6347](https://github.com/filecoin-project/lotus/pull/6347)) +- Introduce v5 actors ([filecoin-project/lotus#6195](https://github.com/filecoin-project/lotus/pull/6195)) +- Robustify commit batcher ([filecoin-project/lotus#6367](https://github.com/filecoin-project/lotus/pull/6367)) +- Always flush when timer goes off ([filecoin-project/lotus#6563](https://github.com/filecoin-project/lotus/pull/6563)) +- Update default fees for aggregates ([filecoin-project/lotus#6548](https://github.com/filecoin-project/lotus/pull/6548)) +- sealing: Early finalization option ([filecoin-project/lotus#6452](https://github.com/filecoin-project/lotus/pull/6452)) + - `./lotus-miner/config.toml/[Sealing.FinalizeEarly]`: default to false. Enable if you want to FinalizeSector before commiting +- Add filplus utils to CLI ([filecoin-project/lotus#6351](https://github.com/filecoin-project/lotus/pull/6351)) + - cli doc can be found [here](https://github.com/filecoin-project/lotus/blob/master/documentation/en/cli-lotus.md#lotus-filplus) +- Add miner-side MaxDealStartDelay config ([filecoin-project/lotus#6576](https://github.com/filecoin-project/lotus/pull/6576)) + + +### Bug Fixes +- chainstore: Don't take heaviestLk with backlogged reorgCh ([filecoin-project/lotus#6526](https://github.com/filecoin-project/lotus/pull/6526)) +- Backport #6041 - storagefsm: Fix batch deal packing behavior ([filecoin-project/lotus#6519](https://github.com/filecoin-project/lotus/pull/6519)) +- backport: pick the correct partitions-per-post limit ([filecoin-project/lotus#6503](https://github.com/filecoin-project/lotus/pull/6503)) +- failed sectors should be added into res correctly ([filecoin-project/lotus#6472](https://github.com/filecoin-project/lotus/pull/6472)) +- sealing: Fix restartSectors race ([filecoin-project/lotus#6491](https://github.com/filecoin-project/lotus/pull/6491)) +- Fund miners with the aggregate fee when ProveCommitting ([filecoin-project/lotus#6428](https://github.com/filecoin-project/lotus/pull/6428)) +- Commit and Precommit batcher cannot share a getSectorDeadline method ([filecoin-project/lotus#6416](https://github.com/filecoin-project/lotus/pull/6416)) +- Fix supported proof type manipulations for v5 actors ([filecoin-project/lotus#6366](https://github.com/filecoin-project/lotus/pull/6366)) +- events: Fix handling of multiple matched events per epoch ([filecoin-project/lotus#6362](https://github.com/filecoin-project/lotus/pull/6362)) +- Fix randomness fetching around null blocks ([filecoin-project/lotus#6240](https://github.com/filecoin-project/lotus/pull/6240)) + +### Improvements +- Appimage v1.10.0 rc3 ([filecoin-project/lotus#6492](https://github.com/filecoin-project/lotus/pull/6492)) +- Expand on Drand change testing ([filecoin-project/lotus#6500](https://github.com/filecoin-project/lotus/pull/6500)) +- Backport Fix logging around mineOne ([filecoin-project/lotus#6499](https://github.com/filecoin-project/lotus/pull/6499)) +- mpool: Add more metrics ([filecoin-project/lotus#6453](https://github.com/filecoin-project/lotus/pull/6453)) +- Merge backported PRs into v1.10 release branch ([filecoin-project/lotus#6436](https://github.com/filecoin-project/lotus/pull/6436)) +- Fix tests ([filecoin-project/lotus#6371](https://github.com/filecoin-project/lotus/pull/6371)) +- Extend the default deal start epoch delay ([filecoin-project/lotus#6350](https://github.com/filecoin-project/lotus/pull/6350)) +- sealing: Wire up context to batchers ([filecoin-project/lotus#6497](https://github.com/filecoin-project/lotus/pull/6497)) +- Improve address resolution for messages ([filecoin-project/lotus#6364](https://github.com/filecoin-project/lotus/pull/6364)) + +### Dependency Updates +- Proofs v8.0.2 ([filecoin-project/lotus#6524](https://github.com/filecoin-project/lotus/pull/6524)) +- Update to fixed Bellperson ([filecoin-project/lotus#6480](https://github.com/filecoin-project/lotus/pull/6480)) +- Update to go-praamfetch with fslocks ([filecoin-project/lotus#6473](https://github.com/filecoin-project/lotus/pull/6473)) +- Update ffi with fixed multicore sdr support ([filecoin-project/lotus#6471](https://github.com/filecoin-project/lotus/pull/6471)) +- github.com/filecoin-project/go-paramfetch (v0.0.2-0.20200701152213-3e0f0afdc261 -> v0.0.2-0.20210614165157-25a6c7769498) +- github.com/filecoin-project/specs-actors/v5 (v5.0.0-20210512015452-4fe3889fff57 -> v5.0.0) +- github.com/filecoin-project/go-hamt-ipld/v3 (v3.0.1 -> v3.1.0) +- github.com/ipfs/go-log/v2 (v2.1.2-0.20200626104915-0016c0b4b3e4 -> v2.1.3) +- github.com/filecoin-project/go-amt-ipld/v3 (v3.0.0 -> v3.1.0) + +### Network Version v13 HyperDrive Upgrade +- Set HyperDrive upgrade epoch ([filecoin-project/lotus#6565](https://github.com/filecoin-project/lotus/pull/6565)) +- version bump to lotus v1.10.0-rc6 ([filecoin-project/lotus#6529](https://github.com/filecoin-project/lotus/pull/6529)) +- Upgrade epochs for calibration reset ([filecoin-project/lotus#6528](https://github.com/filecoin-project/lotus/pull/6528)) +- Lotus version 1.10.0-rc5 ([filecoin-project/lotus#6504](https://github.com/filecoin-project/lotus/pull/6504)) +- Merge releases into v1.10 release ([filecoin-project/lotus#6494](https://github.com/filecoin-project/lotus/pull/6494)) +- update lotus to v1.10.0-rc3 ([filecoin-project/lotus#6481](https://github.com/filecoin-project/lotus/pull/6481)) +- updated configuration comments for docs +- Lotus version 1.10.0-rc2 ([filecoin-project/lotus#6443](https://github.com/filecoin-project/lotus/pull/6443)) +- Set ntwk v13 HyperDrive Calibration upgrade epoch ([filecoin-project/lotus#6442](https://github.com/filecoin-project/lotus/pull/6442)) + + +## Contributors + +💙Thank you to all the contributors! + +| Contributor | Commits | Lines ± | Files Changed | +|-------------|---------|---------|---------------| +| Łukasz Magiera | 75 | +9088/-1452 | 348 | +| Aayush Rajasekaran | 38 | +6525/-651 | 184 | +| Jennifer Wang | 10 | +575/-104 | 21 | +| Steven Allen | 2 | +272/-8 | 6 | +| vyzo | 6 | +155/-66 | 13 | +| Cory Schwartz | 10 | +171/-27 | 14 | +| Jakub Sztandera | 4 | +177/-13 | 7 | +| Peter Rabbitson | 4 | +65/-42 | 5 | +| Travis Person | 2 | +11/-11 | 4 | +| wangchao | 2 | +3/-2 | 2 | + # 1.9.0 / 2021-05-17 @@ -267,7 +352,7 @@ This release also expands the `lotus-miner sectors extend` CLI, with a new optio - The `expiration-cutoff` flag can be passed to skip sectors whose expiration is past a certain point from the current head. It defaults to infinity (no cutoff), but if, say, 28800 was specified, then only sectors expiring in the next 10 days would be extended (2880 epochs in 1 day). -## Changes +## Changes - Util for miners to extend all v1 sectors (https://github.com/filecoin-project/lotus/pull/5924) - Upgrade the butterfly network (https://github.com/filecoin-project/lotus/pull/5929) @@ -278,7 +363,7 @@ This release also expands the `lotus-miner sectors extend` CLI, with a new optio This is a patch release of Lotus that introduces small fixes to the Storage FSM. -## Changes +## Changes - storagefsm: Fix double unlock with ready WaitDeals sectors (https://github.com/filecoin-project/lotus/pull/5783) - backupds: Allow larger values in write log (https://github.com/filecoin-project/lotus/pull/5776) @@ -294,7 +379,7 @@ This is an hotfix release of Lotus that fixes a critical bug introduced in v1.5. # 1.5.1 / 2021-03-10 -This is an optional release of Lotus that introduces an important fix to the WindowPoSt computation process. The change is to wait for some confidence before drawing beacon randomness for the proof. Without this, invalid proofs might be generated as the result of a null tipset. +This is an optional release of Lotus that introduces an important fix to the WindowPoSt computation process. The change is to wait for some confidence before drawing beacon randomness for the proof. Without this, invalid proofs might be generated as the result of a null tipset. ## Splitstore @@ -387,7 +472,7 @@ FIP-0010 introduces the ability to dispute bad Window PoSts. Node operators are ## Changes - [#5341](https://github.com/filecoin-project/lotus/pull/5341) Add a `LOTUS_DISABLE_V3_ACTOR_MIGRATION` envvar - - Setting this envvar to 1 disables the v3 actor migration, should only be used in the event of a failed migration + - Setting this envvar to 1 disables the v3 actor migration, should only be used in the event of a failed migration # 1.4.2 / 2021-02-17 @@ -395,14 +480,14 @@ This is a large, and highly recommended, optional release with new features and - [FIP-0007 h/amt-v3](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0007.md) which improves the performance of the Filecoin HAMT and AMT. - [FIP-0010 off-chain Window PoSt Verification](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0010.md) which reduces the gas consumption of `SubmitWindowedPoSt` messages significantly by optimistically accepting Window PoSt proofs without verification, and allowing them to be disputed later by off-chain verifiers. - + Note that this release does NOT set an upgrade epoch for v3 actors to take effect. That will be done in the upcoming 1.5.0 release. - - ## New Features - - - [#5341](https://github.com/filecoin-project/lotus/pull/5341) Added sector termination API and CLI - - Run `lotus-miner sectors terminate` -- [#5342](https://github.com/filecoin-project/lotus/pull/5342) Added CLI for using a multisig wallet as miner's owner address + +## New Features + +- [#5341](https://github.com/filecoin-project/lotus/pull/5341) Added sector termination API and CLI + - Run `lotus-miner sectors terminate` +- [#5342](https://github.com/filecoin-project/lotus/pull/5342) Added CLI for using a multisig wallet as miner's owner address - See how to set it up [here](https://github.com/filecoin-project/lotus/pull/5342#issue-554009129) - [#5363](https://github.com/filecoin-project/lotus/pull/5363), [#5418](https://github.com/filecoin-project/lotus/pull/), [#5476](https://github.com/filecoin-project/lotus/pull/5476), [#5459](https://github.com/filecoin-project/lotus/pull/5459) Integrated [spec-actor v3](https://github.com/filecoin-pro5418ject/specs-actors/releases/tag/v3.0.0) - [#5472](https://github.com/filecoin-project/lotus/pull/5472) Generate actor v3 methods for pond @@ -413,7 +498,7 @@ Note that this release does NOT set an upgrade epoch for v3 actors to take effec - [#5411](https://github.com/filecoin-project/lotus/pull/5411) Handle batch `PublishStorageDeals` message in sealing recovery - [#5505](https://github.com/filecoin-project/lotus/pull/5505) Exclude expired deals from batching in `PublishStorageDeals` messages - Added `PublishMsgPeriod` and `MaxDealsPerPublishMsg` to miner `Dealmaking` [configuration](https://docs.filecoin.io/mine/lotus/miner-configuration/#dealmaking-section). See how they work [here](https://docs.filecoin.io/mine/lotus/miner-configuration/#publishing-several-deals-in-one-message). - - [#5538](https://github.com/filecoin-project/lotus/pull/5538), [#5549](https://github.com/filecoin-project/lotus/pull/5549) Added a command to list pending deals and force publish messages. + - [#5538](https://github.com/filecoin-project/lotus/pull/5538), [#5549](https://github.com/filecoin-project/lotus/pull/5549) Added a command to list pending deals and force publish messages. - Run `lotus-miner market pending-publish` - [#5428](https://github.com/filecoin-project/lotus/pull/5428) Moved waiting for `PublishStorageDeals` messages' receipt from markets to lotus - [#5510](https://github.com/filecoin-project/lotus/pull/5510) Added `nerpanet` build option @@ -423,32 +508,32 @@ Note that this release does NOT set an upgrade epoch for v3 actors to take effec - [#5219](https://github.com/filecoin-project/lotus/pull/5219) Added interactive mode for lotus-wallet - [5529](https://github.com/filecoin-project/lotus/pull/5529) Added support for minder nodes in `lotus-shed rpc` util - ## Bug Fixes - - - [#5210](https://github.com/filecoin-project/lotus/pull/5210) Miner should not dial client on restart - - [#5403](https://github.com/filecoin-project/lotus/pull/5403) When estimating GasLimit only apply prior messages up to the nonce - - [#5410](https://github.com/filecoin-project/lotus/pull/510) Fix the calibnet build option - - [#5492](https://github.com/filecoin-project/lotus/pull/5492) Fixed `has` for ipfsbstore for non-existing blocks - - [#5361](https://github.com/filecoin-project/lotus/pull/5361) Fixed retrieval hangs when using `IpfsOnlineMode=true` - - [#5493](https://github.com/filecoin-project/lotus/pull/5493) Fixed retrieval failure when price-per-byte is zero - - [#5506](https://github.com/filecoin-project/lotus/pull/5506) Fixed contexts in the storage adpater - - [#5515](https://github.com/filecoin-project/lotus/pull/5515) Properly wire up `StateReadState` on gateway API - - [#5582](https://github.com/filecoin-project/lotus/pull/5582) Fixed error logging format strings - - [#5614](https://github.com/filecoin-project/lotus/pull/5614) Fixed websocket reconnecting handling - - - ## Improvements - - - [#5389](https://github.com/filecoin-project/lotus/pull/5389) Show verified indicator for `./lotus-miner storage-deals list` +## Bug Fixes + +- [#5210](https://github.com/filecoin-project/lotus/pull/5210) Miner should not dial client on restart +- [#5403](https://github.com/filecoin-project/lotus/pull/5403) When estimating GasLimit only apply prior messages up to the nonce +- [#5410](https://github.com/filecoin-project/lotus/pull/510) Fix the calibnet build option +- [#5492](https://github.com/filecoin-project/lotus/pull/5492) Fixed `has` for ipfsbstore for non-existing blocks +- [#5361](https://github.com/filecoin-project/lotus/pull/5361) Fixed retrieval hangs when using `IpfsOnlineMode=true` +- [#5493](https://github.com/filecoin-project/lotus/pull/5493) Fixed retrieval failure when price-per-byte is zero +- [#5506](https://github.com/filecoin-project/lotus/pull/5506) Fixed contexts in the storage adpater +- [#5515](https://github.com/filecoin-project/lotus/pull/5515) Properly wire up `StateReadState` on gateway API +- [#5582](https://github.com/filecoin-project/lotus/pull/5582) Fixed error logging format strings +- [#5614](https://github.com/filecoin-project/lotus/pull/5614) Fixed websocket reconnecting handling + + +## Improvements + +- [#5389](https://github.com/filecoin-project/lotus/pull/5389) Show verified indicator for `./lotus-miner storage-deals list` - [#5229](https://github.com/filecoin-project/lotus/pull/5220) Show power for verified deals in `./lotus-miner setocr list` - [#5407](https://github.com/filecoin-project/lotus/pull/5407) Added explicit check of the miner address protocol - - [#5399](https://github.com/filecoin-project/lotus/pull/5399) watchdog: increase heapprof capture threshold to 90% - - [#5398](https://github.com/filecoin-project/lotus/pull/5398) storageadapter: Look at precommits on-chain since deal publish msg - - [#5470](https://github.com/filecoin-project/lotus/pull/5470) Added `--no-timing` option for `./lotus state compute-state --html` +- [#5399](https://github.com/filecoin-project/lotus/pull/5399) watchdog: increase heapprof capture threshold to 90% +- [#5398](https://github.com/filecoin-project/lotus/pull/5398) storageadapter: Look at precommits on-chain since deal publish msg +- [#5470](https://github.com/filecoin-project/lotus/pull/5470) Added `--no-timing` option for `./lotus state compute-state --html` - [#5417](https://github.com/filecoin-project/lotus/pull/5417) Storage Manager: Always unseal full sectors - [#5393](https://github.com/filecoin-project/lotus/pull/5393) Switched to [filecoin-ffi bls api ](https://github.com/filecoin-project/filecoin-ffi/pull/159)for bls signatures -- [#5380](https://github.com/filecoin-project/lotus/pull/5210) Refactor deals API tests -- [#5397](https://github.com/filecoin-project/lotus/pull/5397) Fixed a flake in the sync manager edge case test +- [#5380](https://github.com/filecoin-project/lotus/pull/5210) Refactor deals API tests +- [#5397](https://github.com/filecoin-project/lotus/pull/5397) Fixed a flake in the sync manager edge case test - [#5406](https://github.com/filecoin-project/lotus/pull/5406) Added a test to ensure a correct window post cannot be disputed - [#5294](https://github.com/filecoin-project/lotus/pull/5394) Added jobs to build Lotus docker image and push it to AWS ECR - [#5387](https://github.com/filecoin-project/lotus/pull/5387) Added network info(mainnet|calibnet) in version @@ -457,7 +542,7 @@ Note that this release does NOT set an upgrade epoch for v3 actors to take effec - [#5047](https://github.com/filecoin-project/lotus/pull/5047) Improved the UX for `./lotus-shed bitfield enc` - [#5282](https://github.com/filecoin-project/lotus/pull/5282) Snake a context through the chian blockstore creation - [#5350](https://github.com/filecoin-project/lotus/pull/5350) Avoid using `mp.cfg` directrly to prevent race condition -- [#5449](https://github.com/filecoin-project/lotus/pull/5449) Documented the block-header better +- [#5449](https://github.com/filecoin-project/lotus/pull/5449) Documented the block-header better - [#5404](https://github.com/filecoin-project/lotus/pull/5404) Added retrying proofs if an incorrect one is generated - [#4545](https://github.com/filecoin-project/lotus/pull/4545) Made state tipset usage consistent in the API - [#5540](https://github.com/filecoin-project/lotus/pull/5540) Removed unnecessary database reads in validation check @@ -474,14 +559,14 @@ Note that this release does NOT set an upgrade epoch for v3 actors to take effec - [#5592](https://github.com/filecoin-project/lotus/pull/5592) Verify FFI version before building ## Dependency Updates - - [#5296](https://github.com/filecoin-project/lotus/pull/5396) Upgraded to [raulk/go-watchdog@v1.0.1](https://github.com/raulk/go-watchdog/releases/tag/v1.0.1) - - [#5450](https://github.com/filecoin-project/lotus/pull/5450) Dependency updates - - [#5425](https://github.com/filecoin-project/lotus/pull/5425) Fixed stale imports in testplans/lotus-soup - - [#5535](https://github.com/filecoin-project/lotus/pull/5535) Updated to [go-fil-markets@v1.1.7](https://github.com/filecoin-project/go-fil-markets/releases/tag/v1.1.7) - - [#5616](https://github.com/filecoin-project/lotus/pull/5600) Updated to [filecoin-ffi@b6e0b35fb49ed0fe](https://github.com/filecoin-project/filecoin-ffi/releases/tag/b6e0b35fb49ed0fe) - - [#5599](https://github.com/filecoin-project/lotus/pull/5599) Updated to [go-bitfield@v0.2.4](https://github.com/filecoin-project/go-bitfield/releases/tag/v0.2.4) - - [#5614](https://github.com/filecoin-project/lotus/pull/5614), , [#5621](https://github.com/filecoin-project/lotus/pull/5621) Updated to [go-jsonrpc@v0.1.3](https://github.com/filecoin-project/go-jsonrpc/releases/tag/v0.1.3) - - [#5459](https://github.com/filecoin-project/lotus/pull/5459) Updated to [spec-actors@v3.0.1](https://github.com/filecoin-project/specs-actors/releases/tag/v3.0.1) +- [#5296](https://github.com/filecoin-project/lotus/pull/5396) Upgraded to [raulk/go-watchdog@v1.0.1](https://github.com/raulk/go-watchdog/releases/tag/v1.0.1) +- [#5450](https://github.com/filecoin-project/lotus/pull/5450) Dependency updates +- [#5425](https://github.com/filecoin-project/lotus/pull/5425) Fixed stale imports in testplans/lotus-soup +- [#5535](https://github.com/filecoin-project/lotus/pull/5535) Updated to [go-fil-markets@v1.1.7](https://github.com/filecoin-project/go-fil-markets/releases/tag/v1.1.7) +- [#5616](https://github.com/filecoin-project/lotus/pull/5600) Updated to [filecoin-ffi@b6e0b35fb49ed0fe](https://github.com/filecoin-project/filecoin-ffi/releases/tag/b6e0b35fb49ed0fe) +- [#5599](https://github.com/filecoin-project/lotus/pull/5599) Updated to [go-bitfield@v0.2.4](https://github.com/filecoin-project/go-bitfield/releases/tag/v0.2.4) +- [#5614](https://github.com/filecoin-project/lotus/pull/5614), , [#5621](https://github.com/filecoin-project/lotus/pull/5621) Updated to [go-jsonrpc@v0.1.3](https://github.com/filecoin-project/go-jsonrpc/releases/tag/v0.1.3) +- [#5459](https://github.com/filecoin-project/lotus/pull/5459) Updated to [spec-actors@v3.0.1](https://github.com/filecoin-project/specs-actors/releases/tag/v3.0.1) ## Network Version v10 Upgrade @@ -489,7 +574,7 @@ Note that this release does NOT set an upgrade epoch for v3 actors to take effec - [#5603](https://github.com/filecoin-project/lotus/pull/5603) Set nerpanet's upgrade epochs up to v3 actors - [#5471](https://github.com/filecoin-project/lotus/pull/5471), [#5456](https://github.com/filecoin-project/lotus/pull/5456) Set calibration net actor v3 migration epochs for testing - [#5434](https://github.com/filecoin-project/lotus/pull/5434) Implemented pre-migration framework -- [#5476](https://github.com/filecoin-project/lotus/pull/5477) Tune migration +- [#5476](https://github.com/filecoin-project/lotus/pull/5477) Tune migration # 1.4.1 / 2021-01-20 @@ -688,9 +773,9 @@ This is an optional Lotus release that introduces various improvements to the mi - Error out deals that are not activated by proposed deal start epoch (https://github.com/filecoin-project/lotus/pull/5061) # 1.2.1 / 2020-11-20 - + This is a very small release of Lotus that fixes an issue users are experiencing when importing snapshots. There is no need to upgrade unless you experience an issue with creating a new datastore directory in the Lotus repo. - + ## Changes - fix blockstore directory not created automatically (https://github.com/filecoin-project/lotus/pull/4922) @@ -710,7 +795,7 @@ The changes that break consensus are: - Correction of the VM circulating supply calculation (https://github.com/filecoin-project/lotus/pull/4862) - Retuning gas costs (https://github.com/filecoin-project/lotus/pull/4830) - Avoid sending messages to the zero BLS address (https://github.com/filecoin-project/lotus/pull/4888) - + ## Other Changes - delayed pubsub subscribe for messages topic (https://github.com/filecoin-project/lotus/pull/3646) @@ -867,7 +952,7 @@ This is an optional release of Lotus that upgrades Lotus dependencies, and inclu This is a patch release of Lotus that builds on the fixes involving worker keys that was introduced in v1.1.1. Miners and node operators should update to this release as soon as possible in order to ensure their blocks are propagated and validated. -## Changes +## Changes - Handle worker key changes correctly in runtime (https://github.com/filecoin-project/lotus/pull/4579) @@ -1110,7 +1195,7 @@ This consensus-breaking release of Lotus upgrades the actors version to v2.0.0. - Fix pond (https://github.com/filecoin-project/lotus/pull/4203) - allow manual setting of noncefix fee cap (https://github.com/filecoin-project/lotus/pull/4205) - implement command to get execution traces of any message (https://github.com/filecoin-project/lotus/pull/4200) -- conformance: minor driver refactors (https://github.com/filecoin-project/lotus/pull/4211) +- conformance: minor driver refactors (https://github.com/filecoin-project/lotus/pull/4211) - lotus-pcr: ignore all other messages (https://github.com/filecoin-project/lotus/pull/4218) - lotus-pcr: zero refund (https://github.com/filecoin-project/lotus/pull/4229) @@ -1137,7 +1222,7 @@ We are grateful for every contribution! This optional release of Lotus introduces a new version of markets which switches to CBOR-map encodings, and allows datastore migrations. The release also introduces several improvements to the mining process, a few performance optimizations, and a battery of UX additions and enhancements. -## Changes +## Changes #### Dependencies @@ -1208,7 +1293,7 @@ This consensus-breaking release of Lotus introduces an upgrade to the network. T This release also updates go-fil-markets to fix an incompatibility issue between v0.7.2 and earlier versions. -## Changes +## Changes #### Dependencies @@ -1297,7 +1382,7 @@ This optional release of Lotus introduces some critical fixes to the window PoSt ## Changes -#### Some notable improvements: +#### Some notable improvements: - Correctly construct params for `SubmitWindowedPoSt` messages (https://github.com/filecoin-project/lotus/pull/3909) - Skip sectors correctly for Window PoSt (https://github.com/filecoin-project/lotus/pull/3839) @@ -1333,7 +1418,7 @@ This consensus-breaking release of Lotus is designed to test a network upgrade o - Drand upgrade (https://github.com/filecoin-project/lotus/pull/3670) - Multisig API additions (https://github.com/filecoin-project/lotus/pull/3590) -#### Storage Miner +#### Storage Miner - Increase the number of times precommit2 is attempted before moving back to precommit1 (https://github.com/filecoin-project/lotus/pull/3720) @@ -1376,7 +1461,7 @@ This release introduces some critical fixes to message selection and gas estimat ## Changes -#### Messagepool +#### Messagepool - Warn when optimal selection fails to pack a block and we fall back to random selection (https://github.com/filecoin-project/lotus/pull/3708) - Add basic command for printing gas performance of messages in the mpool (https://github.com/filecoin-project/lotus/pull/3701) @@ -1446,7 +1531,7 @@ This release also introduces many improvements to Lotus! Among them are a new ve - Add additional info about gas premium (https://github.com/filecoin-project/lotus/pull/3578) - Fix GasPremium capping logic (https://github.com/filecoin-project/lotus/pull/3552) -#### Payment channels +#### Payment channels - Get available funds by address or by from/to (https://github.com/filecoin-project/lotus/pull/3547) - Create `lotus paych status` command (https://github.com/filecoin-project/lotus/pull/3523) @@ -1496,7 +1581,7 @@ This patch includes a crucial fix to the message pool selection logic, strongly This patch includes a hotfix to the `GasEstimateFeeCap` method, capping the estimated fee to a reasonable level by default. -## Changes +## Changes - Added target height to sync wait (https://github.com/filecoin-project/lotus/pull/3502) - Disable codecov annotations (https://github.com/filecoin-project/lotus/pull/3514) @@ -1526,7 +1611,7 @@ This patch includes some bugfixes to the sector sealing process, and updates go- # 0.5.7 / 2020-08-31 -This patch release includes some bugfixes and enhancements to the sector lifecycle and message pool logic. +This patch release includes some bugfixes and enhancements to the sector lifecycle and message pool logic. ## Changes @@ -1546,7 +1631,7 @@ Hotfix release that fixes a panic in the sealing scheduler (https://github.com/f # 0.5.5 This patch release introduces a large number of improvements to the sealing process. -It also updates go-fil-markets to +It also updates go-fil-markets to [version 0.5.8](https://github.com/filecoin-project/go-fil-markets/releases/tag/v0.5.8), and go-libp2p-pubsub to [v0.3.5](https://github.com/libp2p/go-libp2p-pubsub/releases/tag/v0.3.5). @@ -1559,16 +1644,16 @@ and go-libp2p-pubsub to [v0.3.5](https://github.com/libp2p/go-libp2p-pubsub/rele - The following improvements were introduced in https://github.com/filecoin-project/lotus/pull/3350. - - Allow `lotus-miner sectors remove` to remove a sector in any state. - - Create a separate state in the storage FSM dedicated to submitting the Commit message. - - Recovery for when the Deal IDs of deals in a sector get changed in a reorg. - - Auto-retry sending Precommit and Commit messages if they run out of gas - - Auto-retry sector remove tasks when they fail - - Compact worker windows, and allow their tasks to be executed in any order + - Allow `lotus-miner sectors remove` to remove a sector in any state. + - Create a separate state in the storage FSM dedicated to submitting the Commit message. + - Recovery for when the Deal IDs of deals in a sector get changed in a reorg. + - Auto-retry sending Precommit and Commit messages if they run out of gas + - Auto-retry sector remove tasks when they fail + - Compact worker windows, and allow their tasks to be executed in any order - Don't simply skip PoSt for bad sectors (https://github.com/filecoin-project/lotus/pull/3323) -#### Message Pool +#### Message Pool - Spam Protection: Track required funds for pending messages (https://github.com/filecoin-project/lotus/pull/3313) @@ -1593,7 +1678,7 @@ A patch release, containing a few nice bugfixes and improvements: # 0.5.3 -Yet another hotfix release. +Yet another hotfix release. A lesson for readers, having people who have been awake for 12+ hours review your hotfix PR is not a good idea. Find someone who has enough slept recently enough to give you good code review, otherwise you'll end up quickly bumping @@ -1612,9 +1697,9 @@ This is a hotfix release. # 0.5.1 / 2020-08-24 -The Space Race release! +The Space Race release! This release contains the genesis car file and bootstrap peers for the space -race network. +race network. Additionally, we included two small fixes to genesis creation: - Randomize ticket value in genesis generation @@ -1632,9 +1717,9 @@ Among the highlights included in this release are: - Gas changes: We implemented EIP-1559 and introduced real gas values. - Deal-making: We now support "Committed Capacity" sectors, "fast-retrieval" deals, -and the packing of multiple deals into a single sector. + and the packing of multiple deals into a single sector. - Renamed features: We renamed some of the binaries, environment variables, and default -paths associated with a Lotus node. + paths associated with a Lotus node. ### Gas changes @@ -1642,19 +1727,19 @@ We made some significant changes to the mechanics of gas in this release. #### Network fee -We implemented something similar to +We implemented something similar to [Ethereum's EIP-1559](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md). The `Message` structure had three changes: - The `GasPrice` field has been removed - A new `GasFeeCap` field has been added, which controls the maximum cost -the sender incurs for the message + the sender incurs for the message - A new `GasPremium` field has been added, which controls the reward a miner -earns for including the message + earns for including the message -A sender will never be charged more than `GasFeeCap * GasLimit`. +A sender will never be charged more than `GasFeeCap * GasLimit`. A miner will typically earn `GasPremium * GasLimit` as a reward. -The `Blockheader` structure has one new field, called `ParentBaseFee`. +The `Blockheader` structure has one new field, called `ParentBaseFee`. Informally speaking,the `ParentBaseFee` is increased when blocks are densely packed with messages, and decreased otherwise. From 64567d7f3223771b73ed25cf40de2b94f5598cf1 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Wed, 23 Jun 2021 18:49:52 -0700 Subject: [PATCH 09/14] add simulation projections to changelog --- CHANGELOG.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c6c2ab5414..261f41217d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,16 @@ Note: ### Projected state tree growth -As a result of the accelerated onboardiPreCommitSectorsBatcng of storage onto the network, it is possible +In order to validate the Hyperdrive changes, we wrote a simulation to seal as many sectors as fast as possible assuming the same number and mix of 32GiB and 64GiB miners as the current network. + +Given these assumptions: + +- We'd expect a network storage growth rate of around 530PiB per day. +- We'd expect network bandwidth dedicated to `SubmitWindowedPoSt` to grow by about 0.02% per day. +- We'd expect the [state-tree](https://spec.filecoin.io/#section-systems.filecoin_vm.state_tree) to grow by 1.6GiB per day. + - Nearly all of the state-tree growth is expected to come from new sector metadata. +- We'd expect the daily lotus datastore growth rate to increase by about 10-15%. + - Most "growth" of the lotus datastore is due to "churn", historical data that's no longer referenced by the latest state-tree. ### Hardware requirements and suggestions From efaa7b0d7600cdfa7be7f8f6f7c6cda728997f14 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Wed, 23 Jun 2021 19:02:14 -0700 Subject: [PATCH 10/14] update contributors to include all filecoin projects --- CHANGELOG.md | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 261f41217d6..62180e2276f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -120,18 +120,23 @@ Included in the HyperDrive upgrade is [FIP-0015](https://github.com/filecoin-pro 💙Thank you to all the contributors! -| Contributor | Commits | Lines ± | Files Changed | -|-------------|---------|---------|---------------| -| Łukasz Magiera | 75 | +9088/-1452 | 348 | -| Aayush Rajasekaran | 38 | +6525/-651 | 184 | -| Jennifer Wang | 10 | +575/-104 | 21 | -| Steven Allen | 2 | +272/-8 | 6 | -| vyzo | 6 | +155/-66 | 13 | -| Cory Schwartz | 10 | +171/-27 | 14 | -| Jakub Sztandera | 4 | +177/-13 | 7 | -| Peter Rabbitson | 4 | +65/-42 | 5 | -| Travis Person | 2 | +11/-11 | 4 | -| wangchao | 2 | +3/-2 | 2 | +| Contributor | Commits | Lines ± | Files Changed | +|--------------------|---------|-------------|---------------| +| Łukasz Magiera | 81 | +9606/-1536 | 361 | +| Aayush Rajasekaran | 41 | +6543/-679 | 189 | +| ZenGround0 | 11 | +4074/-727 | 110 | +| Alex | 10 | +2035/-1177 | 55 | +| Ian Davis | 1 | +779/-12 | 5 | +| Frrist | 2 | +722/-6 | 6 | +| Steven Allen | 6 | +368/-24 | 15 | +| Jennifer Wang | 11 | +204/-111 | 19 | +| vyzo | 6 | +155/-66 | 13 | +| Cory Schwartz | 10 | +171/-27 | 14 | +| Jakub Sztandera | 4 | +177/-13 | 7 | +| Peter Rabbitson | 4 | +65/-42 | 5 | +| Travis Person | 2 | +11/-11 | 4 | +| Kirk Baird | 1 | +1/-5 | 1 | +| wangchao | 2 | +3/-2 | 2 | # 1.9.0 / 2021-05-17 From 1411cff69e3dd05dc2be073e104606ab88d34490 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Wed, 23 Jun 2021 19:03:24 -0700 Subject: [PATCH 11/14] change mkreleaselog script to only include filecoin-project --- scripts/mkreleaselog | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/scripts/mkreleaselog b/scripts/mkreleaselog index c5902707501..c9eaef4fb47 100755 --- a/scripts/mkreleaselog +++ b/scripts/mkreleaselog @@ -5,26 +5,7 @@ export GOPATH="$(go env GOPATH)" alias jq="jq --unbuffered" -AUTHORS=( - # orgs - ipfs - ipld - libp2p - multiformats - filecoin-project - ipfs-shipyard - - # Authors of personal repos used by go-ipfs that should be mentioned in the - # release notes. - whyrusleeping - Kubuxu - jbenet - Stebalien - marten-seemann - hsanjuan - lucas-clemente - warpfork -) +AUTHORS=(filecoin-project) [[ -n "${REPO_FILTER+x}" ]] || REPO_FILTER="github.com/(${$(printf "|%s" "${AUTHORS[@]}"):1})" From f5fad636cf92b5660b6f315afbc7fa617750dd3a Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Wed, 23 Jun 2021 19:09:43 -0700 Subject: [PATCH 12/14] Apply edits Co-authored-by: MollyM --- CHANGELOG.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62180e2276f..b88ad1d403f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,9 +14,9 @@ Note that this release is built on top of Lotus v1.9.0. Enterprising users can u ## Proof batching and aggregation -FIPs [0008](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0008.md) and [0013](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0013.md) combine to allow for a significant increase in the rate of onboarding storage on the Filecoin network. It is hoped that this will lead to more useful data being stored on the network, reduced network congestion, and lower network base fee. +FIPs [0008](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0008.md) and [0013](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0013.md) combine to allow for a significant increase in the rate of onboarding storage on the Filecoin network. This aims to lead to more useful data being stored on the network, reduced network congestion, and lower network base fee. -**Check out the documentation [here](https://docs.filecoin.io/mine/lotus/miner-configuration/#precommitsectorsbatch) for details of the new Lotus miner sealing config options, [here](https://docs.filecoin.io/mine/lotus/miner-configuration/#fees-section) for fee config options, and explanations of the new features.** +**Check out the documentation [here](https://docs.filecoin.io/mine/lotus/miner-configuration/#precommitsectorsbatch) for details on the new Lotus miner sealing config options, [here](https://docs.filecoin.io/mine/lotus/miner-configuration/#fees-section) for fee config options, and explanations of the new features.** Note: - We recommend to keep `PreCommitSectorsBatch` as 1. @@ -25,15 +25,15 @@ Note: ### Projected state tree growth -In order to validate the Hyperdrive changes, we wrote a simulation to seal as many sectors as fast as possible assuming the same number and mix of 32GiB and 64GiB miners as the current network. +In order to validate the Hyperdrive changes, we wrote a simulation to seal as many sectors as quickly as possible, assuming the same number and mix of 32GiB and 64GiB miners as the current network. Given these assumptions: -- We'd expect a network storage growth rate of around 530PiB per day. +- We'd expect a network storage growth rate of around 530PiB per day. 😳 🎉 🥳 😅 - We'd expect network bandwidth dedicated to `SubmitWindowedPoSt` to grow by about 0.02% per day. -- We'd expect the [state-tree](https://spec.filecoin.io/#section-systems.filecoin_vm.state_tree) to grow by 1.6GiB per day. +- We'd expect the [state-tree](https://spec.filecoin.io/#section-systems.filecoin_vm.state_tree) (and therefore [snapshot](https://docs.filecoin.io/get-started/lotus/chain/#lightweight-snapshot)) size to grow by 1.16GiB per day. - Nearly all of the state-tree growth is expected to come from new sector metadata. -- We'd expect the daily lotus datastore growth rate to increase by about 10-15%. +- We'd expect the daily lotus datastore growth rate to increase by about 10-15% (from current ~21GiB/day). - Most "growth" of the lotus datastore is due to "churn", historical data that's no longer referenced by the latest state-tree. ### Hardware requirements and suggestions From 7779d446ce9e235c863fbd183868adb27861b0b6 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Wed, 23 Jun 2021 19:18:27 -0700 Subject: [PATCH 13/14] remove hardware suggestion section This isn't useful in its current state and isn't urgent at this point. We can publish recommendations later. --- CHANGELOG.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b88ad1d403f..7fac8797c91 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,10 +36,6 @@ Given these assumptions: - We'd expect the daily lotus datastore growth rate to increase by about 10-15% (from current ~21GiB/day). - Most "growth" of the lotus datastore is due to "churn", historical data that's no longer referenced by the latest state-tree. -### Hardware requirements and suggestions - -As the size of a single state tree grows, so will the size of the minimal datastore needed to sync the blockchain. The Filecoin protocol requires any node validating the chain to have the last 1800 state trees (2 * `ChainFinality`). Depending on how fast storage providers seal new sectors, this could get as large as AMOUNT in 6 months, and grow as fast as 20 GB per day. This increases the necessary hardware requirements to validate the Filecoin blockchain, but can be supported by images such as [Amazon EC2](https://aws.amazon.com/ec2/instance-explorer/?ec2-instances-cards.sort-by=item.additionalFields.category-order&ec2-instances-cards.sort-order=asc&awsf.ec2-instances-filter-category=*all&awsf.ec2-instances-filter-processors=*all&awsf.ec2-instances-filter-accelerators=*all&awsf.ec2-instances-filter-capabilities=additional-capabilities%23instance-storage&ec2-instances-cards.q=ssd&ec2-instances-cards.q_operator=AND&awsm.page-ec2-instances-cards=1) and [Google Cloud Platform](https://cloud.google.com/compute/docs/machine-types). - ### Future improvements Various Lotus improvements are planned moving forward to mitigate the effects of the growing state tree size. The primary improvement is the [Lotus splitstore](https://github.com/filecoin-project/lotus/discussions/5788), which will soon be enabled by default. The feature allows for [online garbage collection](https://github.com/filecoin-project/lotus/issues/6577) for nodes that do not seek to maintain full chain and state history, thus eliminating the need for users to delete their datastores and sync from snapshots. From 28f2f96b65cac8f2ff736d2c6d42c1cb7c6096fa Mon Sep 17 00:00:00 2001 From: Jennifer Wang Date: Wed, 23 Jun 2021 22:29:03 -0400 Subject: [PATCH 14/14] more edits --- CHANGELOG.md | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7fac8797c91..a724c841db8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,9 @@ # 1.10.0 / 2021-06-23 -This is a mandatory release of Lotus that introduces Filecoin network v13, codenamed the HyperDrive upgrade. The Filecoin mainnet will upgrade, which is 2021-06-30T22:00:00Z. The network upgrade introduces the following FIPs: +This is a mandatory release of Lotus that introduces Filecoin network v13, codenamed the HyperDrive upgrade. The +Filecoin mainnet will upgrade, which is epoch 892800, on 2021-06-30T22:00:00Z. The network upgrade introduces the +following FIPs: - [FIP-0008](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0008.md): Add miner batched sector pre-commit method - [FIP-0011](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0011.md): Remove reward auction from reporting consensus faults @@ -21,7 +23,8 @@ FIPs [0008](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0008.m Note: - We recommend to keep `PreCommitSectorsBatch` as 1. - We recommend miners to set `PreCommitBatchWait` lower than 30 hours. - - We recommend miners to set a longer `CommitBatchSlack` and `PreCommitBatchSlac` to prevent message failures due to expirations. + - We recommend miners to set a longer `CommitBatchSlack` and `PreCommitBatchSlack` to prevent message failures + due to expirations. ### Projected state tree growth @@ -118,21 +121,21 @@ Included in the HyperDrive upgrade is [FIP-0015](https://github.com/filecoin-pro | Contributor | Commits | Lines ± | Files Changed | |--------------------|---------|-------------|---------------| -| Łukasz Magiera | 81 | +9606/-1536 | 361 | -| Aayush Rajasekaran | 41 | +6543/-679 | 189 | -| ZenGround0 | 11 | +4074/-727 | 110 | -| Alex | 10 | +2035/-1177 | 55 | -| Ian Davis | 1 | +779/-12 | 5 | -| Frrist | 2 | +722/-6 | 6 | -| Steven Allen | 6 | +368/-24 | 15 | -| Jennifer Wang | 11 | +204/-111 | 19 | -| vyzo | 6 | +155/-66 | 13 | -| Cory Schwartz | 10 | +171/-27 | 14 | -| Jakub Sztandera | 4 | +177/-13 | 7 | -| Peter Rabbitson | 4 | +65/-42 | 5 | -| Travis Person | 2 | +11/-11 | 4 | -| Kirk Baird | 1 | +1/-5 | 1 | -| wangchao | 2 | +3/-2 | 2 | +| @magik6k | 81 | +9606/-1536 | 361 | +| @arajasek | 41 | +6543/-679 | 189 | +| @ZenGround0 | 11 | +4074/-727 | 110 | +| @anorth | 10 | +2035/-1177 | 55 | +| @iand | 1 | +779/-12 | 5 | +| @frrist | 2 | +722/-6 | 6 | +| @Stebalien | 6 | +368/-24 | 15 | +| @jennijuju | 11 | +204/-111 | 19 | +| @vyzo | 6 | +155/-66 | 13 | +| @coryschwartz | 10 | +171/-27 | 14 | +| @Kubuxu | 4 | +177/-13 | 7 | +| @ribasushi | 4 | +65/-42 | 5 | +| @travisperson | 2 | +11/-11 | 4 | +| @kirk-baird | 1 | +1/-5 | 1 | +| @wangchao | 2 | +3/-2 | 2 | # 1.9.0 / 2021-05-17