From 372dd2ced9d68b4309e934c608ebd7ee7d96ecb9 Mon Sep 17 00:00:00 2001 From: jennijuju Date: Wed, 13 Apr 2022 19:07:29 +0200 Subject: [PATCH 01/21] v1.15.2-rc1 --- CHANGELOG.md | 144 +++++++++++++++++++++++++++ build/openrpc/full.json.gz | Bin 27011 -> 27011 bytes build/openrpc/miner.json.gz | Bin 13540 -> 13540 bytes build/openrpc/worker.json.gz | Bin 4528 -> 4528 bytes build/version.go | 2 +- documentation/en/cli-lotus-miner.md | 2 +- documentation/en/cli-lotus-worker.md | 2 +- documentation/en/cli-lotus.md | 2 +- 8 files changed, 148 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5eef6bb99..9bb937903 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,149 @@ # Lotus changelog +# 1.15.2-rc1 / 2022-04-13 + +This is the first release candidate of the next highly recommended feature release v1.15.2. This feature release introduces many new features and for SPs, including PoSt workers, sealing scheduler, snap deal queue and so on. + +## Highlights +### ❣️❣️❣️ PoSt Workers ❣️❣️❣️ +‼️️Attention - the long-awaited yet highly requested PoSt workers, they are here! And they come in as a combo: you may setup PoSt workers for both winningPoSt or/and windowPoSt worker. You can also setup any number of PoSt workers as long as you have the hardware resources! +For more details and learn how to set it up, see the (WIP) docs [here](https://deploy-preview-158--lotus-docs.netlify.app/storage-providers/seal-workers/post-workers/). You can also find early result of the PoSt workers performance by the community [here](https://github.com/filecoin-project/lotus/discussions/8375). +- feat: PoSt workers ([filecoin-project/lotus#7971](https://github.com/filecoin-project/lotus/pull/7971)) +- feat: storage: Parallel proving checks ([filecoin-project/lotus#8391](https://github.com/filecoin-project/lotus/pull/8391)) + - adjust `ParallelCheckLimit` according to your resource setup to get pre-post checkers run faster! + +In addition, we also added some handy toolings: +- feat: miner: API/CLI to compute window-post ([filecoin-project/lotus#8389](https://github.com/filecoin-project/lotus/pull/8389)) + - run `lotus-miner proving compute window-post` to manually trigger a full windowPoSt computation for a specific deadline for full sanity checks. +- feat: miner cli: Separate proving workers command ([filecoin-project/lotus#8379](https://github.com/filecoin-project/lotus/pull/8379)) + - run `lotus-miner proving workers` to list all the PoSt workers that's attached +- feat: miner cli: proving check --faulty, faults in storage list sectors ([filecoin-project/lotus#8349](https://github.com/filecoin-project/lotus/pull/8349)) + - run `lotus-miner proving check --faulty` to identify the sectors that might be bad. + +### 🔥🔥🔥 Sealing Scheduler Enhancement 🔥🔥🔥 + +Have you ever got a couple workers but only a few of them are super packed, while the rest are idling waiting for jobs? Now the task can be distributed more evenly with: +- feat: sched: Improve worker assigning logic ([filecoin-project/lotus#8447](https://github.com/filecoin-project/lotus/pull/8447)) + +### 🌟🌟🌟 Snap Deal Enhancements 🌟🌟🌟 + +The Filecoin Network introduced Snap Deal with the network v15 OhSnap upgrade, and lotus shipped v1.14.0 with basic snappy support for SP to use this feature. Since then, we have received good ux feedbacks and bug reports from the community, and we are introducing a couple enhancement for SPs to better leverage this feature. + +- feat: sealing: Sector upgrade queue ([filecoin-project/lotus#8330](https://github.com/filecoin-project/lotus/pull/8330)) + - Snap up CCs to be ready for deals automatically, learn more [here](https://lotus.filecoin.io/storage-providers/operate/snap-deals/#snap-deal-queue) +- feat: sealing: More SnapDeals config knobs ([filecoin-project/lotus#8343](https://github.com/filecoin-project/lotus/pull/8343)) + - SPs can now set `PreferNewSectorsForDeals` and `MaxUpgradingSectors` to better manage their sealing/dealing pipeline. +- feat: config: Move MakeNewSectorForDeals config into the Sealing sectoin ([filecoin-project/lotus#8378](https://github.com/filecoin-project/lotus/pull/8378)) +- fix: sealing: Release unsealed sector files after snapdeals abort ([filecoin-project/lotus#8438](https://github.com/filecoin-project/lotus/pull/8438)) +- fix: sealing: always do cooldown in handleSubmitReplicaUpdateFailed ([filecoin-project/lotus#8353](https://github.com/filecoin-project/lotus/pull/8353)) +- fix: storagefsm: Fix error loop on bad event ([filecoin-project/lotus#8338](https://github.com/filecoin-project/lotus/pull/8338)) +- fix: sealing: Remove sector copies from workers after snapdeals ([filecoin-project/lotus#8329](https://github.com/filecoin-project/lotus/pull/8329)) + +## New Features +- enable rcmgr by default ([filecoin-project/lotus#8470](https://github.com/filecoin-project/lotus/pull/8470)) +- feat: cli: lotus client list-asks --protocols ([filecoin-project/lotus#8464](https://github.com/filecoin-project/lotus/pull/8464)) +- feat: shed: Multi-file vlog2car ([filecoin-project/lotus#8426](https://github.com/filecoin-project/lotus/pull/8426)) +- feat: worker: check fd limit on startup ([filecoin-project/lotus#8390](https://github.com/filecoin-project/lotus/pull/8390)) +- feat: lotus-shed: add command to compute state over a range of tipsets. ([filecoin-project/lotus#8371](https://github.com/filecoin-project/lotus/pull/8371)) +- feat: cli/net: implement 'net ping' command ([filecoin-project/lotus#8357](https://github.com/filecoin-project/lotus/pull/8357)) +- feat: stmgr: call: use a buffered concurrent-access blockstore ([filecoin-project/lotus#8358](https://github.com/filecoin-project/lotus/pull/8358)) +- feat: infra/ci: add `lotus-test` image as CI build step ([filecoin-project/lotus#7956](https://github.com/filecoin-project/lotus/pull/7956)) +- feat: multisig: lotus-sheed miner-multisig change-worker command. ([filecoin-project/lotus#8281](https://github.com/filecoin-project/lotus/pull/8281)) +- feat: Add additional test annotations (#8272) ([filecoin-project/lotus#8272](https://github.com/filecoin-project/lotus/pull/8272)) + +## Improvements +- Revert appimage removal ([filecoin-project/lotus#8439](https://github.com/filecoin-project/lotus/pull/8439)) +- sealing: Don't panic in ReleaseUnsealed with no ranges ([filecoin-project/lotus#8461](https://github.com/filecoin-project/lotus/pull/8461)) +- testkit: give up on waiting for the RPC server to shutdown after 1s ([filecoin-project/lotus#8450](https://github.com/filecoin-project/lotus/pull/8450)) +- chore: events: implement event observer deregister method ([filecoin-project/lotus#8441](https://github.com/filecoin-project/lotus/pull/8441)) +- Thread safe piecereader ([filecoin-project/lotus#8397](https://github.com/filecoin-project/lotus/pull/8397)) +- VM: Refactor pricelist to be based on network versions ([filecoin-project/lotus#8369](https://github.com/filecoin-project/lotus/pull/8369)) +- --max-piece-size in set-ask is no longer required ([filecoin-project/lotus#8361](https://github.com/filecoin-project/lotus/pull/8361)) +- refactor: convert RepoType from int to interface ([filecoin-project/lotus#8086](https://github.com/filecoin-project/lotus/pull/8086)) +- Shed: fix error message ([filecoin-project/lotus#8340](https://github.com/filecoin-project/lotus/pull/8340)) + +## Bug Fixes +- fix: FVM: add finality check for consensus faults ([filecoin-project/lotus#8452](https://github.com/filecoin-project/lotus/pull/8452)) +- fix: market: Reuse the market `PubSub` in index provider ([filecoin-project/lotus#8443](https://github.com/filecoin-project/lotus/pull/8443)) +- fix: market: set all index provider options based on lotus config ([filecoin-project/lotus#8444](https://github.com/filecoin-project/lotus/pull/8444)) +- release worker tracker lock when call cb func ([filecoin-project/lotus#8206](https://github.com/filecoin-project/lotus/pull/8206)) +- fix: node: Fix market node startup ([filecoin-project/lotus#8425](https://github.com/filecoin-project/lotus/pull/8425)) +- fix: sealing: Fix PR1 worker selection ([filecoin-project/lotus#8420](https://github.com/filecoin-project/lotus/pull/8420)) +- fix: go: make Go 1.18 builds work ([filecoin-project/lotus#8410](https://github.com/filecoin-project/lotus/pull/8410)) +- fix: sealing: Added error checking ([filecoin-project/lotus#8404](https://github.com/filecoin-project/lotus/pull/8404)) +- fix: ux: Change Propose-worker msg ([filecoin-project/lotus#8384](https://github.com/filecoin-project/lotus/pull/8384)) +- fix: miner: dead loop on removing sector ([filecoin-project/lotus#8386](https://github.com/filecoin-project/lotus/pull/8386)) +- fix: worker: Fix default value handling ([filecoin-project/lotus#8380](https://github.com/filecoin-project/lotus/pull/8380)) +- Revert "Update params for interopnet for fvm" ([filecoin-project/lotus#8374](https://github.com/filecoin-project/lotus/pull/8374)) +- fix: cli: Reset miner/ask lists in interactive deal 'miner' step (#8155) ([filecoin-project/lotus#8155](https://github.com/filecoin-project/lotus/pull/8155)) +- fix:snapup: Rename error message ([filecoin-project/lotus#8370](https://github.com/filecoin-project/lotus/pull/8370)) +- fix: multisig: Print "waiting for confirmation.." ([filecoin-project/lotus#8368](https://github.com/filecoin-project/lotus/pull/8368)) +- fix: lotus-wallet: pass correct repo type to repo.Init ([filecoin-project/lotus#8356](https://github.com/filecoin-project/lotus/pull/8356)) +- fix: avoid racy memstores when estimating gas ([filecoin-project/lotus#8351](https://github.com/filecoin-project/lotus/pull/8351)) +- fix: itests: Don't hang on exit in MineBlocksMustPost ([filecoin-project/lotus#8345](https://github.com/filecoin-project/lotus/pull/8345)) +- fix: miner cli: Estimate deal weight in sector list when upgrading ([filecoin-project/lotus#8336](https://github.com/filecoin-project/lotus/pull/8336)) +- fix: sealing: FinalizeSector doesn't need sealed replica access ([filecoin-project/lotus#8337](https://github.com/filecoin-project/lotus/pull/8337)) +- fix: cli: add ArgsUsage field to clientGetDealCmd ([filecoin-project/lotus#8241](https://github.com/filecoin-project/lotus/pull/8241)) + +## Dependency Updates +- Update libp2p to v0.18.1 ([filecoin-project/lotus#8469](https://github.com/filecoin-project/lotus/pull/8469)) +- chore: ffi: update the FFI to update the FVM ([filecoin-project/lotus#8440](https://github.com/filecoin-project/lotus/pull/8440)) +- deps: ffi: pull ffi that includes the latest fvm ([filecoin-project/lotus#8424](https://github.com/filecoin-project/lotus/pull/8424)) +- Update to go-log 2.5.1 ([filecoin-project/lotus#8422](https://github.com/filecoin-project/lotus/pull/8422)) +- chore(deps): update go-data-transfer with fixes (master edition) ([filecoin-project/lotus#8411](https://github.com/filecoin-project/lotus/pull/8411)) +- deps: update ffi with actor v7.1.0 and fvm that uses the bundle that includes the new manifest ([filecoin-project/lotus#8402](https://github.com/filecoin-project/lotus/pull/8402)) +- Update to specs-storage v0.2.2 ([filecoin-project/lotus#8400](https://github.com/filecoin-project/lotus/pull/8400)) +- chore: ffi: the latest fvm release ([filecoin-project/lotus#8381](https://github.com/filecoin-project/lotus/pull/8381)) +- Update params for interopnet for fvm ([filecoin-project/lotus#8119](https://github.com/filecoin-project/lotus/pull/8119)) +- github.com/filecoin-project/specs-storage (v0.2.0 -> v0.2.2): + +## Others +- chore: merge releases back to master ([filecoin-project/lotus#8468](https://github.com/filecoin-project/lotus/pull/8468)) +- Packer publish copy orb ([filecoin-project/lotus#8413](https://github.com/filecoin-project/lotus/pull/8413)) +- chore: Remove temp gomock reflect file ([filecoin-project/lotus#8372](https://github.com/filecoin-project/lotus/pull/8372)) +- chore: FVM: log when fvm is used ([filecoin-project/lotus#8363](https://github.com/filecoin-project/lotus/pull/8363)) +- lib: extract unixfs filestore into lib ([filecoin-project/lotus#8354](https://github.com/filecoin-project/lotus/pull/8354)) +- test: use `T.TempDir` to create temporary test directory ([filecoin-project/lotus#8295](https://github.com/filecoin-project/lotus/pull/8295)) +- Update Dockerfile.lotus +- chore:sealing:remove endpoint from cli ([filecoin-project/lotus#8215](https://github.com/filecoin-project/lotus/pull/8215)) +- chore: build: bump the master version to v1.15.2-dev ([filecoin-project/lotus#8322](https://github.com/filecoin-project/lotus/pull/8322)) + +## Contributors + +| Contributor | Commits | Lines ± | Files Changed | +|-------------|---------|---------|---------------| +| Łukasz Magiera | 95 | +5147/-2922 | 401 | +| mz-sirius | 3 | +1789/-546 | 48 | +| Anton Evangelatov | 11 | +777/-567 | 121 | +| Aayush | 11 | +336/-231 | 28 | +| Darko Brdareski | 1 | +463/-13 | 95 | +| Cory Schwartz | 11 | +147/-217 | 13 | +| spark8899 | 2 | +300/-0 | 2 | +| zenground0 | 2 | +6/-193 | 7 | +| Eng Zer Jun | 1 | +31/-158 | 11 | +| Kevin Li | 2 | +174/-0 | 14 | +| Aayush Rajasekaran | 5 | +85/-86 | 18 | +| Jiaying Wang | 1 | +0/-119 | 3 | +| jennijuju | 1 | +0/-98 | 6 | +| Raúl Kripalani | 1 | +60/-1 | 1 | +| frrist | 1 | +56/-0 | 2 | +| vyzo | 3 | +18/-16 | 5 | +| Masih H. Derkani | 3 | +29/-4 | 3 | +| Jennifer Wang | 4 | +18/-11 | 11 | +| hannahhoward | 1 | +13/-10 | 2 | +| Dirk McCormick | 1 | +21/-1 | 1 | +| koalacxr | 1 | +10/-11 | 4 | +| Aarsh Shah | 1 | +19/-1 | 1 | +| Rjan | 6 | +10/-8 | 7 | +| zl | 1 | +7/-1 | 1 | +| KAYUII | 1 | +3/-2 | 1 | +| simlecode | 1 | +4/-0 | 1 | +| dirkmc | 1 | +1/-3 | 1 | +| Jerry | 1 | +3/-0 | 1 | +| Steven Allen | 1 | +1/-1 | 1 | +| Geoff Stuart | 1 | +1/-0 | 1 | +| Florian Ruen | 1 | +0/-1 | 1 | + # 1.15.1 / 2022-04-07 This is a *HIGHLY recommended* feature release v1.15.1, especially for node operators and storage providers who want to be a part of the content addressing network of Filecoin and IPFS. diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index d8c0bdd3f9f0cda479c9c200a42c332c688847b3..081082b4f196f152309466d8918beb8dd85ced73 100644 GIT binary patch literal 27011 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 literal 27011 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 delta 22 ecmaEo`6P2fCzIN)jopDJ9Mk5mopEd?69WK$*$OxS diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index c086c69235adeed02fbdf886d3b249241dfc73f0..d4fffd6ee02bb654cd00a4e9042b89ab78dae2fc 100644 GIT binary patch delta 22 ecmdm>yg_+F3)98l8{3owIm{YGPhDYQWB>qe9SCXw delta 22 ecmdm>yg_+F3)6xAjcrPT91Ax;)49UJ$N&Isya>Gj diff --git a/build/version.go b/build/version.go index b22aa0d2a..b0c7435a8 100644 --- a/build/version.go +++ b/build/version.go @@ -37,7 +37,7 @@ func BuildTypeString() string { } // BuildVersion is the local build version -const BuildVersion = "1.15.2-dev" +const BuildVersion = "1.15.2-rc1" func UserVersion() string { if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" { diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index 81deed045..61b26c78c 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -7,7 +7,7 @@ USAGE: lotus-miner [global options] command [command options] [arguments...] VERSION: - 1.15.2-dev + 1.15.2-rc1 COMMANDS: init Initialize a lotus miner repo diff --git a/documentation/en/cli-lotus-worker.md b/documentation/en/cli-lotus-worker.md index 52445093a..cd07e744a 100644 --- a/documentation/en/cli-lotus-worker.md +++ b/documentation/en/cli-lotus-worker.md @@ -7,7 +7,7 @@ USAGE: lotus-worker [global options] command [command options] [arguments...] VERSION: - 1.15.2-dev + 1.15.2-rc1 COMMANDS: run Start lotus worker diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index 9c85f1dab..78dc54938 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -7,7 +7,7 @@ USAGE: lotus [global options] command [command options] [arguments...] VERSION: - 1.15.2-dev + 1.15.2-rc1 COMMANDS: daemon Start a lotus daemon process From d044e30e1256c0fa94e3260be0fc576187a6fe72 Mon Sep 17 00:00:00 2001 From: "Masih H. Derkani" Date: Thu, 21 Apr 2022 12:13:34 +0100 Subject: [PATCH 02/21] Infer index provider topic from network name by default Index provider integration uses a gossipsub topic to announce changes to the advertised content. The topic name was fixed to the default topic which is `/indexer/ingest/mainnet`. In the case of lotus, the gossipsub validators enforce a list of topics the instance is permitted to join by setting subscription filter option when `PubSub` instance is constructed via DI. Having the fixed topic name meant that any SP starting up a node on a network other than `mainnet` would have to override the default config to avoid the node crashing when index provider is enabled. Instead of a fixed default, the changes here infer the allowed indexer topic name from network name automatically if the topic configuration is left empty. Fixes #8510 --- .../en/default-lotus-miner-config.toml | 6 +- node/config/def.go | 6 +- node/config/def_test.go | 4 +- node/config/doc_gen.go | 4 +- node/config/types.go | 4 +- node/modules/storageminer_idxprov.go | 28 ++++-- node/modules/storageminer_idxprov_test.go | 97 +++++++++++++++++++ 7 files changed, 134 insertions(+), 15 deletions(-) create mode 100644 node/modules/storageminer_idxprov_test.go diff --git a/documentation/en/default-lotus-miner-config.toml b/documentation/en/default-lotus-miner-config.toml index 22c2b1ce8..531564b6d 100644 --- a/documentation/en/default-lotus-miner-config.toml +++ b/documentation/en/default-lotus-miner-config.toml @@ -291,11 +291,13 @@ #EntriesChunkSize = 16384 # TopicName sets the topic name on which the changes to the advertised content are announced. - # Defaults to '/indexer/ingest/mainnet' if not specified. + # If not explicitly specified, the topic name is automatically inferred from the network name + # in following format: '/indexer/ingest/' + # Defaults to empty, which implies the topic name is inferred from network name. # # type: string # env var: LOTUS_INDEXPROVIDER_TOPICNAME - #TopicName = "/indexer/ingest/mainnet" + #TopicName = "" # PurgeCacheOnStart sets whether to clear any cached entries chunks when the provider engine # starts. By default, the cache is rehydrated from previously cached entries stored in diff --git a/node/config/def.go b/node/config/def.go index b7ab39d3d..69c7c5f35 100644 --- a/node/config/def.go +++ b/node/config/def.go @@ -196,8 +196,10 @@ func DefaultStorageMiner() *StorageMiner { Enable: true, EntriesCacheCapacity: 1024, EntriesChunkSize: 16384, - TopicName: "/indexer/ingest/mainnet", - PurgeCacheOnStart: false, + // The default empty TopicName means it is inferred from network name, in the following + // format: "/indexer/ingest/" + TopicName: "", + PurgeCacheOnStart: false, }, Subsystems: MinerSubsystemConfig{ diff --git a/node/config/def_test.go b/node/config/def_test.go index 9a450e66b..d644ae336 100644 --- a/node/config/def_test.go +++ b/node/config/def_test.go @@ -74,8 +74,8 @@ func TestDefaultMinerRoundtrip(t *testing.T) { require.True(t, reflect.DeepEqual(c, c2)) } -func TestDefaultStorageMiner_SetsIndexIngestTopic(t *testing.T) { +func TestDefaultStorageMiner_IsEmpty(t *testing.T) { subject := DefaultStorageMiner() require.True(t, subject.IndexProvider.Enable) - require.Equal(t, "/indexer/ingest/mainnet", subject.IndexProvider.TopicName) + require.Equal(t, "", subject.IndexProvider.TopicName) } diff --git a/node/config/doc_gen.go b/node/config/doc_gen.go index c86cf975a..0ed52f51c 100644 --- a/node/config/doc_gen.go +++ b/node/config/doc_gen.go @@ -404,7 +404,9 @@ advertisements that include more multihashes than the configured EntriesChunkSiz Type: "string", Comment: `TopicName sets the topic name on which the changes to the advertised content are announced. -Defaults to '/indexer/ingest/mainnet' if not specified.`, +If not explicitly specified, the topic name is automatically inferred from the network name +in following format: '/indexer/ingest/' +Defaults to empty, which implies the topic name is inferred from network name.`, }, { Name: "PurgeCacheOnStart", diff --git a/node/config/types.go b/node/config/types.go index 9d0d68dd3..958fa7031 100644 --- a/node/config/types.go +++ b/node/config/types.go @@ -186,7 +186,9 @@ type IndexProviderConfig struct { EntriesChunkSize int // TopicName sets the topic name on which the changes to the advertised content are announced. - // Defaults to '/indexer/ingest/mainnet' if not specified. + // If not explicitly specified, the topic name is automatically inferred from the network name + // in following format: '/indexer/ingest/' + // Defaults to empty, which implies the topic name is inferred from network name. TopicName string // PurgeCacheOnStart sets whether to clear any cached entries chunks when the provider engine diff --git a/node/modules/storageminer_idxprov.go b/node/modules/storageminer_idxprov.go index 365648691..1102f8295 100644 --- a/node/modules/storageminer_idxprov.go +++ b/node/modules/storageminer_idxprov.go @@ -13,6 +13,7 @@ import ( "go.uber.org/fx" "golang.org/x/xerrors" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/node/config" "github.com/filecoin-project/lotus/node/modules/dtypes" ) @@ -24,8 +25,20 @@ type IdxProv struct { Datastore dtypes.MetadataDS } -func IndexProvider(cfg config.IndexProviderConfig) func(params IdxProv, marketHost host.Host, dt dtypes.ProviderDataTransfer, maddr dtypes.MinerAddress, ps *pubsub.PubSub) (provider.Interface, error) { - return func(args IdxProv, marketHost host.Host, dt dtypes.ProviderDataTransfer, maddr dtypes.MinerAddress, ps *pubsub.PubSub) (provider.Interface, error) { +func IndexProvider(cfg config.IndexProviderConfig) func(params IdxProv, marketHost host.Host, dt dtypes.ProviderDataTransfer, maddr dtypes.MinerAddress, ps *pubsub.PubSub, nn dtypes.NetworkName) (provider.Interface, error) { + return func(args IdxProv, marketHost host.Host, dt dtypes.ProviderDataTransfer, maddr dtypes.MinerAddress, ps *pubsub.PubSub, nn dtypes.NetworkName) (provider.Interface, error) { + topicName := cfg.TopicName + // If indexer topic name is left empty, infer it from the network name. + if topicName == "" { + // Use the same mechanism as the Dependency Injection (DI) to construct the topic name, + // so that we are certain it is consistent with the name allowed by the subscription + // filter. + // + // See: lp2p.GossipSub. + topicName = build.IndexerIngestTopic(nn) + log.Debugw("Inferred indexer topic from network name", "topic", topicName) + } + ipds := namespace.Wrap(args.Datastore, datastore.NewKey("/index-provider")) var opts = []engine.Option{ engine.WithDatastore(ipds), @@ -33,24 +46,24 @@ func IndexProvider(cfg config.IndexProviderConfig) func(params IdxProv, marketHo engine.WithRetrievalAddrs(marketHost.Addrs()...), engine.WithEntriesCacheCapacity(cfg.EntriesCacheCapacity), engine.WithEntriesChunkSize(cfg.EntriesChunkSize), - engine.WithTopicName(cfg.TopicName), + engine.WithTopicName(topicName), engine.WithPurgeCacheOnStart(cfg.PurgeCacheOnStart), } llog := log.With( "idxProvEnabled", cfg.Enable, "pid", marketHost.ID(), - "topic", cfg.TopicName, + "topic", topicName, "retAddrs", marketHost.Addrs()) // If announcements to the network are enabled, then set options for datatransfer publisher. if cfg.Enable { // Join the indexer topic using the market's pubsub instance. Otherwise, the provider // engine would create its own instance of pubsub down the line in go-legs, which has // no validators by default. - t, err := ps.Join(cfg.TopicName) + t, err := ps.Join(topicName) if err != nil { llog.Errorw("Failed to join indexer topic", "err", err) - return nil, xerrors.Errorf("joining indexer topic %s: %w", cfg.TopicName, err) + return nil, xerrors.Errorf("joining indexer topic %s: %w", topicName, err) } // Get the miner ID and set as extra gossip data. @@ -62,9 +75,10 @@ func IndexProvider(cfg config.IndexProviderConfig) func(params IdxProv, marketHo engine.WithExtraGossipData(ma.Bytes()), engine.WithTopic(t), ) - llog = llog.With("extraGossipData", ma) + llog = llog.With("extraGossipData", ma, "publisher", "data-transfer") } else { opts = append(opts, engine.WithPublisherKind(engine.NoPublisher)) + llog = llog.With("publisher", "none") } // Instantiate the index provider engine. diff --git a/node/modules/storageminer_idxprov_test.go b/node/modules/storageminer_idxprov_test.go new file mode 100644 index 000000000..c9189349b --- /dev/null +++ b/node/modules/storageminer_idxprov_test.go @@ -0,0 +1,97 @@ +package modules_test + +import ( + "context" + "strings" + "testing" + "time" + + "github.com/filecoin-project/go-address" + provider "github.com/filecoin-project/index-provider" + "github.com/ipfs/go-datastore" + "github.com/libp2p/go-libp2p" + "github.com/libp2p/go-libp2p-core/host" + pubsub "github.com/libp2p/go-libp2p-pubsub" + "github.com/stretchr/testify/require" + "go.uber.org/fx" + + "github.com/filecoin-project/lotus/node/config" + "github.com/filecoin-project/lotus/node/modules" + "github.com/filecoin-project/lotus/node/modules/dtypes" +) + +func Test_IndexProviderTopic(t *testing.T) { + tests := []struct { + name string + givenAllowedTopics []string + givenConfiguredTopic string + givenNetworkName dtypes.NetworkName + wantErr string + }{ + { + name: "Joins configured topic when allowed", + givenAllowedTopics: []string{"fish"}, + givenConfiguredTopic: "fish", + }, + { + name: "Joins topic inferred from network name when allowed", + givenAllowedTopics: []string{"/indexer/ingest/fish"}, + givenNetworkName: "fish", + }, + { + name: "Fails to join configured topic when disallowed", + givenAllowedTopics: []string{"/indexer/ingest/fish"}, + givenConfiguredTopic: "lobster", + wantErr: "joining indexer topic lobster: topic is not allowed by the subscription filter", + }, + { + name: "Fails to join topic inferred from network name when disallowed", + givenAllowedTopics: []string{"/indexer/ingest/fish"}, + givenNetworkName: "lobster", + wantErr: "joining indexer topic /indexer/ingest/lobster: topic is not allowed by the subscription filter", + }, + } + + for _, test := range tests { + test := test + t.Run(test.name, func(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + h, err := libp2p.New() + require.NoError(t, err) + defer func() { + require.NoError(t, h.Close()) + }() + + filter := pubsub.WithSubscriptionFilter(pubsub.NewAllowlistSubscriptionFilter(test.givenAllowedTopics...)) + ps, err := pubsub.NewGossipSub(ctx, h, filter) + require.NoError(t, err) + + app := fx.New( + fx.Provide( + func() host.Host { return h }, + func() dtypes.NetworkName { return test.givenNetworkName }, + func() dtypes.MinerAddress { return dtypes.MinerAddress(address.TestAddress) }, + func() dtypes.ProviderDataTransfer { return nil }, + func() *pubsub.PubSub { return ps }, + func() dtypes.MetadataDS { return datastore.NewMapDatastore() }, + modules.IndexProvider(config.IndexProviderConfig{ + Enable: true, + TopicName: test.givenConfiguredTopic, + }), + ), + fx.Invoke(func(p provider.Interface) {}), + ) + err = app.Start(ctx) + + if test.wantErr == "" { + require.NoError(t, err) + err = app.Stop(ctx) + require.NoError(t, err) + } else { + require.True(t, strings.HasSuffix(err.Error(), test.wantErr)) + } + }) + } +} From cc328689e16037058117cb94cfa81cc772160e1c Mon Sep 17 00:00:00 2001 From: vyzo Date: Thu, 21 Apr 2022 20:10:34 +0300 Subject: [PATCH 03/21] dear linter, using xerrors is what we want to do. --- .golangci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index 87db745e4..8cd9e6f40 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -37,6 +37,9 @@ issues: - "string .* has .* occurrences, make it a constant" - "a blank import should be only in a main or test package, or have a comment justifying it" - "package comment should be of the form" + - "Potential hardcoded credentials" + - "Use of weak random number generator" + - "xerrors.* is deprecated" exclude-use-default: false exclude-rules: @@ -51,7 +54,7 @@ issues: - path: build/params_.*\.go linters: - golint - + - path: api/apistruct/struct.go linters: - golint From 357da15e5cef6163e12f18cf23ddf69d74e2509b Mon Sep 17 00:00:00 2001 From: vyzo Date: Tue, 19 Apr 2022 19:29:03 +0300 Subject: [PATCH 04/21] update go-libp2p@v0.19 --- go.mod | 35 +++++++------- go.sum | 141 +++++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 111 insertions(+), 65 deletions(-) diff --git a/go.mod b/go.mod index 2026adcff..fd11ad145 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/alecthomas/jsonschema v0.0.0-20200530073317-71f438968921 github.com/buger/goterm v1.0.3 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e - github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327 + github.com/containerd/cgroups v1.0.3 github.com/coreos/go-systemd/v22 v22.3.2 github.com/detailyang/go-fallocate v0.0.0-20180908115635-432fa640bd2e github.com/dgraph-io/badger/v2 v2.2007.3 @@ -25,7 +25,7 @@ require ( github.com/drand/kyber v1.1.7 github.com/dustin/go-humanize v1.0.0 github.com/elastic/go-sysinfo v1.7.0 - github.com/elastic/gosigar v0.14.1 + github.com/elastic/gosigar v0.14.2 github.com/etclabscore/go-openrpc-reflect v0.0.36 github.com/fatih/color v1.13.0 github.com/filecoin-project/dagstore v0.5.2 @@ -64,7 +64,7 @@ require ( github.com/golang/mock v1.6.0 github.com/google/uuid v1.3.0 github.com/gorilla/mux v1.7.4 - github.com/gorilla/websocket v1.4.2 + github.com/gorilla/websocket v1.5.0 github.com/hako/durafmt v0.0.0-20200710122514-c0fb7b4da026 github.com/hannahhoward/go-pubsub v0.0.0-20200423002714-8d62886cc36e github.com/hashicorp/go-multierror v1.1.1 @@ -113,21 +113,22 @@ require ( github.com/koalacxr/quantile v0.0.1 github.com/libp2p/go-buffer-pool v0.0.2 github.com/libp2p/go-eventbus v0.2.1 - github.com/libp2p/go-libp2p v0.18.1 + github.com/libp2p/go-libp2p v0.19.0 github.com/libp2p/go-libp2p-connmgr v0.3.1 - github.com/libp2p/go-libp2p-core v0.14.0 + github.com/libp2p/go-libp2p-core v0.15.1 github.com/libp2p/go-libp2p-discovery v0.6.0 github.com/libp2p/go-libp2p-kad-dht v0.15.0 - github.com/libp2p/go-libp2p-noise v0.3.0 + github.com/libp2p/go-libp2p-mplex v0.6.0 // indirect + github.com/libp2p/go-libp2p-noise v0.4.0 github.com/libp2p/go-libp2p-peerstore v0.6.0 github.com/libp2p/go-libp2p-pubsub v0.6.1 - github.com/libp2p/go-libp2p-quic-transport v0.16.1 + github.com/libp2p/go-libp2p-quic-transport v0.17.0 github.com/libp2p/go-libp2p-record v0.1.3 - github.com/libp2p/go-libp2p-resource-manager v0.2.0 + github.com/libp2p/go-libp2p-resource-manager v0.2.1 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 github.com/libp2p/go-libp2p-swarm v0.10.2 - github.com/libp2p/go-libp2p-tls v0.3.1 - github.com/libp2p/go-libp2p-yamux v0.9.0 + github.com/libp2p/go-libp2p-tls v0.4.1 + github.com/libp2p/go-libp2p-yamux v0.9.1 github.com/libp2p/go-maddr-filter v0.1.0 github.com/mattn/go-isatty v0.0.14 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 @@ -141,7 +142,7 @@ require ( github.com/open-rpc/meta-schema v0.0.0-20201029221707-1b72ef2ea333 github.com/opentracing/opentracing-go v1.2.0 github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e - github.com/prometheus/client_golang v1.11.0 + github.com/prometheus/client_golang v1.12.1 github.com/raulk/clock v1.1.0 github.com/raulk/go-watchdog v1.2.0 github.com/stretchr/testify v1.7.0 @@ -160,14 +161,14 @@ require ( go.opentelemetry.io/otel/exporters/jaeger v1.2.0 go.opentelemetry.io/otel/sdk v1.2.0 go.uber.org/fx v1.15.0 - go.uber.org/multierr v1.7.0 - go.uber.org/zap v1.19.1 - golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 + go.uber.org/multierr v1.8.0 + go.uber.org/zap v1.21.0 + golang.org/x/net v0.0.0-20220418201149-a630d4f3e7a2 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/sys v0.0.0-20211209171907-798191bca915 + golang.org/x/sys v0.0.0-20220412211240-33da011f77ad golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac - golang.org/x/tools v0.1.7 - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 + golang.org/x/tools v0.1.10 + golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f gopkg.in/cheggaaa/pb.v1 v1.0.28 gotest.tools v2.2.0+incompatible ) diff --git a/go.sum b/go.sum index 523c180ea..74cd66a0f 100644 --- a/go.sum +++ b/go.sum @@ -123,8 +123,9 @@ github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NR github.com/benbjohnson/clock v1.0.2/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.2.0 h1:9Re3G2TWxkE06LdMWMpcY6KV81GLXMGiYpPYUPkFAws= github.com/benbjohnson/clock v1.2.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -178,8 +179,9 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5O github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.2.0 h1:Fv93L3KKckEcEHR3oApXVzyBTDA8WAm6VXhPE00N3f8= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= +github.com/cilium/ebpf v0.4.0 h1:QlHdikaxALkqWasW8hAC1mfR0jdmvbfaBdBPFmRSglA= +github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= @@ -187,12 +189,17 @@ github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codegangsta/cli v1.20.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA= -github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327 h1:7grrpcfCtbZLsjtB0DgMuzs1umsJmpzaHMZ6cO6iAWw= github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= +github.com/containerd/cgroups v1.0.3 h1:ADZftAkglvCiD44c77s5YmMqaP2pzVCFZvBmAlBdAP4= +github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -274,8 +281,8 @@ github.com/elastic/go-sysinfo v1.7.0/go.mod h1:i1ZYdU10oLNfRzq4vq62BEwD2fH8KaWh6 github.com/elastic/go-windows v1.0.0 h1:qLURgZFkkrYyTTkvYpsZIgf83AUsdIHfvlJaqaZ7aSY= github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU= github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= -github.com/elastic/gosigar v0.14.1 h1:T0aQ7n/n2ZA9W7DmAnj60v+qzqKERdBgJBO1CG2W6rc= -github.com/elastic/gosigar v0.14.1/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= +github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= +github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/elgris/jsondiff v0.0.0-20160530203242-765b5c24c302/go.mod h1:qBlWZqWeVx9BjvqBsnC/8RUlAYpIFmPvgROcw0n1scE= github.com/ema/qdisc v0.0.0-20190904071900-b82c76788043/go.mod h1:ix4kG2zvdUd8kEKSW0ZTr1XLks0epFpI4j745DXxlNE= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= @@ -285,6 +292,7 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/etclabscore/go-jsonschema-walk v0.0.6 h1:DrNzoKWKd8f8XB5nFGBY00IcjakRE22OTI12k+2LkyY= github.com/etclabscore/go-jsonschema-walk v0.0.6/go.mod h1:VdfDY72AFAiUhy0ZXEaWSpveGjMT5JcDIm903NGqFwQ= @@ -480,8 +488,9 @@ github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL github.com/godbus/dbus v0.0.0-20190402143921-271e53dc4968 h1:s+PDl6lozQ+dEUtUtQnO7+A2iPG3sK1pI4liU+jxn90= github.com/godbus/dbus v0.0.0-20190402143921-271e53dc4968/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.0 h1:zgVt4UpGxcqVOw97aRGxT4svlcmdK35fynLNctY32zI= @@ -595,8 +604,9 @@ github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB7 github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE= @@ -663,8 +673,9 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goupnp v1.0.2 h1:RfGLP+h3mvisuWEyybxNq5Eft3NWhHLPeUN72kpKZoI= github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= +github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= +github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= github.com/iancoleman/orderedmap v0.1.0 h1:2orAxZBJsvimgEBmMWfXaFlzSG2fbQil5qzP3F6cCkg= @@ -1004,12 +1015,14 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= +github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.6/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.0.12 h1:p9dKCg8i4gmOxtv35DvrYoWqYzQrvEVdjQ762Y0OqZE= +github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= github.com/koalacxr/quantile v0.0.1 h1:wAW+SQ286Erny9wOjVww96t8ws+x5Zj6AKHDULUK+o0= github.com/koalacxr/quantile v0.0.1/go.mod h1:bGN/mCZLZ4lrSDHRQ6Lglj9chowGux8sGUIND+DQeD0= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -1071,8 +1084,8 @@ github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76f github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= github.com/libp2p/go-libp2p v0.18.0-rc1/go.mod h1:RgYlH7IIWHXREimC92bw5Lg1V2R5XmSzuLHb5fTnr+8= github.com/libp2p/go-libp2p v0.18.0-rc3/go.mod h1:WYL+Xw1iuwi6rdfzw5VIEpD+HqzYucHZ6fcUuumbI3M= -github.com/libp2p/go-libp2p v0.18.1 h1:IK9EOGNO2ZghU4F+dx9c4xfhMNZr45x06CijJaZE/ms= -github.com/libp2p/go-libp2p v0.18.1/go.mod h1:ll44MqmrIFKpL3BwCexxzm+7RZ8exEtN96V1rRdMG7Y= +github.com/libp2p/go-libp2p v0.19.0 h1:zosskMbaobL7UDCVLEe1m5CGs1TaFNFoN/M5XLiKg0U= +github.com/libp2p/go-libp2p v0.19.0/go.mod h1:Ki9jJXLO2YqrTIFxofV7Twyd3INWPT97+r8hGt7XPjI= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= @@ -1142,8 +1155,9 @@ github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQR github.com/libp2p/go-libp2p-core v0.11.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= github.com/libp2p/go-libp2p-core v0.12.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= github.com/libp2p/go-libp2p-core v0.13.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.14.0 h1:0kYSgiK/D7Eo28GTuRXo5YHsWwAisVpFCqCVPUd/vJs= github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8= +github.com/libp2p/go-libp2p-core v0.15.1 h1:0RY+Mi/ARK9DgG1g9xVQLb8dDaaU8tCePMtGALEfBnM= +github.com/libp2p/go-libp2p-core v0.15.1/go.mod h1:agSaboYM4hzB1cWekgVReqV5M4g5M+2eNNejV+1EEhs= github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE= github.com/libp2p/go-libp2p-crypto v0.0.2/go.mod h1:eETI5OUfBnvARGOHrJz2eWNyTUxEGZnBxMcbUjfIj4I= github.com/libp2p/go-libp2p-crypto v0.1.0/go.mod h1:sPUokVISZiy+nNuTTH/TY+leRSxnFj/2GLjtOTW90hI= @@ -1199,8 +1213,9 @@ github.com/libp2p/go-libp2p-netutil v0.1.0 h1:zscYDNVEcGxyUpMd0JReUZTrpMfia8PmLK github.com/libp2p/go-libp2p-netutil v0.1.0/go.mod h1:3Qv/aDqtMLTUyQeundkKsA+YCThNdbQD54k3TqjpbFU= github.com/libp2p/go-libp2p-noise v0.1.1/go.mod h1:QDFLdKX7nluB7DEnlVPbz7xlLHdwHFA9HiohJRr3vwM= github.com/libp2p/go-libp2p-noise v0.2.0/go.mod h1:IEbYhBBzGyvdLBoxxULL/SGbJARhUeqlO8lVSREYu2Q= -github.com/libp2p/go-libp2p-noise v0.3.0 h1:NCVH7evhVt9njbTQshzT7N1S3Q6fjj9M11FCgfH5+cA= github.com/libp2p/go-libp2p-noise v0.3.0/go.mod h1:JNjHbociDJKHD64KTkzGnzqJ0FEV5gHJa6AB00kbCNQ= +github.com/libp2p/go-libp2p-noise v0.4.0 h1:khcMsGhHNdGqKE5LDLrnHwZvdGVMsrnD4GTkTWkwmLU= +github.com/libp2p/go-libp2p-noise v0.4.0/go.mod h1:BzzY5pyzCYSyJbQy9oD8z5oP2idsafjt4/X42h9DjZU= github.com/libp2p/go-libp2p-peer v0.0.1/go.mod h1:nXQvOBbwVqoP+T5Y5nCjeH4sP9IX/J0AMzcDUVruVoo= github.com/libp2p/go-libp2p-peer v0.1.1/go.mod h1:jkF12jGB4Gk/IOo+yomm+7oLWxF278F7UnrYUQ1Q8es= github.com/libp2p/go-libp2p-peer v0.2.0/go.mod h1:RCffaCvUyW2CJmG2gAWVqwePwW7JMgxjsHm7+J5kjWY= @@ -1234,8 +1249,8 @@ github.com/libp2p/go-libp2p-quic-transport v0.13.0/go.mod h1:39/ZWJ1TW/jx1iFkKzz github.com/libp2p/go-libp2p-quic-transport v0.15.0/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ= github.com/libp2p/go-libp2p-quic-transport v0.15.2/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ= github.com/libp2p/go-libp2p-quic-transport v0.16.0/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ= -github.com/libp2p/go-libp2p-quic-transport v0.16.1 h1:N/XqYXHurphPLDfXYhll8NyqzdZYQqAF4GIr7+SmLV8= -github.com/libp2p/go-libp2p-quic-transport v0.16.1/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ= +github.com/libp2p/go-libp2p-quic-transport v0.17.0 h1:yFh4Gf5MlToAYLuw/dRvuzYd1EnE2pX3Lq1N6KDiWRQ= +github.com/libp2p/go-libp2p-quic-transport v0.17.0/go.mod h1:x4pw61P3/GRCcSLypcQJE/Q2+E9f4X+5aRcZLXf20LM= github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q= github.com/libp2p/go-libp2p-record v0.1.0/go.mod h1:ujNc8iuE5dlKWVy6wuL6dd58t0n7xI4hAIl8pE6wu5Q= github.com/libp2p/go-libp2p-record v0.1.1/go.mod h1:VRgKajOyMVgP/F0L5g3kH7SVskp17vFi2xheb5uMJtg= @@ -1244,8 +1259,8 @@ github.com/libp2p/go-libp2p-record v0.1.3 h1:R27hoScIhQf/A8XJZ8lYpnqh9LatJ5YbHs2 github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ6EMg7+/vv2+9pY4= github.com/libp2p/go-libp2p-resource-manager v0.1.0/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= github.com/libp2p/go-libp2p-resource-manager v0.1.3/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= -github.com/libp2p/go-libp2p-resource-manager v0.2.0 h1:Ul/k5d5StIpAtq7IapAEGh/2+0rwsJGXYJ6Kbzeedtc= -github.com/libp2p/go-libp2p-resource-manager v0.2.0/go.mod h1:K+eCkiapf+ey/LADO4TaMpMTP9/Qde/uLlrnRqV4PLQ= +github.com/libp2p/go-libp2p-resource-manager v0.2.1 h1:/0yqQQ4oT+3fEhUGGP2PhuIhdv10+pu5jLhvFNfUx/w= +github.com/libp2p/go-libp2p-resource-manager v0.2.1/go.mod h1:K+eCkiapf+ey/LADO4TaMpMTP9/Qde/uLlrnRqV4PLQ= github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys= github.com/libp2p/go-libp2p-routing v0.1.0/go.mod h1:zfLhI1RI8RLEzmEaaPwzonRvXeeSHddONWkcTcB54nE= github.com/libp2p/go-libp2p-routing-helpers v0.2.3 h1:xY61alxJ6PurSi+MXbywZpelvuU4U4p/gPTxjqCqTzY= @@ -1286,12 +1301,14 @@ github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aL github.com/libp2p/go-libp2p-testing v0.6.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= github.com/libp2p/go-libp2p-testing v0.7.0/go.mod h1:OLbdn9DbgdMwv00v+tlp1l3oe2Cl+FAjoWIA2pa0X6E= github.com/libp2p/go-libp2p-testing v0.8.0/go.mod h1:gRdsNxQSxAZowTgcLY7CC33xPmleZzoBpqSYbWenqPc= +github.com/libp2p/go-libp2p-testing v0.9.0/go.mod h1:Td7kbdkWqYTJYQGTwzlgXwaqldraIanyjuRiAbK/XQU= github.com/libp2p/go-libp2p-testing v0.9.2 h1:dCpODRtRaDZKF8HXT9qqqgON+OMEB423Knrgeod8j84= github.com/libp2p/go-libp2p-testing v0.9.2/go.mod h1:Td7kbdkWqYTJYQGTwzlgXwaqldraIanyjuRiAbK/XQU= github.com/libp2p/go-libp2p-tls v0.1.3/go.mod h1:wZfuewxOndz5RTnCAxFliGjvYSDA40sKitV4c50uI1M= github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= -github.com/libp2p/go-libp2p-tls v0.3.1 h1:lsE2zYte+rZCEOHF72J1Fg3XK3dGQyKvI6i5ehJfEp0= github.com/libp2p/go-libp2p-tls v0.3.1/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= +github.com/libp2p/go-libp2p-tls v0.4.1 h1:1ByJUbyoMXvYXDoW6lLsMxqMViQNXmt+CfQqlnCpY+M= +github.com/libp2p/go-libp2p-tls v0.4.1/go.mod h1:EKCixHEysLNDlLUoKxv+3f/Lp90O2EXNjTr0UQDnrIw= github.com/libp2p/go-libp2p-transport v0.0.1/go.mod h1:UzbUs9X+PHOSw7S3ZmeOxfnwaQY5vGDzZmKPod3N3tk= github.com/libp2p/go-libp2p-transport v0.0.5/go.mod h1:StoY3sx6IqsP6XKoabsPnHCwqKXWUMWU7Rfcsubee/A= github.com/libp2p/go-libp2p-transport-upgrader v0.0.4/go.mod h1:RGq+tupk+oj7PzL2kn/m1w6YXxcIAYJYeI90h6BGgUc= @@ -1325,8 +1342,8 @@ github.com/libp2p/go-libp2p-yamux v0.6.0/go.mod h1:MRhd6mAYnFRnSISp4M8i0ClV/j+mW github.com/libp2p/go-libp2p-yamux v0.7.0/go.mod h1:fMyA0CsPfHkIuBU0wjRGrCjTBFiXTXxG0k5M4ETv+08= github.com/libp2p/go-libp2p-yamux v0.8.0/go.mod h1:yTkPgN2ib8FHyU1ZcVD7aelzyAqXXwEPbyx+aSKm9h8= github.com/libp2p/go-libp2p-yamux v0.8.1/go.mod h1:rUozF8Jah2dL9LLGyBaBeTQeARdwhefMCTQVQt6QobE= -github.com/libp2p/go-libp2p-yamux v0.9.0 h1:j+gnKykADCI/3cZlacOYBjQXDsncxgcwzJ1zw6Z6pts= -github.com/libp2p/go-libp2p-yamux v0.9.0/go.mod h1:tpJKkRH9LlHj0VQh9Y9RP1pmF7yCS9ixxY/oSv+hhhQ= +github.com/libp2p/go-libp2p-yamux v0.9.1 h1:oplewiRix8s45SOrI30rCPZG5mM087YZp+VYhXAh4+c= +github.com/libp2p/go-libp2p-yamux v0.9.1/go.mod h1:wRc6wvyxQINFcKe7daL4BeQ02Iyp+wxyC8WCNfngBrA= github.com/libp2p/go-maddr-filter v0.0.1/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.4/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= @@ -1346,8 +1363,9 @@ github.com/libp2p/go-msgio v0.0.2/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+ github.com/libp2p/go-msgio v0.0.3/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-msgio v0.1.0 h1:8Q7g/528ivAlfXTFWvWhVjTE8XG8sDTkRUKPYh9+5Q8= github.com/libp2p/go-msgio v0.1.0/go.mod h1:eNlv2vy9V2X/kNldcZ+SShFE++o2Yjxwx6RAYsmgJnE= +github.com/libp2p/go-msgio v0.2.0 h1:W6shmB+FeynDrUVl2dgFQvzfBZcXiyqY4VmpQLu9FqU= +github.com/libp2p/go-msgio v0.2.0/go.mod h1:dBVM1gW3Jk9XqHkU4eKdGvVHdLa51hoGfll6jMJMSlY= github.com/libp2p/go-nat v0.0.3/go.mod h1:88nUEt0k0JD45Bk93NIwDqjlhiOwOoV36GchpcVc1yI= github.com/libp2p/go-nat v0.0.4/go.mod h1:Nmw50VAvKuk38jUBcmNh6p9lUJLoODbJRvYAa/+KSDo= github.com/libp2p/go-nat v0.0.5/go.mod h1:B7NxsVNPZmRLvMOwiEO1scOSyjA56zxYAGv1yQgRkEU= @@ -1426,8 +1444,8 @@ github.com/libp2p/go-yamux/v2 v2.2.0/go.mod h1:3So6P6TV6r75R9jiBpiIKgU/66lOarCZj github.com/libp2p/go-yamux/v2 v2.3.0/go.mod h1:iTU+lOIn/2h0AgKcL49clNTwfEw+WSfDYrXe05EyKIs= github.com/libp2p/go-yamux/v3 v3.0.1/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= github.com/libp2p/go-yamux/v3 v3.0.2/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= -github.com/libp2p/go-yamux/v3 v3.1.0 h1:2johPiST4xsXsqQ/38C2MAERw0hJ+t8oehHWA8F2R3Q= -github.com/libp2p/go-yamux/v3 v3.1.0/go.mod h1:jeLEQgLXqE2YqX1ilAClIfCMDY+0uXQUKmmb/qp0gT4= +github.com/libp2p/go-yamux/v3 v3.1.1 h1:X0qSVodCZciOu/f4KTp9V+O0LAqcqP2tdaUGB0+0lng= +github.com/libp2p/go-yamux/v3 v3.1.1/go.mod h1:jeLEQgLXqE2YqX1ilAClIfCMDY+0uXQUKmmb/qp0gT4= github.com/libp2p/zeroconf/v2 v2.1.1/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= @@ -1436,8 +1454,9 @@ github.com/lucas-clemente/quic-go v0.19.3/go.mod h1:ADXpNbTQjq1hIzCpB+y/k5iz4n4z github.com/lucas-clemente/quic-go v0.21.2/go.mod h1:vF5M1XqhBAHgbjKcJOXY3JZz3GP0T3FQhz/uyOUS38Q= github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= github.com/lucas-clemente/quic-go v0.24.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= -github.com/lucas-clemente/quic-go v0.25.0 h1:K+X9Gvd7JXsOHtU0N2icZ2Nw3rx82uBej3mP4CLgibc= github.com/lucas-clemente/quic-go v0.25.0/go.mod h1:YtzP8bxRVCBlO77yRanE264+fY/T2U9ZlW1AaHOsMOg= +github.com/lucas-clemente/quic-go v0.27.0 h1:v6WY87q9zD4dKASbG8hy/LpzAVNzEQzw8sEIeloJsc4= +github.com/lucas-clemente/quic-go v0.27.0/go.mod h1:AzgQoPda7N+3IqMMMkywBKggIFo2KT6pfnlrQ2QieeI= github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac= github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lufia/iostat v1.1.0/go.mod h1:rEPNA0xXgjHQjuI5Cy05sLlS2oRcSlWHRLrvh/AQ+Pg= @@ -1459,13 +1478,16 @@ github.com/marten-seemann/qtls v0.10.0/go.mod h1:UvMd1oaYDACI99/oZUYLzMCkBXQVT0a github.com/marten-seemann/qtls-go1-15 v0.1.1/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= github.com/marten-seemann/qtls-go1-15 v0.1.5/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= -github.com/marten-seemann/qtls-go1-16 v0.1.4 h1:xbHbOGGhrenVtII6Co8akhLEdrawwB2iHl5yhJRpnco= github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= +github.com/marten-seemann/qtls-go1-16 v0.1.5 h1:o9JrYPPco/Nukd/HpOHMHZoBDXQqoNtUCmny98/1uqQ= +github.com/marten-seemann/qtls-go1-16 v0.1.5/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= github.com/marten-seemann/qtls-go1-17 v0.1.0-rc.1/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= -github.com/marten-seemann/qtls-go1-17 v0.1.0 h1:P9ggrs5xtwiqXv/FHNwntmuLMNq3KaSIG93AtAZ48xk= github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= -github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1 h1:EnzzN9fPUkUck/1CuY1FlzBaIYMoiBsdwTNmNGkwUUM= +github.com/marten-seemann/qtls-go1-17 v0.1.1 h1:DQjHPq+aOzUeh9/lixAGunn6rIOQyWChPSI4+hgW7jc= +github.com/marten-seemann/qtls-go1-17 v0.1.1/go.mod h1:C2ekUKcDdz9SDWxec1N/MvcXBpaX9l3Nx67XaR84L5s= github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1/go.mod h1:PUhIQk19LoFt2174H4+an8TYvWOGjb/hHwphBeaDHwI= +github.com/marten-seemann/qtls-go1-18 v0.1.1 h1:qp7p7XXUFL7fpBvSS1sWD+uSqPvzNQK43DH+/qEkj0Y= +github.com/marten-seemann/qtls-go1-18 v0.1.1/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -1508,8 +1530,9 @@ github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKju github.com/miekg/dns v1.1.28/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg= github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= +github.com/miekg/dns v1.1.48 h1:Ucfr7IIVyMBz4lRE8qmGUuZ4Wt3/ZGu9hmcMT3Uu4tQ= +github.com/miekg/dns v1.1.48/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= @@ -1615,8 +1638,9 @@ github.com/multiformats/go-multistream v0.1.0/go.mod h1:fJTiDfXJVmItycydCnNx4+wS github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= github.com/multiformats/go-multistream v0.2.0/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= github.com/multiformats/go-multistream v0.2.1/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= -github.com/multiformats/go-multistream v0.2.2 h1:TCYu1BHTDr1F/Qm75qwYISQdzGcRdC21nFgQW7l7GBo= github.com/multiformats/go-multistream v0.2.2/go.mod h1:UIcnm7Zuo8HKG+HkWgfQsGL+/MIEhyTqbODbIUwSXKs= +github.com/multiformats/go-multistream v0.3.0 h1:yX1v4IWseLPmr0rmnDo148wWJbNx40JxBZGmQb5fUP4= +github.com/multiformats/go-multistream v0.3.0/go.mod h1:ODRoqamLUsETKS9BNcII4gcRsJBU5VAwRIv7O39cEXg= github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= @@ -1658,8 +1682,9 @@ github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0 github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -1731,8 +1756,9 @@ github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3O github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= -github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -1752,8 +1778,10 @@ github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16 github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.30.0 h1:JEkYlQnpzrzQFxi6gnukFPdQ+ac82oRhzMcIduJu/Ug= github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.33.0 h1:rHgav/0a6+uYgGdNt3jwz8FNSesO/Hsang3O0T9A5SE= +github.com/prometheus/common v0.33.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= github.com/prometheus/node_exporter v1.0.0-rc.0.0.20200428091818-01054558c289/go.mod h1:FGbBv5OPKjch+jNUJmEQpMZytIdyW0NdBtWFcfSKusc= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1988,7 +2016,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.12.1 h1:hYRcyznPRJp+5mzF2sazTLP2nGvGjYDD2VzhHhFomLU= @@ -2070,8 +2098,9 @@ go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+ go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= @@ -2081,8 +2110,9 @@ go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= go4.org v0.0.0-20200411211856-f5505b9728dd h1:BNJlw5kRTzdmyfh5U8F93HA2OwkP7ZGwA51eJ/0wKOU= go4.org v0.0.0-20200411211856-f5505b9728dd/go.mod h1:CIiUVy99QCPfoE13bO4EZaz5GZMZXMSBGhxRdsvzbkg= @@ -2132,8 +2162,9 @@ golang.org/x/crypto v0.0.0-20210813211128-0a44fdfbc16e/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b h1:QAqMVf3pSa6eeTsuklijukjXBlj7Es2QQplab+/RbQ4= golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20181106170214-d68db9428509/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -2179,8 +2210,9 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -2241,11 +2273,15 @@ golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220418201149-a630d4f3e7a2 h1:6mzvA99KwZxbOrxww4EvWVQUnN1+xEu9tafK5ZxkYeA= +golang.org/x/net v0.0.0-20220418201149-a630d4f3e7a2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -2254,6 +2290,7 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -2366,17 +2403,21 @@ golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025112917-711f33c9992c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211209171907-798191bca915 h1:P+8mCzuEpyszAT6T42q0sxU+eveBAF/cJ2Kp0x6/8+0= golang.org/x/sys v0.0.0-20211209171907-798191bca915/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf h1:MZ2shdL+ZM/XzY3ZGOnh4Nlpnxz5GSOhOmtHo3iPU6M= golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2459,13 +2500,15 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.7 h1:6j8CgantCy3yc8JGBqkDLMKWqZ0RDU2g1HVgacojGWQ= -golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= @@ -2563,8 +2606,9 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -2577,8 +2621,9 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From efad69235385ed6c81fd525781e8b3de8204b8d7 Mon Sep 17 00:00:00 2001 From: vyzo Date: Wed, 20 Apr 2022 17:20:14 +0300 Subject: [PATCH 05/21] go mod tidy --- go.mod | 198 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 191 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index fd11ad145..4c06e42af 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/filecoin-project/lotus -go 1.16 +go 1.17 retract v1.14.0 // Accidentally force-pushed tag, use v1.14.1+ instead. @@ -10,7 +10,6 @@ require ( github.com/GeertJohan/go.rice v1.0.2 github.com/Gurpartap/async v0.0.0-20180927173644-4f7f499dd9ee github.com/Kubuxu/imtui v0.0.0-20210401140320-41663d68d0fa - github.com/StackExchange/wmi v1.2.1 // indirect github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d github.com/alecthomas/jsonschema v0.0.0-20200530073317-71f438968921 github.com/buger/goterm v1.0.3 @@ -19,7 +18,6 @@ require ( github.com/coreos/go-systemd/v22 v22.3.2 github.com/detailyang/go-fallocate v0.0.0-20180908115635-432fa640bd2e github.com/dgraph-io/badger/v2 v2.2007.3 - github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/docker/go-units v0.4.0 github.com/drand/drand v1.3.0 github.com/drand/kyber v1.1.7 @@ -60,7 +58,6 @@ require ( github.com/gbrlsnchs/jwt/v3 v3.0.1 github.com/gdamore/tcell/v2 v2.2.0 github.com/go-kit/kit v0.12.0 - github.com/golang/glog v1.0.0 // indirect github.com/golang/mock v1.6.0 github.com/google/uuid v1.3.0 github.com/gorilla/mux v1.7.4 @@ -95,7 +92,6 @@ require ( github.com/ipfs/go-ipfs-util v0.0.2 github.com/ipfs/go-ipld-cbor v0.0.6 github.com/ipfs/go-ipld-format v0.2.0 - github.com/ipfs/go-ipld-legacy v0.1.1 // indirect github.com/ipfs/go-log/v2 v2.5.1 github.com/ipfs/go-merkledag v0.5.1 github.com/ipfs/go-metrics-interface v0.0.1 @@ -108,7 +104,6 @@ require ( github.com/ipld/go-codec-dagpb v1.3.2 github.com/ipld/go-ipld-prime v0.16.0 github.com/ipld/go-ipld-selector-text-lite v0.0.1 - github.com/jonboulle/clockwork v0.2.2 // indirect github.com/kelseyhightower/envconfig v1.4.0 github.com/koalacxr/quantile v0.0.1 github.com/libp2p/go-buffer-pool v0.0.2 @@ -147,7 +142,6 @@ require ( github.com/raulk/go-watchdog v1.2.0 github.com/stretchr/testify v1.7.0 github.com/syndtr/goleveldb v1.0.0 - github.com/uber/jaeger-client-go v2.25.0+incompatible // indirect github.com/urfave/cli/v2 v2.3.0 github.com/whyrusleeping/bencher v0.0.0-20190829221104-bb6607aa8bba github.com/whyrusleeping/cbor-gen v0.0.0-20220302191723-37c43cae8e14 @@ -173,6 +167,196 @@ require ( gotest.tools v2.2.0+incompatible ) +require ( + github.com/DataDog/zstd v1.4.1 // indirect + github.com/GeertJohan/go.incremental v1.0.0 // indirect + github.com/PuerkitoBio/purell v1.1.1 // indirect + github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect + github.com/StackExchange/wmi v1.2.1 // indirect + github.com/Stebalien/go-bitfield v0.0.1 // indirect + github.com/akavel/rsrc v0.8.0 // indirect + github.com/alecthomas/units v0.0.0-20210927113745-59d0afb8317a // indirect + github.com/benbjohnson/clock v1.3.0 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bep/debounce v1.2.0 // indirect + github.com/btcsuite/btcd v0.22.0-beta // indirect + github.com/cespare/xxhash v1.1.0 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/cheekybits/genny v1.0.0 // indirect + github.com/cilium/ebpf v0.4.0 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect + github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 // indirect + github.com/cskr/pubsub v1.0.2 // indirect + github.com/daaku/go.zipexe v1.0.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect + github.com/dgraph-io/ristretto v0.1.0 // indirect + github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 // indirect + github.com/drand/kyber-bls12381 v0.2.1 // indirect + github.com/elastic/go-windows v1.0.0 // indirect + github.com/etclabscore/go-jsonschema-walk v0.0.6 // indirect + github.com/filecoin-project/go-amt-ipld/v2 v2.1.0 // indirect + github.com/filecoin-project/go-amt-ipld/v3 v3.1.0 // indirect + github.com/filecoin-project/go-amt-ipld/v4 v4.0.0 // indirect + github.com/filecoin-project/go-ds-versioning v0.1.1 // indirect + github.com/filecoin-project/go-hamt-ipld v0.1.5 // indirect + github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 // indirect + github.com/filecoin-project/go-hamt-ipld/v3 v3.1.0 // indirect + github.com/filecoin-project/storetheindex v0.3.5 // indirect + github.com/flynn/noise v1.0.0 // indirect + github.com/francoispqt/gojay v1.2.13 // indirect + github.com/fsnotify/fsnotify v1.5.1 // indirect + github.com/gdamore/encoding v1.0.0 // indirect + github.com/go-kit/log v0.2.0 // indirect + github.com/go-logfmt/logfmt v0.5.1 // indirect + github.com/go-logr/logr v1.2.1 // indirect + github.com/go-logr/stdr v1.2.0 // indirect + github.com/go-ole/go-ole v1.2.5 // indirect + github.com/go-openapi/jsonpointer v0.19.3 // indirect + github.com/go-openapi/jsonreference v0.19.4 // indirect + github.com/go-openapi/spec v0.19.11 // indirect + github.com/go-openapi/swag v0.19.11 // indirect + github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/glog v1.0.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/snappy v0.0.3 // indirect + github.com/google/go-cmp v0.5.7 // indirect + github.com/google/gopacket v1.1.19 // indirect + github.com/hannahhoward/cbor-gen-for v0.0.0-20200817222906-ea96cece81f1 // indirect + github.com/hashicorp/errwrap v1.0.0 // indirect + github.com/huin/goupnp v1.0.3 // indirect + github.com/iancoleman/orderedmap v0.1.0 // indirect + github.com/ipfs/go-bitfield v1.0.0 // indirect + github.com/ipfs/go-filestore v1.1.0 // indirect + github.com/ipfs/go-ipfs-cmds v0.6.0 // indirect + github.com/ipfs/go-ipfs-delay v0.0.1 // indirect + github.com/ipfs/go-ipfs-posinfo v0.0.1 // indirect + github.com/ipfs/go-ipfs-pq v0.0.2 // indirect + github.com/ipfs/go-ipld-legacy v0.1.1 // indirect + github.com/ipfs/go-ipns v0.1.2 // indirect + github.com/ipfs/go-log v1.0.5 // indirect + github.com/ipfs/go-path v0.2.1 // indirect + github.com/ipfs/go-peertaskqueue v0.7.1 // indirect + github.com/ipfs/go-verifcid v0.0.1 // indirect + github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52 // indirect + github.com/jackpal/go-nat-pmp v1.0.2 // indirect + github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c // indirect + github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect + github.com/jbenet/goprocess v0.1.4 // indirect + github.com/jessevdk/go-flags v1.4.0 // indirect + github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 // indirect + github.com/jonboulle/clockwork v0.2.2 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/jpillora/backoff v1.0.0 // indirect + github.com/kilic/bls12-381 v0.0.0-20200820230200-6b2c19996391 // indirect + github.com/klauspost/compress v1.15.1 // indirect + github.com/klauspost/cpuid/v2 v2.0.12 // indirect + github.com/koron/go-ssdp v0.0.2 // indirect + github.com/libp2p/go-cidranger v1.1.0 // indirect + github.com/libp2p/go-conn-security-multistream v0.3.0 // indirect + github.com/libp2p/go-flow-metrics v0.0.3 // indirect + github.com/libp2p/go-libp2p-asn-util v0.1.0 // indirect + github.com/libp2p/go-libp2p-blankhost v0.3.0 // indirect + github.com/libp2p/go-libp2p-gostream v0.3.1 // indirect + github.com/libp2p/go-libp2p-kbucket v0.4.7 // indirect + github.com/libp2p/go-libp2p-loggables v0.1.0 // indirect + github.com/libp2p/go-libp2p-nat v0.1.0 // indirect + github.com/libp2p/go-libp2p-pnet v0.2.0 // indirect + github.com/libp2p/go-libp2p-testing v0.9.2 // indirect + github.com/libp2p/go-libp2p-transport-upgrader v0.7.1 // indirect + github.com/libp2p/go-msgio v0.2.0 // indirect + github.com/libp2p/go-nat v0.1.0 // indirect + github.com/libp2p/go-netroute v0.2.0 // indirect + github.com/libp2p/go-openssl v0.0.7 // indirect + github.com/libp2p/go-reuseport v0.1.0 // indirect + github.com/libp2p/go-reuseport-transport v0.1.0 // indirect + github.com/libp2p/go-stream-muxer-multistream v0.4.0 // indirect + github.com/libp2p/go-tcp-transport v0.5.1 // indirect + github.com/libp2p/go-ws-transport v0.6.0 // indirect + github.com/libp2p/go-yamux/v3 v3.1.1 // indirect + github.com/lucas-clemente/quic-go v0.27.0 // indirect + github.com/lucasb-eyer/go-colorful v1.0.3 // indirect + github.com/magefile/mage v1.9.0 // indirect + github.com/mailru/easyjson v0.7.6 // indirect + github.com/marten-seemann/qtls-go1-16 v0.1.5 // indirect + github.com/marten-seemann/qtls-go1-17 v0.1.1 // indirect + github.com/marten-seemann/qtls-go1-18 v0.1.1 // indirect + github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect + github.com/mattn/go-colorable v0.1.9 // indirect + github.com/mattn/go-runewidth v0.0.10 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect + github.com/miekg/dns v1.1.48 // indirect + github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect + github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect + github.com/minio/sha256-simd v1.0.0 // indirect + github.com/mr-tron/base58 v1.2.0 // indirect + github.com/multiformats/go-base36 v0.1.0 // indirect + github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect + github.com/multiformats/go-multicodec v0.4.1 // indirect + github.com/multiformats/go-multistream v0.3.0 // indirect + github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c // indirect + github.com/nkovacs/streamquote v1.0.0 // indirect + github.com/nxadm/tail v1.4.8 // indirect + github.com/onsi/ginkgo v1.16.5 // indirect + github.com/opencontainers/runtime-spec v1.0.2 // indirect + github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect + github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/client_model v0.2.0 // indirect + github.com/prometheus/common v0.33.0 // indirect + github.com/prometheus/procfs v0.7.3 // indirect + github.com/prometheus/statsd_exporter v0.21.0 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect + github.com/rivo/uniseg v0.1.0 // indirect + github.com/rs/cors v1.7.0 // indirect + github.com/russross/blackfriday/v2 v2.0.1 // indirect + github.com/shirou/gopsutil v2.18.12+incompatible // indirect + github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect + github.com/sirupsen/logrus v1.8.1 // indirect + github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/tj/go-spin v1.1.0 // indirect + github.com/uber/jaeger-client-go v2.25.0+incompatible // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasttemplate v1.0.1 // indirect + github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 // indirect + github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f // indirect + github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect + github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee // indirect + github.com/xlab/c-for-go v0.0.0-20201112171043-ea6dce5809cb // indirect + github.com/xlab/pkgconfig v0.0.0-20170226114623-cea12a0fd245 // indirect + github.com/zondax/hid v0.9.0 // indirect + github.com/zondax/ledger-go v0.12.1 // indirect + go.opentelemetry.io/otel/metric v0.25.0 // indirect + go.opentelemetry.io/otel/sdk/export/metric v0.25.0 // indirect + go.opentelemetry.io/otel/trace v1.3.0 // indirect + go.uber.org/atomic v1.9.0 // indirect + go.uber.org/dig v1.12.0 // indirect + go4.org v0.0.0-20200411211856-f5505b9728dd // indirect + golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect + golang.org/x/exp v0.0.0-20210715201039-d37aa40e8013 // indirect + golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect + golang.org/x/text v0.3.7 // indirect + google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 // indirect + google.golang.org/grpc v1.45.0 // indirect + google.golang.org/protobuf v1.28.0 // indirect + gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect + howett.net/plist v0.0.0-20181124034731-591f970eefbb // indirect + lukechampine.com/blake3 v1.1.7 // indirect + modernc.org/cc v1.0.0 // indirect + modernc.org/golex v1.0.1 // indirect + modernc.org/mathutil v1.1.1 // indirect + modernc.org/strutil v1.1.0 // indirect + modernc.org/xc v1.0.0 // indirect +) + replace github.com/filecoin-project/filecoin-ffi => ./extern/filecoin-ffi replace github.com/filecoin-project/test-vectors => ./extern/test-vectors From bd9e8c7663cd489007578ddd3445f63d2cf45363 Mon Sep 17 00:00:00 2001 From: jennijuju Date: Fri, 22 Apr 2022 17:04:55 +0200 Subject: [PATCH 06/21] update go version thats needed by the new libp2p --- .circleci/config.yml | 36 +++++++------------ .circleci/template.yml | 36 +++++++------------ .github/workflows/codeql-analysis.yml | 2 +- Dockerfile.lotus | 2 +- Makefile | 2 +- README.md | 4 +-- .../docker-images/Dockerfile.oni-buildbase | 2 +- .../docker-images/Dockerfile.oni-runtime | 2 +- .../Dockerfile.oni-runtime-debug | 2 +- 9 files changed, 34 insertions(+), 54 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f863d6817..646045c0f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,12 +1,11 @@ version: 2.1 orbs: - go: gotest/tools@0.0.13 aws-cli: circleci/aws-cli@1.3.2 executors: golang: docker: - - image: circleci/golang:1.16.4 + - image: cimg/go:1.17.9 resource_class: 2xlarge ubuntu: docker: @@ -25,8 +24,9 @@ executors: commands: install-deps: steps: - - go/install-ssh - - go/install: {package: git} + - run: | + sudo apt update + sudo apt install python-is-python3 prepare: parameters: linux: @@ -110,8 +110,12 @@ jobs: steps: - install-deps - prepare - - go/mod-tidy-check - + - run: go mod tidy -v + - run: + name: Check git diff + command: | + git --no-pager diff go.mod go.sum + git --no-pager diff --quiet go.mod go.sum build-all: executor: golang steps: @@ -188,9 +192,6 @@ jobs: command: make deps lotus no_output_timeout: 30m - download-params - - go/install-gotestsum: - gobin: $HOME/.local/bin - version: 0.5.2 - run: name: go test environment: @@ -215,8 +216,6 @@ jobs: - when: condition: << parameters.codecov-upload >> steps: - - go/install: {package: bash} - - go/install: {package: curl} - run: shell: /bin/bash -eo pipefail command: | @@ -255,9 +254,6 @@ jobs: cd extern/test-vectors git fetch git checkout origin/<< parameters.vectors-branch >> - - go/install-gotestsum: - gobin: $HOME/.local/bin - version: 0.5.2 - run: name: install statediff globally command: | @@ -370,8 +366,8 @@ jobs: - run: name: Install go command: | - curl -O https://dl.google.com/go/go1.16.4.darwin-amd64.pkg && \ - sudo installer -pkg go1.16.4.darwin-amd64.pkg -target / + curl -O https://dl.google.com/go/go1.17.9.darwin-amd64.pkg && \ + sudo installer -pkg go1.17.9.darwin-amd64.pkg -target / - run: name: Install pkg-config command: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config @@ -512,9 +508,6 @@ jobs: executor: type: executor default: golang - golangci-lint-version: - type: string - default: 1.27.0 concurrency: type: string default: '2' @@ -533,13 +526,10 @@ jobs: - run: command: make deps no_output_timeout: 30m - - go/install-golangci-lint: - gobin: $HOME/.local/bin - version: << parameters.golangci-lint-version >> - run: name: Lint command: | - $HOME/.local/bin/golangci-lint run -v --timeout 2m \ + golangci-lint run -v --timeout 2m \ --concurrency << parameters.concurrency >> << parameters.args >> lint-all: <<: *lint diff --git a/.circleci/template.yml b/.circleci/template.yml index 82e5bb8f6..755a4f0fa 100644 --- a/.circleci/template.yml +++ b/.circleci/template.yml @@ -1,12 +1,11 @@ version: 2.1 orbs: - go: gotest/tools@0.0.13 aws-cli: circleci/aws-cli@1.3.2 executors: golang: docker: - - image: circleci/golang:1.16.4 + - image: cimg/go:1.17.9 resource_class: 2xlarge ubuntu: docker: @@ -25,8 +24,9 @@ executors: commands: install-deps: steps: - - go/install-ssh - - go/install: {package: git} + - run: | + sudo apt update + sudo apt install python-is-python3 prepare: parameters: linux: @@ -110,8 +110,12 @@ jobs: steps: - install-deps - prepare - - go/mod-tidy-check - + - run: go mod tidy -v + - run: + name: Check git diff + command: | + git --no-pager diff go.mod go.sum + git --no-pager diff --quiet go.mod go.sum build-all: executor: golang steps: @@ -188,9 +192,6 @@ jobs: command: make deps lotus no_output_timeout: 30m - download-params - - go/install-gotestsum: - gobin: $HOME/.local/bin - version: 0.5.2 - run: name: go test environment: @@ -215,8 +216,6 @@ jobs: - when: condition: << parameters.codecov-upload >> steps: - - go/install: {package: bash} - - go/install: {package: curl} - run: shell: /bin/bash -eo pipefail command: | @@ -255,9 +254,6 @@ jobs: cd extern/test-vectors git fetch git checkout origin/<< parameters.vectors-branch >> - - go/install-gotestsum: - gobin: $HOME/.local/bin - version: 0.5.2 - run: name: install statediff globally command: | @@ -370,8 +366,8 @@ jobs: - run: name: Install go command: | - curl -O https://dl.google.com/go/go1.16.4.darwin-amd64.pkg && \ - sudo installer -pkg go1.16.4.darwin-amd64.pkg -target / + curl -O https://dl.google.com/go/go1.17.9.darwin-amd64.pkg && \ + sudo installer -pkg go1.17.9.darwin-amd64.pkg -target / - run: name: Install pkg-config command: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config @@ -512,9 +508,6 @@ jobs: executor: type: executor default: golang - golangci-lint-version: - type: string - default: 1.27.0 concurrency: type: string default: '2' @@ -533,13 +526,10 @@ jobs: - run: command: make deps no_output_timeout: 30m - - go/install-golangci-lint: - gobin: $HOME/.local/bin - version: << parameters.golangci-lint-version >> - run: name: Lint command: | - $HOME/.local/bin/golangci-lint run -v --timeout 2m \ + golangci-lint run -v --timeout 2m \ --concurrency << parameters.concurrency >> << parameters.args >> lint-all: <<: *lint diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 33725d70d..a86b077b8 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -37,7 +37,7 @@ jobs: - uses: actions/setup-go@v1 with: - go-version: '1.16.4' + go-version: '1.17.9' # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/Dockerfile.lotus b/Dockerfile.lotus index 4a7001178..3e35f1c0c 100644 --- a/Dockerfile.lotus +++ b/Dockerfile.lotus @@ -1,4 +1,4 @@ -FROM golang:1.16.4 AS builder-deps +FROM golang:1.17.9-buster AS builder-deps MAINTAINER Lotus Development Team RUN apt-get update && apt-get install -y ca-certificates build-essential clang ocl-icd-opencl-dev ocl-icd-libopencl1 jq libhwloc-dev diff --git a/Makefile b/Makefile index 12f67ca3e..01df252c9 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ GOCC?=go GOVERSION:=$(shell $(GOCC) version | tr ' ' '\n' | grep go1 | sed 's/^go//' | awk -F. '{printf "%d%03d%03d", $$1, $$2, $$3}') ifeq ($(shell expr $(GOVERSION) \< 1016000), 1) $(warning Your Golang version is go$(shell expr $(GOVERSION) / 1000000).$(shell expr $(GOVERSION) % 1000000 / 1000).$(shell expr $(GOVERSION) % 1000)) -$(error Update Golang to version to at least 1.16.0) +$(error Update Golang to version to at least 1.17.9) endif # git modules that need to be loaded diff --git a/README.md b/README.md index 055937398..357fa2e89 100644 --- a/README.md +++ b/README.md @@ -71,10 +71,10 @@ For other distributions you can find the required dependencies [here.](https://d #### Go -To build Lotus, you need a working installation of [Go 1.16.4 or higher](https://golang.org/dl/): +To build Lotus, you need a working installation of [Go 1.17.9 or higher](https://golang.org/dl/): ```bash -wget -c https://golang.org/dl/go1.16.4.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local +wget -c https://golang.org/dl/go1.17.9.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local ``` **TIP:** diff --git a/testplans/docker-images/Dockerfile.oni-buildbase b/testplans/docker-images/Dockerfile.oni-buildbase index 265066537..fd5f98a67 100644 --- a/testplans/docker-images/Dockerfile.oni-buildbase +++ b/testplans/docker-images/Dockerfile.oni-buildbase @@ -1,4 +1,4 @@ -ARG GO_VERSION=1.16.3 +ARG GO_VERSION=1.17.9 FROM golang:${GO_VERSION}-buster diff --git a/testplans/docker-images/Dockerfile.oni-runtime b/testplans/docker-images/Dockerfile.oni-runtime index 27144069a..e2327f2af 100644 --- a/testplans/docker-images/Dockerfile.oni-runtime +++ b/testplans/docker-images/Dockerfile.oni-runtime @@ -1,4 +1,4 @@ -ARG GO_VERSION=1.16.3 +ARG GO_VERSION=1.17.9 FROM golang:${GO_VERSION}-buster as downloader diff --git a/testplans/docker-images/Dockerfile.oni-runtime-debug b/testplans/docker-images/Dockerfile.oni-runtime-debug index 856fcc1fc..8d1e411a1 100644 --- a/testplans/docker-images/Dockerfile.oni-runtime-debug +++ b/testplans/docker-images/Dockerfile.oni-runtime-debug @@ -1,4 +1,4 @@ -ARG GO_VERSION=1.16.3 +ARG GO_VERSION=1.17.9 FROM golang:${GO_VERSION}-buster as downloader From 5b1800556b4768c64c5872c19e2ed4efc3722b7e Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Wed, 20 Apr 2022 11:34:01 +0200 Subject: [PATCH 07/21] ci: fix linting --- .golangci.yml | 2 +- .../sector-storage/ffiwrapper/sealer_test.go | 33 +++++++++++-------- extern/sector-storage/tarutil/systar.go | 2 ++ 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 8cd9e6f40..f73241217 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -25,7 +25,7 @@ skip-dirs: issues: exclude: - - "func name will be used as test\\.Test.* by other packages, and that stutters; consider calling this" + - "by other packages, and that stutters; consider calling this" - "Potential file inclusion via variable" - "should have( a package)? comment" - "Error return value of `logging.SetLogLevel` is not checked" diff --git a/extern/sector-storage/ffiwrapper/sealer_test.go b/extern/sector-storage/ffiwrapper/sealer_test.go index e8848e735..97102e50e 100644 --- a/extern/sector-storage/ffiwrapper/sealer_test.go +++ b/extern/sector-storage/ffiwrapper/sealer_test.go @@ -71,18 +71,21 @@ func (s *seal) precommit(t *testing.T, sb *Sealer, id storage.SectorRef, done fu r := data(id.ID.Number, dlen) s.pi, err = sb.AddPiece(context.TODO(), id, []abi.UnpaddedPieceSize{}, dlen, r) if err != nil { - t.Fatalf("%+v", err) + t.Errorf("%+v", err) + return } s.ticket = sealRand p1, err := sb.SealPreCommit1(context.TODO(), id, s.ticket, []abi.PieceInfo{s.pi}) if err != nil { - t.Fatalf("%+v", err) + t.Errorf("%+v", err) + return } cids, err := sb.SealPreCommit2(context.TODO(), id, p1) if err != nil { - t.Fatalf("%+v", err) + t.Errorf("%+v", err) + return } s.cids = cids } @@ -94,11 +97,13 @@ func (s *seal) commit(t *testing.T, sb *Sealer, done func()) storage.Proof { pc1, err := sb.SealCommit1(context.TODO(), s.ref, s.ticket, seed, []abi.PieceInfo{s.pi}, s.cids) if err != nil { - t.Fatalf("%+v", err) + t.Errorf("%+v", err) + return nil } proof, err := sb.SealCommit2(context.TODO(), s.ref, pc1) if err != nil { - t.Fatalf("%+v", err) + t.Errorf("%+v", err) + return nil } ok, err := ProofVerifier.VerifySeal(proof2.SealVerifyInfo{ @@ -111,11 +116,13 @@ func (s *seal) commit(t *testing.T, sb *Sealer, done func()) storage.Proof { UnsealedCID: s.cids.Unsealed, }) if err != nil { - t.Fatalf("%+v", err) + t.Errorf("%+v", err) + return nil } if !ok { - t.Fatal("proof failed to validate") + t.Errorf("proof failed to validate") + return nil } return proof @@ -458,17 +465,17 @@ func TestSealAndVerify3(t *testing.T) { s3 := seal{ref: si3} wg.Add(3) - go s1.precommit(t, sb, si1, wg.Done) //nolint: staticcheck + go s1.precommit(t, sb, si1, wg.Done) time.Sleep(100 * time.Millisecond) - go s2.precommit(t, sb, si2, wg.Done) //nolint: staticcheck + go s2.precommit(t, sb, si2, wg.Done) time.Sleep(100 * time.Millisecond) - go s3.precommit(t, sb, si3, wg.Done) //nolint: staticcheck + go s3.precommit(t, sb, si3, wg.Done) wg.Wait() wg.Add(3) - go s1.commit(t, sb, wg.Done) //nolint: staticcheck - go s2.commit(t, sb, wg.Done) //nolint: staticcheck - go s3.commit(t, sb, wg.Done) //nolint: staticcheck + go s1.commit(t, sb, wg.Done) + go s2.commit(t, sb, wg.Done) + go s3.commit(t, sb, wg.Done) wg.Wait() post(t, sb, nil, s1, s2, s3) diff --git a/extern/sector-storage/tarutil/systar.go b/extern/sector-storage/tarutil/systar.go index eb958fa02..f67cc44fa 100644 --- a/extern/sector-storage/tarutil/systar.go +++ b/extern/sector-storage/tarutil/systar.go @@ -31,8 +31,10 @@ func ExtractTar(body io.Reader, dir string, buf []byte) error { case nil: } + //nolint:gosec f, err := os.Create(filepath.Join(dir, header.Name)) if err != nil { + //nolint:gosec return xerrors.Errorf("creating file %s: %w", filepath.Join(dir, header.Name), err) } From 48c54605aed12ea5e73ffe422928037955058156 Mon Sep 17 00:00:00 2001 From: jennijuju Date: Tue, 26 Apr 2022 21:19:03 +0200 Subject: [PATCH 08/21] release v1.15.2-rc2 --- CHANGELOG.md | 10 ++++++---- build/openrpc/full.json.gz | Bin 27011 -> 27011 bytes build/openrpc/miner.json.gz | Bin 13540 -> 13540 bytes build/openrpc/worker.json.gz | Bin 4528 -> 4528 bytes build/version.go | 2 +- documentation/en/cli-lotus-miner.md | 2 +- documentation/en/cli-lotus-worker.md | 2 +- documentation/en/cli-lotus.md | 2 +- 8 files changed, 10 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bb937903..11d1e805b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Lotus changelog -# 1.15.2-rc1 / 2022-04-13 +# 1.15.2-rc2 / 2022-04-26 -This is the first release candidate of the next highly recommended feature release v1.15.2. This feature release introduces many new features and for SPs, including PoSt workers, sealing scheduler, snap deal queue and so on. +This is the second release candidate of the next highly recommended feature release v1.15.2. This feature release introduces many new features and for SPs, including PoSt workers, sealing scheduler, snap deal queue and so on. ## Highlights ### ❣️❣️❣️ PoSt Workers ❣️❣️❣️ @@ -84,9 +84,10 @@ The Filecoin Network introduced Snap Deal with the network v15 OhSnap upgrade, a - fix: miner cli: Estimate deal weight in sector list when upgrading ([filecoin-project/lotus#8336](https://github.com/filecoin-project/lotus/pull/8336)) - fix: sealing: FinalizeSector doesn't need sealed replica access ([filecoin-project/lotus#8337](https://github.com/filecoin-project/lotus/pull/8337)) - fix: cli: add ArgsUsage field to clientGetDealCmd ([filecoin-project/lotus#8241](https://github.com/filecoin-project/lotus/pull/8241)) - +- fix: market: Infer index provider topic from network name by default #8533 +- ## Dependency Updates -- Update libp2p to v0.18.1 ([filecoin-project/lotus#8469](https://github.com/filecoin-project/lotus/pull/8469)) +- deps: update go-libp2p@v0.19 #8533 - chore: ffi: update the FFI to update the FVM ([filecoin-project/lotus#8440](https://github.com/filecoin-project/lotus/pull/8440)) - deps: ffi: pull ffi that includes the latest fvm ([filecoin-project/lotus#8424](https://github.com/filecoin-project/lotus/pull/8424)) - Update to go-log 2.5.1 ([filecoin-project/lotus#8422](https://github.com/filecoin-project/lotus/pull/8422)) @@ -107,6 +108,7 @@ The Filecoin Network introduced Snap Deal with the network v15 OhSnap upgrade, a - Update Dockerfile.lotus - chore:sealing:remove endpoint from cli ([filecoin-project/lotus#8215](https://github.com/filecoin-project/lotus/pull/8215)) - chore: build: bump the master version to v1.15.2-dev ([filecoin-project/lotus#8322](https://github.com/filecoin-project/lotus/pull/8322)) +- chore: fix lint issue #8533 ## Contributors diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 081082b4f196f152309466d8918beb8dd85ced73..fb4930c8d94f8ff163c1dc439280c52271559cea 100644 GIT binary patch delta 23 fcmZp^%-DRHaY7$s^~U};862{P^%wUBurdGue5?tT delta 23 fcmZp^%-DRHaY7$s_Qw7<860o#soL%hU}XRRf(Hr| diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index c774ba29fcb5e2878ca240f4c79787180fb67bab..92778b9a2c48b0f6a0c7b32c84960eb50e7e0733 100644 GIT binary patch delta 22 ecmaEo`6P2f7n9+IjXeP-9QEa!q>jyGVgLYrstKe3 delta 22 ecmaEo`6P2f7t_V-8+!swIL=xBn15_069WK@eG4f7 diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index d4fffd6ee02bb654cd00a4e9042b89ab78dae2fc..9f4cb85eaade03b7b2e256f9e435029fe23ca8fa 100644 GIT binary patch delta 4436 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 a>6W7gBe>bzZ~i|30RR6sffdTs1OWi}5zLPO diff --git a/build/version.go b/build/version.go index b0c7435a8..fb453958c 100644 --- a/build/version.go +++ b/build/version.go @@ -37,7 +37,7 @@ func BuildTypeString() string { } // BuildVersion is the local build version -const BuildVersion = "1.15.2-rc1" +const BuildVersion = "1.15.2-rc2" func UserVersion() string { if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" { diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index 61b26c78c..043cd67b6 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -7,7 +7,7 @@ USAGE: lotus-miner [global options] command [command options] [arguments...] VERSION: - 1.15.2-rc1 + 1.15.2-rc2 COMMANDS: init Initialize a lotus miner repo diff --git a/documentation/en/cli-lotus-worker.md b/documentation/en/cli-lotus-worker.md index cd07e744a..e1ec07b51 100644 --- a/documentation/en/cli-lotus-worker.md +++ b/documentation/en/cli-lotus-worker.md @@ -7,7 +7,7 @@ USAGE: lotus-worker [global options] command [command options] [arguments...] VERSION: - 1.15.2-rc1 + 1.15.2-rc2 COMMANDS: run Start lotus worker diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index 78dc54938..754a4dd7a 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -7,7 +7,7 @@ USAGE: lotus [global options] command [command options] [arguments...] VERSION: - 1.15.2-rc1 + 1.15.2-rc2 COMMANDS: daemon Start a lotus daemon process From 4d5e850aa996cea16572b260a102f484e1b8313b Mon Sep 17 00:00:00 2001 From: jennijuju Date: Mon, 2 May 2022 10:59:21 -0400 Subject: [PATCH 09/21] update ffi that includes the log fix --- extern/filecoin-ffi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/filecoin-ffi b/extern/filecoin-ffi index 38f10cf6f..13baee9f4 160000 --- a/extern/filecoin-ffi +++ b/extern/filecoin-ffi @@ -1 +1 @@ -Subproject commit 38f10cf6fa078b989fc774081cd65ba5c53636d8 +Subproject commit 13baee9f410898a99efd710941178deee4f56416 From 94d9dee0dde313d928e56d52674b836ec4aa7304 Mon Sep 17 00:00:00 2001 From: jennijuju Date: Mon, 2 May 2022 11:33:46 -0400 Subject: [PATCH 10/21] update changelog --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11d1e805b..630c68faf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Lotus changelog -# 1.15.2-rc2 / 2022-04-26 +# 1.15.2-rc2 / 2022-05-02 This is the second release candidate of the next highly recommended feature release v1.15.2. This feature release introduces many new features and for SPs, including PoSt workers, sealing scheduler, snap deal queue and so on. @@ -88,7 +88,7 @@ The Filecoin Network introduced Snap Deal with the network v15 OhSnap upgrade, a - ## Dependency Updates - deps: update go-libp2p@v0.19 #8533 -- chore: ffi: update the FFI to update the FVM ([filecoin-project/lotus#8440](https://github.com/filecoin-project/lotus/pull/8440)) +- deps: ffi: update ffi that includes the log fix #8577 - deps: ffi: pull ffi that includes the latest fvm ([filecoin-project/lotus#8424](https://github.com/filecoin-project/lotus/pull/8424)) - Update to go-log 2.5.1 ([filecoin-project/lotus#8422](https://github.com/filecoin-project/lotus/pull/8422)) - chore(deps): update go-data-transfer with fixes (master edition) ([filecoin-project/lotus#8411](https://github.com/filecoin-project/lotus/pull/8411)) From 3702d4be2751f61e213ce2a4e1c9966495021b3a Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Mon, 2 May 2022 16:51:15 -0400 Subject: [PATCH 11/21] Update to FFI with logger bump --- extern/filecoin-ffi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/filecoin-ffi b/extern/filecoin-ffi index 13baee9f4..3f9ecec25 160000 --- a/extern/filecoin-ffi +++ b/extern/filecoin-ffi @@ -1 +1 @@ -Subproject commit 13baee9f410898a99efd710941178deee4f56416 +Subproject commit 3f9ecec25017a871eaa1e673d869ce2efd109881 From 19ec0ef25dc992c30c2e134290a62aceb5d65262 Mon Sep 17 00:00:00 2001 From: Travis Person Date: Mon, 2 May 2022 20:18:31 +0000 Subject: [PATCH 12/21] ci: deps: remove install-deps for macos builds --- .circleci/config.yml | 1 - .circleci/template.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 646045c0f..b74403100 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -388,7 +388,6 @@ jobs: - restore_cache: name: restore cargo cache key: v3-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/lotus/go.sum" }} - - install-deps - run: command: make build no_output_timeout: 30m diff --git a/.circleci/template.yml b/.circleci/template.yml index 755a4f0fa..16d168476 100644 --- a/.circleci/template.yml +++ b/.circleci/template.yml @@ -388,7 +388,6 @@ jobs: - restore_cache: name: restore cargo cache key: v3-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/lotus/go.sum" }} - - install-deps - run: command: make build no_output_timeout: 30m From 704833cd29afe3bec0f0799ea87191c14fdab8a3 Mon Sep 17 00:00:00 2001 From: Travis Person Date: Mon, 2 May 2022 20:36:13 +0000 Subject: [PATCH 13/21] ci: build-all and build-macos on all ci runs --- .circleci/config.yml | 15 ++------------- .circleci/template.yml | 15 ++------------- 2 files changed, 4 insertions(+), 26 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b74403100..465249ef7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -995,11 +995,7 @@ workflows: only: - master - build-debug - - build-all: - filters: - tags: - only: - - /^v\d+\.\d+\.\d+(-rc\d+)?$/ + - build-all - build-ntwk-calibration: filters: tags: @@ -1011,14 +1007,7 @@ workflows: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ - build-lotus-soup - - build-macos: - filters: - branches: - ignore: - - /.*/ - tags: - only: - - /^v\d+\.\d+\.\d+(-rc\d+)?$/ + - build-macos - build-appimage: filters: branches: diff --git a/.circleci/template.yml b/.circleci/template.yml index 16d168476..624db74e3 100644 --- a/.circleci/template.yml +++ b/.circleci/template.yml @@ -800,11 +800,7 @@ workflows: only: - master - build-debug - - build-all: - filters: - tags: - only: - - /^v\d+\.\d+\.\d+(-rc\d+)?$/ + - build-all - build-ntwk-calibration: filters: tags: @@ -816,14 +812,7 @@ workflows: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ - build-lotus-soup - - build-macos: - filters: - branches: - ignore: - - /.*/ - tags: - only: - - /^v\d+\.\d+\.\d+(-rc\d+)?$/ + - build-macos - build-appimage: filters: branches: From 8863bdbfc0e79e4d1c207a4235c71bbe22841977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Mon, 2 May 2022 16:18:31 -0400 Subject: [PATCH 14/21] sealing: Finalize snap sectors before submitting proofs --- extern/storage-sealing/fsm.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/extern/storage-sealing/fsm.go b/extern/storage-sealing/fsm.go index 034433a59..4e36ada6c 100644 --- a/extern/storage-sealing/fsm.go +++ b/extern/storage-sealing/fsm.go @@ -166,25 +166,25 @@ var fsmPlanners = map[SectorState]func(events []statemachine.Event, state *Secto on(SectorAbortUpgrade{}, AbortUpgrade), ), ProveReplicaUpdate: planOne( - on(SectorProveReplicaUpdate{}, SubmitReplicaUpdate), + on(SectorProveReplicaUpdate{}, FinalizeReplicaUpdate), on(SectorProveReplicaUpdateFailed{}, ReplicaUpdateFailed), on(SectorDealsExpired{}, SnapDealsDealsExpired), on(SectorInvalidDealIDs{}, SnapDealsRecoverDealIDs), on(SectorAbortUpgrade{}, AbortUpgrade), ), + FinalizeReplicaUpdate: planOne( + on(SectorFinalized{}, SubmitReplicaUpdate), + on(SectorFinalizeFailed{}, FinalizeReplicaUpdateFailed), + ), SubmitReplicaUpdate: planOne( on(SectorReplicaUpdateSubmitted{}, ReplicaUpdateWait), on(SectorSubmitReplicaUpdateFailed{}, ReplicaUpdateFailed), ), ReplicaUpdateWait: planOne( - on(SectorReplicaUpdateLanded{}, FinalizeReplicaUpdate), + on(SectorReplicaUpdateLanded{}, UpdateActivating), on(SectorSubmitReplicaUpdateFailed{}, ReplicaUpdateFailed), on(SectorAbortUpgrade{}, AbortUpgrade), ), - FinalizeReplicaUpdate: planOne( - on(SectorFinalized{}, UpdateActivating), - on(SectorFinalizeFailed{}, FinalizeReplicaUpdateFailed), - ), UpdateActivating: planOne( on(SectorUpdateActive{}, ReleaseSectorKey), ), From 662f7526c98584d3f9095b73717bb4ef12f6ba64 Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Mon, 2 May 2022 16:51:15 -0400 Subject: [PATCH 15/21] Update to FFI with logger bump --- extern/filecoin-ffi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/filecoin-ffi b/extern/filecoin-ffi index 13baee9f4..3f9ecec25 160000 --- a/extern/filecoin-ffi +++ b/extern/filecoin-ffi @@ -1 +1 @@ -Subproject commit 13baee9f410898a99efd710941178deee4f56416 +Subproject commit 3f9ecec25017a871eaa1e673d869ce2efd109881 From 702089263172484d365087f0d2b71543aaa24f84 Mon Sep 17 00:00:00 2001 From: jennijuju Date: Tue, 3 May 2022 15:46:43 -0400 Subject: [PATCH 16/21] v1.15.3-rc3 prep --- CHANGELOG.md | 4 ++-- build/openrpc/full.json.gz | Bin 27011 -> 27011 bytes build/openrpc/miner.json.gz | Bin 13540 -> 13540 bytes build/openrpc/worker.json.gz | Bin 4528 -> 4528 bytes build/version.go | 2 +- documentation/en/cli-lotus-miner.md | 2 +- documentation/en/cli-lotus-worker.md | 2 +- documentation/en/cli-lotus.md | 2 +- 8 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 630c68faf..796ecf5d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Lotus changelog -# 1.15.2-rc2 / 2022-05-02 +# 1.15.2-rc3 / 2022-05-03 -This is the second release candidate of the next highly recommended feature release v1.15.2. This feature release introduces many new features and for SPs, including PoSt workers, sealing scheduler, snap deal queue and so on. +This is the third release candidate of the next highly recommended feature release v1.15.2. This feature release introduces many new features and for SPs, including PoSt workers, sealing scheduler, snap deal queue and so on. ## Highlights ### ❣️❣️❣️ PoSt Workers ❣️❣️❣️ diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index fb4930c8d94f8ff163c1dc439280c52271559cea..ef228fa4e4c417eed566950cd86b06c68e90e6e8 100644 GIT binary patch literal 27011 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 literal 27011 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 diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 92778b9a2c48b0f6a0c7b32c84960eb50e7e0733..0823f15787aa63ca78b7982c491a52d122fa2274 100644 GIT binary patch delta 21 dcmaEo`6P2fH{+F!Jpm>h`Wu&AI5v}s0RVZO3JCxJ delta 21 dcmaEo`6P2fH{*qkJpm>h_2rwSj?H9Z004It33C7d diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 9f4cb85eaade03b7b2e256f9e435029fe23ca8fa..1e5d4fefc0f4028ffcd25189ec1032892bc67510 100644 GIT binary patch delta 21 dcmdm>yg_+FD`V)!HYGuh38gMKuCOpN003F)2Yvtm delta 21 dcmdm>yg_+FE2HSfHYGuh!~HoIudpyO003Eq2dn@9 diff --git a/build/version.go b/build/version.go index fb453958c..00331eabf 100644 --- a/build/version.go +++ b/build/version.go @@ -37,7 +37,7 @@ func BuildTypeString() string { } // BuildVersion is the local build version -const BuildVersion = "1.15.2-rc2" +const BuildVersion = "1.15.2-rc3" func UserVersion() string { if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" { diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index 043cd67b6..afe9acbcd 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -7,7 +7,7 @@ USAGE: lotus-miner [global options] command [command options] [arguments...] VERSION: - 1.15.2-rc2 + 1.15.2-rc3 COMMANDS: init Initialize a lotus miner repo diff --git a/documentation/en/cli-lotus-worker.md b/documentation/en/cli-lotus-worker.md index e1ec07b51..fa5426234 100644 --- a/documentation/en/cli-lotus-worker.md +++ b/documentation/en/cli-lotus-worker.md @@ -7,7 +7,7 @@ USAGE: lotus-worker [global options] command [command options] [arguments...] VERSION: - 1.15.2-rc2 + 1.15.2-rc3 COMMANDS: run Start lotus worker diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index 754a4dd7a..2bbd9b616 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -7,7 +7,7 @@ USAGE: lotus [global options] command [command options] [arguments...] VERSION: - 1.15.2-rc2 + 1.15.2-rc3 COMMANDS: daemon Start a lotus daemon process From 7184c9a529ca65b6dac20a7bce9c6868d99edf86 Mon Sep 17 00:00:00 2001 From: jennijuju Date: Tue, 3 May 2022 15:38:42 -0400 Subject: [PATCH 17/21] add actor bundles to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 33fbffa3c..a6fab7331 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,7 @@ build/paramfetch.sh /darwin /linux *.snap +build/builtin-actors *-fuzz.zip /chain/types/work_msg/ From 69db8773357f1d77881e3ccc190e42b28a843c35 Mon Sep 17 00:00:00 2001 From: jennijuju Date: Tue, 3 May 2022 15:50:28 -0400 Subject: [PATCH 18/21] update changelog --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 796ecf5d3..d6e0cb5d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -85,7 +85,9 @@ The Filecoin Network introduced Snap Deal with the network v15 OhSnap upgrade, a - fix: sealing: FinalizeSector doesn't need sealed replica access ([filecoin-project/lotus#8337](https://github.com/filecoin-project/lotus/pull/8337)) - fix: cli: add ArgsUsage field to clientGetDealCmd ([filecoin-project/lotus#8241](https://github.com/filecoin-project/lotus/pull/8241)) - fix: market: Infer index provider topic from network name by default #8533 -- +- fix: deps: Update to FFI with logger bump #8588 +- fix: sealing: Finalize snap sectors before submitting proofs #8588 + ## Dependency Updates - deps: update go-libp2p@v0.19 #8533 - deps: ffi: update ffi that includes the log fix #8577 @@ -97,6 +99,7 @@ The Filecoin Network introduced Snap Deal with the network v15 OhSnap upgrade, a - chore: ffi: the latest fvm release ([filecoin-project/lotus#8381](https://github.com/filecoin-project/lotus/pull/8381)) - Update params for interopnet for fvm ([filecoin-project/lotus#8119](https://github.com/filecoin-project/lotus/pull/8119)) - github.com/filecoin-project/specs-storage (v0.2.0 -> v0.2.2): +- ci: deps: macos build deps #8588 ## Others - chore: merge releases back to master ([filecoin-project/lotus#8468](https://github.com/filecoin-project/lotus/pull/8468)) From 304fa02d59106ecdc8813e05ce01600cb5e0a980 Mon Sep 17 00:00:00 2001 From: Jennifer Wang Date: Fri, 6 May 2022 01:57:03 -0400 Subject: [PATCH 19/21] v1.15.2 prep --- CHANGELOG.md | 50 ++++++++++++++------------- build/openrpc/full.json.gz | Bin 27011 -> 27007 bytes build/openrpc/miner.json.gz | Bin 13540 -> 13537 bytes build/openrpc/worker.json.gz | Bin 4528 -> 4525 bytes build/version.go | 2 +- documentation/en/cli-lotus-miner.md | 2 +- documentation/en/cli-lotus-worker.md | 2 +- documentation/en/cli-lotus.md | 2 +- 8 files changed, 30 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6e0cb5d3..e4750b4a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,15 @@ # Lotus changelog -# 1.15.2-rc3 / 2022-05-03 +# 1.15.2 / 2022-05-06 -This is the third release candidate of the next highly recommended feature release v1.15.2. This feature release introduces many new features and for SPs, including PoSt workers, sealing scheduler, snap deal queue and so on. +This is a highly recommended feature lotus release v1.15.2. This feature release introduces many new features and for SPs, including PoSt workers, sealing scheduler, snap deal queue and so on. + +Note: You need to be using go v1.17.9&up from this release onwards. ## Highlights ### ❣️❣️❣️ PoSt Workers ❣️❣️❣️ ‼️️Attention - the long-awaited yet highly requested PoSt workers, they are here! And they come in as a combo: you may setup PoSt workers for both winningPoSt or/and windowPoSt worker. You can also setup any number of PoSt workers as long as you have the hardware resources! -For more details and learn how to set it up, see the (WIP) docs [here](https://deploy-preview-158--lotus-docs.netlify.app/storage-providers/seal-workers/post-workers/). You can also find early result of the PoSt workers performance by the community [here](https://github.com/filecoin-project/lotus/discussions/8375). +For more details and learn how to set it up, see the docs [here](https://lotus.filecoin.io/storage-providers/seal-workers/post-workers/). You can also find early result of the PoSt workers performance by the community [here](https://github.com/filecoin-project/lotus/discussions/8375). - feat: PoSt workers ([filecoin-project/lotus#7971](https://github.com/filecoin-project/lotus/pull/7971)) - feat: storage: Parallel proving checks ([filecoin-project/lotus#8391](https://github.com/filecoin-project/lotus/pull/8391)) - adjust `ParallelCheckLimit` according to your resource setup to get pre-post checkers run faster! @@ -117,35 +119,35 @@ The Filecoin Network introduced Snap Deal with the network v15 OhSnap upgrade, a | Contributor | Commits | Lines ± | Files Changed | |-------------|---------|---------|---------------| -| Łukasz Magiera | 95 | +5147/-2922 | 401 | -| mz-sirius | 3 | +1789/-546 | 48 | -| Anton Evangelatov | 11 | +777/-567 | 121 | -| Aayush | 11 | +336/-231 | 28 | +| @magik6k | 95 | +5147/-2922 | 401 | +| @mz-sirius | 3 | +1789/-546 | 48 | +| @nonsense | 11 | +777/-567 | 121 | +| @arajasek | 11 | +336/-231 | 28 | | Darko Brdareski | 1 | +463/-13 | 95 | -| Cory Schwartz | 11 | +147/-217 | 13 | +| @coryschwartz | 11 | +147/-217 | 13 | | spark8899 | 2 | +300/-0 | 2 | -| zenground0 | 2 | +6/-193 | 7 | +| @zenground0 | 2 | +6/-193 | 7 | | Eng Zer Jun | 1 | +31/-158 | 11 | | Kevin Li | 2 | +174/-0 | 14 | -| Aayush Rajasekaran | 5 | +85/-86 | 18 | -| Jiaying Wang | 1 | +0/-119 | 3 | -| jennijuju | 1 | +0/-98 | 6 | -| Raúl Kripalani | 1 | +60/-1 | 1 | -| frrist | 1 | +56/-0 | 2 | -| vyzo | 3 | +18/-16 | 5 | -| Masih H. Derkani | 3 | +29/-4 | 3 | -| Jennifer Wang | 4 | +18/-11 | 11 | -| hannahhoward | 1 | +13/-10 | 2 | -| Dirk McCormick | 1 | +21/-1 | 1 | +| @arajasek | 5 | +85/-86 | 18 | +| @jennijuju | 1 | +0/-119 | 3 | +| @jennijuju | 1 | +0/-98 | 6 | +| @raulk | 1 | +60/-1 | 1 | +| @frrist | 1 | +56/-0 | 2 | +| @vyzo | 3 | +18/-16 | 5 | +| @Masih | 3 | +29/-4 | 3 | +| @jennijuju | 4 | +18/-11 | 11 | +| @hannahhoward | 1 | +13/-10 | 2 | +| @dirkmc | 1 | +21/-1 | 1 | | koalacxr | 1 | +10/-11 | 4 | | Aarsh Shah | 1 | +19/-1 | 1 | -| Rjan | 6 | +10/-8 | 7 | -| zl | 1 | +7/-1 | 1 | +| @Rjan | 6 | +10/-8 | 7 | +| @zl | 1 | +7/-1 | 1 | | KAYUII | 1 | +3/-2 | 1 | -| simlecode | 1 | +4/-0 | 1 | -| dirkmc | 1 | +1/-3 | 1 | +| @simlecode | 1 | +4/-0 | 1 | +| @dirkmc | 1 | +1/-3 | 1 | | Jerry | 1 | +3/-0 | 1 | -| Steven Allen | 1 | +1/-1 | 1 | +| @steblian | 1 | +1/-1 | 1 | | Geoff Stuart | 1 | +1/-0 | 1 | | Florian Ruen | 1 | +0/-1 | 1 | diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index ef228fa4e4c417eed566950cd86b06c68e90e6e8..7c9effd234bf5621b41592e7872641074454872b 100644 GIT binary patch delta 26942 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 delta 26945 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 z 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 aZaHc&f}73#=Kli#0RR6I<&w701OWibdB!LJ delta 4439 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 diff --git a/build/version.go b/build/version.go index 00331eabf..ecf411edc 100644 --- a/build/version.go +++ b/build/version.go @@ -37,7 +37,7 @@ func BuildTypeString() string { } // BuildVersion is the local build version -const BuildVersion = "1.15.2-rc3" +const BuildVersion = "1.15.2" func UserVersion() string { if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" { diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index afe9acbcd..3bc297c3e 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -7,7 +7,7 @@ USAGE: lotus-miner [global options] command [command options] [arguments...] VERSION: - 1.15.2-rc3 + 1.15.2 COMMANDS: init Initialize a lotus miner repo diff --git a/documentation/en/cli-lotus-worker.md b/documentation/en/cli-lotus-worker.md index fa5426234..41f540208 100644 --- a/documentation/en/cli-lotus-worker.md +++ b/documentation/en/cli-lotus-worker.md @@ -7,7 +7,7 @@ USAGE: lotus-worker [global options] command [command options] [arguments...] VERSION: - 1.15.2-rc3 + 1.15.2 COMMANDS: run Start lotus worker diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index 2bbd9b616..8bf164e3d 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -7,7 +7,7 @@ USAGE: lotus [global options] command [command options] [arguments...] VERSION: - 1.15.2-rc3 + 1.15.2 COMMANDS: daemon Start a lotus daemon process From 5efa364d5059fd51a315d2e2bf8fda7a2999953d Mon Sep 17 00:00:00 2001 From: Travis Person Date: Wed, 4 May 2022 16:24:54 +0000 Subject: [PATCH 20/21] fix: ci: build macos and linux assets on tagged releases --- .circleci/config.yml | 12 ++++++++++-- .circleci/template.yml | 12 ++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 465249ef7..a2b5640a3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -995,7 +995,11 @@ workflows: only: - master - build-debug - - build-all + - build-all: + filters: + tags: + only: + - /^v\d+\.\d+\.\d+(-rc\d+)?$/ - build-ntwk-calibration: filters: tags: @@ -1007,7 +1011,11 @@ workflows: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ - build-lotus-soup - - build-macos + - build-macos: + filters: + tags: + only: + - /^v\d+\.\d+\.\d+(-rc\d+)?$/ - build-appimage: filters: branches: diff --git a/.circleci/template.yml b/.circleci/template.yml index 624db74e3..db7d18bc0 100644 --- a/.circleci/template.yml +++ b/.circleci/template.yml @@ -800,7 +800,11 @@ workflows: only: - master - build-debug - - build-all + - build-all: + filters: + tags: + only: + - /^v\d+\.\d+\.\d+(-rc\d+)?$/ - build-ntwk-calibration: filters: tags: @@ -812,7 +816,11 @@ workflows: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ - build-lotus-soup - - build-macos + - build-macos: + filters: + tags: + only: + - /^v\d+\.\d+\.\d+(-rc\d+)?$/ - build-appimage: filters: branches: From f4931c6098fab1c91891e3cded43718252075503 Mon Sep 17 00:00:00 2001 From: zenground0 Date: Wed, 4 May 2022 15:22:54 -0400 Subject: [PATCH 21/21] attempt to fix codecov --- .codecov.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.codecov.yml b/.codecov.yml index 01070e230..88869dd97 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -17,6 +17,7 @@ coverage: status: patch: off project: + threshold: 1% tools-and-tests: target: auto threshold: 1%