From 3c8aa18f70d54edbef778659485da8c4bd7af2a9 Mon Sep 17 00:00:00 2001 From: vyzo Date: Tue, 12 Apr 2022 11:32:37 +0300 Subject: [PATCH 01/47] enabled rcmgr by default; disable with LOTUS_RCMGR=0 --- node/modules/lp2p/rcmgr.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/node/modules/lp2p/rcmgr.go b/node/modules/lp2p/rcmgr.go index d0906fd8f..13d97418a 100644 --- a/node/modules/lp2p/rcmgr.go +++ b/node/modules/lp2p/rcmgr.go @@ -28,8 +28,8 @@ import ( func ResourceManager(connMgrHi uint) func(lc fx.Lifecycle, repo repo.LockedRepo) (network.ResourceManager, error) { return func(lc fx.Lifecycle, repo repo.LockedRepo) (network.ResourceManager, error) { envvar := os.Getenv("LOTUS_RCMGR") - if envvar == "" || envvar == "0" { - // TODO opt-in for now -- flip this to enabled by default once we are comfortable with testing + if envvar == "0" { + // this is enabled by default; specify LOTUS_RCMGR=0 to disable log.Info("libp2p resource manager is disabled") return network.NullResourceManager, nil } From 372dd2ced9d68b4309e934c608ebd7ee7d96ecb9 Mon Sep 17 00:00:00 2001 From: jennijuju Date: Wed, 13 Apr 2022 19:07:29 +0200 Subject: [PATCH 02/47] 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 03/47] 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 04/47] 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 05/47] 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 06/47] 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 07/47] 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 6c40d363f587eaaac4142d4b82637d1cbc00e782 Mon Sep 17 00:00:00 2001 From: swift-mx Date: Sun, 24 Apr 2022 11:50:54 +0800 Subject: [PATCH 08/47] fix: update StatApplied when fvm apply message --- chain/vm/fvm.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/chain/vm/fvm.go b/chain/vm/fvm.go index cdccbc11a..eaecd7eb4 100644 --- a/chain/vm/fvm.go +++ b/chain/vm/fvm.go @@ -3,6 +3,7 @@ package vm import ( "bytes" "context" + "sync/atomic" "time" "github.com/ipfs/go-cid" @@ -294,6 +295,7 @@ func NewFVM(ctx context.Context, opts *VMOpts) (*FVM, error) { func (vm *FVM) ApplyMessage(ctx context.Context, cmsg types.ChainMsg) (*ApplyRet, error) { start := build.Clock.Now() + defer atomic.AddUint64(&StatApplied, 1) msgBytes, err := cmsg.VMMessage().Serialize() if err != nil { return nil, xerrors.Errorf("serializing msg: %w", err) @@ -335,6 +337,7 @@ func (vm *FVM) ApplyMessage(ctx context.Context, cmsg types.ChainMsg) (*ApplyRet func (vm *FVM) ApplyImplicitMessage(ctx context.Context, cmsg *types.Message) (*ApplyRet, error) { start := build.Clock.Now() + defer atomic.AddUint64(&StatApplied, 1) msgBytes, err := cmsg.VMMessage().Serialize() if err != nil { return nil, xerrors.Errorf("serializing msg: %w", err) From 5b1800556b4768c64c5872c19e2ed4efc3722b7e Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Wed, 20 Apr 2022 11:34:01 +0200 Subject: [PATCH 09/47] 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 a50a20b5a710e36424989f39a56e64c252a2273f Mon Sep 17 00:00:00 2001 From: Rjan Date: Tue, 26 Apr 2022 09:10:38 +0200 Subject: [PATCH 10/47] fix: worker: Download proofs if PRU2 is enabled The lotus-worker does not check or download the params if Prove Replica Update tasks are enabled. --- cmd/lotus-worker/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/lotus-worker/main.go b/cmd/lotus-worker/main.go index 12c5f8dc8..6cd45e0e2 100644 --- a/cmd/lotus-worker/main.go +++ b/cmd/lotus-worker/main.go @@ -289,7 +289,7 @@ var runCmd = &cli.Command{ return err } - if cctx.Bool("commit") { + if cctx.Bool("commit") || cctx.Bool("prove-replica-update2") { if err := paramfetch.GetParams(ctx, build.ParametersJSON(), build.SrsJSON(), uint64(ssize)); err != nil { return xerrors.Errorf("get params: %w", err) } From 48c54605aed12ea5e73ffe422928037955058156 Mon Sep 17 00:00:00 2001 From: jennijuju Date: Tue, 26 Apr 2022 21:19:03 +0200 Subject: [PATCH 11/47] 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 04bb53950281b016c6dcef639e69727f8e81b456 Mon Sep 17 00:00:00 2001 From: Rjan Date: Thu, 28 Apr 2022 10:10:29 +0200 Subject: [PATCH 12/47] fix: lotus-wallet: correct network in version Adding $(GOFLAGS) so that when compiling on calibnet, the correct network is shown, instead of showing just `mainnet`. Should address 2. in #8459 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 73e7dda40..6d5a466b5 100644 --- a/Makefile +++ b/Makefile @@ -193,7 +193,7 @@ BINS+=lotus-health lotus-wallet: rm -f lotus-wallet - $(GOCC) build -o lotus-wallet ./cmd/lotus-wallet + $(GOCC) build $(GOFLAGS) -o lotus-wallet ./cmd/lotus-wallet .PHONY: lotus-wallet BINS+=lotus-wallet From 562d4e0f85ce35a2b036039b150ed8d4a5299af7 Mon Sep 17 00:00:00 2001 From: Rob Quist Date: Thu, 28 Apr 2022 14:49:46 +0200 Subject: [PATCH 13/47] Clean up vanilla fetching errors for proper display Results; ``` 2 0 2374 good 2 0 2409 good 2 0 2282 bad (generating vanilla proof: non-200 code from http://10.224.3.83:1123/remote/vanilla/single: 'fsstat: path not found ') 2 0 2579 good 2 0 2338 good ``` This PR should change that to; ``` 2 0 2374 good 2 0 2409 good 2 0 2282 bad (generating vanilla proof: non-200 code from http://10.224.3.83:1123/remote/vanilla/single: 'fsstat: path not found') 2 0 2579 good 2 0 2338 good ``` --- extern/sector-storage/stores/remote.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/sector-storage/stores/remote.go b/extern/sector-storage/stores/remote.go index 62c780d09..441088228 100644 --- a/extern/sector-storage/stores/remote.go +++ b/extern/sector-storage/stores/remote.go @@ -827,7 +827,7 @@ func (r *Remote) GenerateSingleVanillaProof(ctx context.Context, minerID abi.Act log.Error("response close: ", err) } - return nil, xerrors.Errorf("non-200 code from %s: '%s'", url, string(body)) + return nil, xerrors.Errorf("non-200 code from %s: '%s'", url, strings.TrimSpace(string(body))) } body, err := ioutil.ReadAll(resp.Body) From 4d5e850aa996cea16572b260a102f484e1b8313b Mon Sep 17 00:00:00 2001 From: jennijuju Date: Mon, 2 May 2022 10:59:21 -0400 Subject: [PATCH 14/47] 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 15/47] 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 3ab625fa4c4507d16e6256c1f17026cb47659ee2 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 16/47] 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 d6618c75a014084ae1411bae12c47cf361fcd78a Mon Sep 17 00:00:00 2001 From: Travis Person Date: Mon, 2 May 2022 20:18:31 +0000 Subject: [PATCH 17/47] 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 acda4b9e4..20c82aea0 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 2033d2169..f2fa1c080 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 415b506a859ea5b3b6dab64bc112781e20ad8b8c Mon Sep 17 00:00:00 2001 From: Travis Person Date: Mon, 2 May 2022 20:36:13 +0000 Subject: [PATCH 18/47] 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 20c82aea0..0e0ea5adc 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1000,11 +1000,7 @@ workflows: only: - master - build-debug - - build-all: - filters: - tags: - only: - - /^v\d+\.\d+\.\d+(-rc\d+)?$/ + - build-all - build-ntwk-calibration: filters: tags: @@ -1016,14 +1012,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 f2fa1c080..cd846ee45 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 3702d4be2751f61e213ce2a4e1c9966495021b3a Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Mon, 2 May 2022 16:51:15 -0400 Subject: [PATCH 19/47] 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 33f190c9ce13ed507af713496574cf24bde40dd6 Mon Sep 17 00:00:00 2001 From: zenground0 Date: Tue, 3 May 2022 11:48:22 -0400 Subject: [PATCH 20/47] Unneeded todo --- api/types.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/api/types.go b/api/types.go index a91c27d26..9125744ba 100644 --- a/api/types.go +++ b/api/types.go @@ -19,8 +19,6 @@ import ( ma "github.com/multiformats/go-multiaddr" ) -// TODO: check if this exists anywhere else - type MultiaddrSlice []ma.Multiaddr func (m *MultiaddrSlice) UnmarshalJSON(raw []byte) (err error) { From 19ec0ef25dc992c30c2e134290a62aceb5d65262 Mon Sep 17 00:00:00 2001 From: Travis Person Date: Mon, 2 May 2022 20:18:31 +0000 Subject: [PATCH 21/47] 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 22/47] 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 23/47] 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 24/47] 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 25/47] 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 514c756570911d18c985d2f6243609286271a9b4 Mon Sep 17 00:00:00 2001 From: Geoff Stuart Date: Tue, 3 May 2022 14:35:06 -0400 Subject: [PATCH 26/47] Alias cli commands --- cli/chain.go | 5 ++++- cli/net.go | 3 ++- cli/state.go | 3 +++ cmd/lotus-miner/actor.go | 5 +++-- cmd/lotus-miner/proving.go | 5 +++-- cmd/lotus-shed/blockmsgid.go | 3 ++- cmd/lotus-shed/keyinfo.go | 5 +++-- cmd/lotus-shed/miner.go | 2 +- cmd/lotus-shed/mpool.go | 3 ++- cmd/lotus-shed/msg.go | 3 ++- cmd/lotus-sim/info_message.go | 1 + 11 files changed, 26 insertions(+), 12 deletions(-) diff --git a/cli/chain.go b/cli/chain.go index 63aa79483..00b9a73c6 100644 --- a/cli/chain.go +++ b/cli/chain.go @@ -90,7 +90,8 @@ var ChainHeadCmd = &cli.Command{ } var ChainGetBlock = &cli.Command{ - Name: "getblock", + Name: "get-block", + Aliases: []string{"getblock"}, Usage: "Get a block and print its details", ArgsUsage: "[blockCid]", Flags: []cli.Flag{ @@ -299,6 +300,7 @@ var ChainStatObjCmd = &cli.Command{ var ChainGetMsgCmd = &cli.Command{ Name: "getmessage", + Aliases: []string{"get-message", "get-msg"}, Usage: "Get and print a message by its cid", ArgsUsage: "[messageCid]", Action: func(cctx *cli.Context) error { @@ -349,6 +351,7 @@ var ChainGetMsgCmd = &cli.Command{ var ChainSetHeadCmd = &cli.Command{ Name: "sethead", + Aliases: []string{"set-head"}, Usage: "manually set the local nodes head tipset (Caution: normally only used for recovery)", ArgsUsage: "[tipsetkey]", Flags: []cli.Flag{ diff --git a/cli/net.go b/cli/net.go index c9a9a4392..5248a1410 100644 --- a/cli/net.go +++ b/cli/net.go @@ -358,7 +358,8 @@ var NetId = &cli.Command{ } var NetFindPeer = &cli.Command{ - Name: "findpeer", + Name: "find-peer", + Aliases: []string{"findpeer"}, Usage: "Find the addresses of a given peerID", ArgsUsage: "[peerId]", Action: func(cctx *cli.Context) error { diff --git a/cli/state.go b/cli/state.go index 18d9a12bd..b1346d6cd 100644 --- a/cli/state.go +++ b/cli/state.go @@ -1428,6 +1428,7 @@ func jsonReturn(code cid.Cid, method abi.MethodNum, ret []byte) (string, error) var StateWaitMsgCmd = &cli.Command{ Name: "wait-msg", + Aliases: []string{"wait-message"}, Usage: "Wait for a message to appear on chain", ArgsUsage: "[messageCid]", Flags: []cli.Flag{ @@ -1470,6 +1471,7 @@ var StateWaitMsgCmd = &cli.Command{ var StateSearchMsgCmd = &cli.Command{ Name: "search-msg", + Aliases: []string{"search-message"}, Usage: "Search to see whether a message has appeared on chain", ArgsUsage: "[messageCid]", Action: func(cctx *cli.Context) error { @@ -1727,6 +1729,7 @@ var StateCircSupplyCmd = &cli.Command{ var StateSectorCmd = &cli.Command{ Name: "sector", + Aliases: []string{"sector-info"}, Usage: "Get miner sector info", ArgsUsage: "[minerAddress] [sectorNumber]", Action: func(cctx *cli.Context) error { diff --git a/cmd/lotus-miner/actor.go b/cmd/lotus-miner/actor.go index 1409557cf..01440a09e 100644 --- a/cmd/lotus-miner/actor.go +++ b/cmd/lotus-miner/actor.go @@ -51,8 +51,9 @@ var actorCmd = &cli.Command{ } var actorSetAddrsCmd = &cli.Command{ - Name: "set-addrs", - Usage: "set addresses that your miner can be publicly dialed on", + Name: "set-addresses", + Aliases: []string{"set-addrs"}, + Usage: "set addresses that your miner can be publicly dialed on", Flags: []cli.Flag{ &cli.Int64Flag{ Name: "gas-limit", diff --git a/cmd/lotus-miner/proving.go b/cmd/lotus-miner/proving.go index ed4516b5a..faae5e955 100644 --- a/cmd/lotus-miner/proving.go +++ b/cmd/lotus-miner/proving.go @@ -522,8 +522,9 @@ var provingComputeCmd = &cli.Command{ } var provingComputeWindowPoStCmd = &cli.Command{ - Name: "window-post", - Usage: "Compute WindowPoSt for a specific deadline", + Name: "windowed-post", + Aliases: []string{"window-post"}, + Usage: "Compute WindowPoSt for a specific deadline", Description: `Note: This command is intended to be used to verify PoSt compute performance. It will not send any messages to the chain.`, ArgsUsage: "[deadline index]", diff --git a/cmd/lotus-shed/blockmsgid.go b/cmd/lotus-shed/blockmsgid.go index 85b786ec0..3dc26b92d 100644 --- a/cmd/lotus-shed/blockmsgid.go +++ b/cmd/lotus-shed/blockmsgid.go @@ -14,7 +14,8 @@ import ( ) var blockmsgidCmd = &cli.Command{ - Name: "blockmsgid", + Name: "block-message-id", + Aliases: []string{"blockmsgid"}, Usage: "Print a block's pubsub message ID", ArgsUsage: " ...", Action: func(cctx *cli.Context) error { diff --git a/cmd/lotus-shed/keyinfo.go b/cmd/lotus-shed/keyinfo.go index 3c99b5050..00ac9dc50 100644 --- a/cmd/lotus-shed/keyinfo.go +++ b/cmd/lotus-shed/keyinfo.go @@ -41,8 +41,9 @@ type keyInfoOutput struct { } var keyinfoCmd = &cli.Command{ - Name: "keyinfo", - Usage: "work with lotus keyinfo files (wallets and libp2p host keys)", + Name: "key-info", + Aliases: []string{"keyinfo"}, + Usage: "work with lotus keyinfo files (wallets and libp2p host keys)", Description: `The subcommands of keyinfo provide helpful tools for working with keyinfo files without having to run the lotus daemon.`, Subcommands: []*cli.Command{ diff --git a/cmd/lotus-shed/miner.go b/cmd/lotus-shed/miner.go index 479e081e9..c44b67d77 100644 --- a/cmd/lotus-shed/miner.go +++ b/cmd/lotus-shed/miner.go @@ -119,7 +119,7 @@ var minerFaultsCmd = &cli.Command{ var minerCreateCmd = &cli.Command{ Name: "create", - Usage: "sends a create miner msg", + Usage: "sends a create miner message", ArgsUsage: "[sender] [owner] [worker] [sector size]", Action: func(cctx *cli.Context) error { wapi, closer, err := lcli.GetFullNodeAPI(cctx) diff --git a/cmd/lotus-shed/mpool.go b/cmd/lotus-shed/mpool.go index 004bd99a6..f4744d615 100644 --- a/cmd/lotus-shed/mpool.go +++ b/cmd/lotus-shed/mpool.go @@ -20,7 +20,8 @@ var mpoolCmd = &cli.Command{ } var minerSelectMsgsCmd = &cli.Command{ - Name: "miner-select-msgs", + Name: "miner-select-messages", + Aliases: []string{"miner-select-msgs"}, Flags: []cli.Flag{ &cli.Float64Flag{ Name: "ticket-quality", diff --git a/cmd/lotus-shed/msg.go b/cmd/lotus-shed/msg.go index 7853624a6..d8e02bc82 100644 --- a/cmd/lotus-shed/msg.go +++ b/cmd/lotus-shed/msg.go @@ -22,7 +22,8 @@ import ( ) var msgCmd = &cli.Command{ - Name: "msg", + Name: "message", + Aliases: []string{"msg"}, Usage: "Translate message between various formats", ArgsUsage: "Message in any form", Action: func(cctx *cli.Context) error { diff --git a/cmd/lotus-sim/info_message.go b/cmd/lotus-sim/info_message.go index afdd20c4e..91c57ba5c 100644 --- a/cmd/lotus-sim/info_message.go +++ b/cmd/lotus-sim/info_message.go @@ -16,6 +16,7 @@ import ( var infoMessageSizeSimCommand = &cli.Command{ Name: "message-size", + Aliases: []string{"msg-size"}, Description: "Output information about message size distribution", Flags: []cli.Flag{ &cli.Int64Flag{ From 12498092839a8f6ad70a3d07a6b590bde93c7368 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Tue, 3 May 2022 15:47:14 -0400 Subject: [PATCH 27/47] stores: Deduplicate parallel stat requests --- extern/sector-storage/stores/local.go | 51 +++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/extern/sector-storage/stores/local.go b/extern/sector-storage/stores/local.go index 4efddca38..e33b662d5 100644 --- a/extern/sector-storage/stores/local.go +++ b/extern/sector-storage/stores/local.go @@ -85,9 +85,58 @@ type path struct { reserved int64 reservations map[abi.SectorID]storiface.SectorFileType + + statLk sync.Mutex + statDone chan struct{} + + lastStat *fsutil.FsStat // nil if no stat / was error } func (p *path) stat(ls LocalStorage) (fsutil.FsStat, error) { + for { + p.statLk.Lock() + if p.statDone == nil { + p.statDone = make(chan struct{}) + p.statLk.Unlock() + + st, err := p.doStat(ls) + + p.statLk.Lock() + p.lastStat = nil + if err == nil { + p.lastStat = &st + } + close(p.statDone) + p.statDone = nil + p.statLk.Unlock() + return st, err + } + + doneCh := p.statDone + p.statLk.Unlock() + + select { + case <-doneCh: + // todo context? + } + + p.statLk.Lock() + if p.lastStat == nil { + p.statLk.Unlock() + continue + } + + st := *p.lastStat + + p.statLk.Unlock() + + return st, nil + } +} + +func (p *path) doStat(ls LocalStorage) (fsutil.FsStat, error) { + start := time.Now() + stat, err := ls.Stat(p.local) if err != nil { return fsutil.FsStat{}, xerrors.Errorf("stat %s: %w", p.local, err) @@ -155,6 +204,8 @@ func (p *path) stat(ls LocalStorage) (fsutil.FsStat, error) { } } + log.Infow("storage stat", "took", time.Now().Sub(start), "reservations", len(p.reservations)) + return stat, err } From abf4957e1889d92f10047c4d65ea786b060ff682 Mon Sep 17 00:00:00 2001 From: jennijuju Date: Tue, 3 May 2022 15:54:47 -0400 Subject: [PATCH 28/47] ignore built in actor bundles --- .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 0869bea026253370767ec3daad2107ba2eea6ad6 Mon Sep 17 00:00:00 2001 From: Geoff Stuart Date: Tue, 3 May 2022 14:42:13 -0400 Subject: [PATCH 29/47] make gen --- documentation/en/cli-lotus-miner.md | 95 +++++--------- documentation/en/cli-lotus.md | 197 +++++++++------------------- 2 files changed, 96 insertions(+), 196 deletions(-) diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index 38f075232..5be59a1b6 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -236,35 +236,24 @@ USAGE: lotus-miner actor command [command options] [arguments...] COMMANDS: - set-addrs set addresses that your miner can be publicly dialed on - withdraw withdraw available balance - repay-debt pay down a miner's debt - set-peer-id set the peer id of your miner - set-owner Set owner address (this command should be invoked twice, first with the old owner as the senderAddress, and then with the new owner) - control Manage control addresses - propose-change-worker Propose a worker address change - confirm-change-worker Confirm a worker address change - compact-allocated compact allocated sectors bitfield - help, h Shows a list of commands or help for one command + set-addresses, set-addrs set addresses that your miner can be publicly dialed on + withdraw withdraw available balance + repay-debt pay down a miner's debt + set-peer-id set the peer id of your miner + set-owner Set owner address (this command should be invoked twice, first with the old owner as the senderAddress, and then with the new owner) + control Manage control addresses + propose-change-worker Propose a worker address change + confirm-change-worker Confirm a worker address change + compact-allocated compact allocated sectors bitfield + help, h Shows a list of commands or help for one command OPTIONS: --help, -h show help (default: false) ``` -### lotus-miner actor set-addrs +#### lotus-miner actor set-addresses, set-addrs ``` -NAME: - lotus-miner actor set-addrs - set addresses that your miner can be publicly dialed on - -USAGE: - lotus-miner actor set-addrs [command options] [arguments...] - -OPTIONS: - --gas-limit value set gas limit (default: 0) - --unset unset address (default: false) - --help, -h show help (default: false) - ``` ### lotus-miner actor withdraw @@ -1199,22 +1188,22 @@ USAGE: lotus-miner net command [command options] [arguments...] COMMANDS: - peers Print peers - ping Ping peers - connect Connect to a peer - listen List listen addresses - id Get node identity - findpeer Find the addresses of a given peerID - scores Print peers' pubsub scores - reachability Print information about reachability from the internet - bandwidth Print bandwidth usage information - block Manage network connection gating rules - stat Report resource usage for a scope - limit Get or set resource limits for a scope - protect Add one or more peer IDs to the list of protected peer connections - unprotect Remove one or more peer IDs from the list of protected peer connections. - list-protected List the peer IDs with protected connection. - help, h Shows a list of commands or help for one command + peers Print peers + ping Ping peers + connect Connect to a peer + listen List listen addresses + id Get node identity + find-peer, findpeer Find the addresses of a given peerID + scores Print peers' pubsub scores + reachability Print information about reachability from the internet + bandwidth Print bandwidth usage information + block Manage network connection gating rules + stat Report resource usage for a scope + limit Get or set resource limits for a scope + protect Add one or more peer IDs to the list of protected peer connections + unprotect Remove one or more peer IDs from the list of protected peer connections. + list-protected List the peer IDs with protected connection. + help, h Shows a list of commands or help for one command OPTIONS: --help, -h show help (default: false) @@ -1290,17 +1279,8 @@ OPTIONS: ``` -### lotus-miner net findpeer +#### lotus-miner net find-peer, findpeer ``` -NAME: - lotus-miner net findpeer - Find the addresses of a given peerID - -USAGE: - lotus-miner net findpeer [command options] [peerId] - -OPTIONS: - --help, -h show help (default: false) - ``` ### lotus-miner net scores @@ -2141,29 +2121,16 @@ USAGE: lotus-miner proving compute command [command options] [arguments...] COMMANDS: - window-post Compute WindowPoSt for a specific deadline - help, h Shows a list of commands or help for one command + windowed-post, window-post Compute WindowPoSt for a specific deadline + help, h Shows a list of commands or help for one command OPTIONS: --help, -h show help (default: false) ``` -#### lotus-miner proving compute window-post +##### lotus-miner proving compute windowed-post, window-post ``` -NAME: - lotus-miner proving compute window-post - Compute WindowPoSt for a specific deadline - -USAGE: - lotus-miner proving compute window-post [command options] [deadline index] - -DESCRIPTION: - Note: This command is intended to be used to verify PoSt compute performance. - It will not send any messages to the chain. - -OPTIONS: - --help, -h show help (default: false) - ``` ## lotus-miner storage diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index 14f7b7deb..9a87a5008 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -1726,30 +1726,30 @@ USAGE: lotus state command [command options] [arguments...] COMMANDS: - power Query network or miner power - sectors Query the sector set of a miner - active-sectors Query the active sector set of a miner - list-actors list all actors in the network - list-miners list all miners in the network - circulating-supply Get the exact current circulating supply of Filecoin - sector Get miner sector info - get-actor Print actor information - lookup Find corresponding ID address - replay Replay a particular message - sector-size Look up miners sector size - read-state View a json representation of an actors state - list-messages list messages on chain matching given criteria - compute-state Perform state computations - call Invoke a method on an actor locally - get-deal View on-chain deal info - wait-msg Wait for a message to appear on chain - search-msg Search to see whether a message has appeared on chain - miner-info Retrieve miner information - market Inspect the storage market actor - exec-trace Get the execution trace of a given message - network-version Returns the network version - miner-proving-deadline Retrieve information about a given miner's proving deadline - help, h Shows a list of commands or help for one command + power Query network or miner power + sectors Query the sector set of a miner + active-sectors Query the active sector set of a miner + list-actors list all actors in the network + list-miners list all miners in the network + circulating-supply Get the exact current circulating supply of Filecoin + sector, sector-info Get miner sector info + get-actor Print actor information + lookup Find corresponding ID address + replay Replay a particular message + sector-size Look up miners sector size + read-state View a json representation of an actors state + list-messages list messages on chain matching given criteria + compute-state Perform state computations + call Invoke a method on an actor locally + get-deal View on-chain deal info + wait-msg, wait-message Wait for a message to appear on chain + search-msg, search-message Search to see whether a message has appeared on chain + miner-info Retrieve miner information + market Inspect the storage market actor + exec-trace Get the execution trace of a given message + network-version Returns the network version + miner-proving-deadline Retrieve information about a given miner's proving deadline + help, h Shows a list of commands or help for one command OPTIONS: --tipset value specify tipset to call method on (pass comma separated array of cids) @@ -1837,17 +1837,8 @@ OPTIONS: ``` -### lotus state sector +#### lotus state sector, sector-info ``` -NAME: - lotus state sector - Get miner sector info - -USAGE: - lotus state sector [command options] [minerAddress] [sectorNumber] - -OPTIONS: - --help, -h show help (default: false) - ``` ### lotus state get-actor @@ -1985,31 +1976,12 @@ OPTIONS: ``` -### lotus state wait-msg +#### lotus state wait-msg, wait-message ``` -NAME: - lotus state wait-msg - Wait for a message to appear on chain - -USAGE: - lotus state wait-msg [command options] [messageCid] - -OPTIONS: - --timeout value (default: "10m") - --help, -h show help (default: false) - ``` -### lotus state search-msg +#### lotus state search-msg, search-message ``` -NAME: - lotus state search-msg - Search to see whether a message has appeared on chain - -USAGE: - lotus state search-msg [command options] [messageCid] - -OPTIONS: - --help, -h show help (default: false) - ``` ### lotus state miner-info @@ -2103,24 +2075,24 @@ USAGE: lotus chain command [command options] [arguments...] COMMANDS: - head Print chain head - getblock Get a block and print its details - read-obj Read the raw bytes of an object - delete-obj Delete an object from the chain blockstore - stat-obj Collect size and ipld link counts for objs - getmessage Get and print a message by its cid - sethead manually set the local nodes head tipset (Caution: normally only used for recovery) - list, love View a segment of the chain - get Get chain DAG node by path - bisect bisect chain for an event - export export chain to a car file - slash-consensus Report consensus fault - gas-price Estimate gas prices - inspect-usage Inspect block space usage of a given tipset - decode decode various types - encode encode various types - disputer interact with the window post disputer - help, h Shows a list of commands or help for one command + head Print chain head + get-block, getblock Get a block and print its details + read-obj Read the raw bytes of an object + delete-obj Delete an object from the chain blockstore + stat-obj Collect size and ipld link counts for objs + getmessage, get-message, get-msg Get and print a message by its cid + sethead, set-head manually set the local nodes head tipset (Caution: normally only used for recovery) + list, love View a segment of the chain + get Get chain DAG node by path + bisect bisect chain for an event + export export chain to a car file + slash-consensus Report consensus fault + gas-price Estimate gas prices + inspect-usage Inspect block space usage of a given tipset + decode decode various types + encode encode various types + disputer interact with the window post disputer + help, h Shows a list of commands or help for one command OPTIONS: --help, -h show help (default: false) @@ -2140,18 +2112,8 @@ OPTIONS: ``` -### lotus chain getblock +#### lotus chain get-block, getblock ``` -NAME: - lotus chain getblock - Get a block and print its details - -USAGE: - lotus chain getblock [command options] [blockCid] - -OPTIONS: - --raw print just the raw block header (default: false) - --help, -h show help (default: false) - ``` ### lotus chain read-obj @@ -2204,32 +2166,12 @@ OPTIONS: ``` -### lotus chain getmessage +##### lotus chain getmessage, get-message, get-msg ``` -NAME: - lotus chain getmessage - Get and print a message by its cid - -USAGE: - lotus chain getmessage [command options] [messageCid] - -OPTIONS: - --help, -h show help (default: false) - ``` -### lotus chain sethead +#### lotus chain sethead, set-head ``` -NAME: - lotus chain sethead - manually set the local nodes head tipset (Caution: normally only used for recovery) - -USAGE: - lotus chain sethead [command options] [tipsetkey] - -OPTIONS: - --genesis reset head to genesis (default: false) - --epoch value reset head to given epoch (default: 0) - --help, -h show help (default: false) - ``` #### lotus chain list, love @@ -2602,22 +2544,22 @@ USAGE: lotus net command [command options] [arguments...] COMMANDS: - peers Print peers - ping Ping peers - connect Connect to a peer - listen List listen addresses - id Get node identity - findpeer Find the addresses of a given peerID - scores Print peers' pubsub scores - reachability Print information about reachability from the internet - bandwidth Print bandwidth usage information - block Manage network connection gating rules - stat Report resource usage for a scope - limit Get or set resource limits for a scope - protect Add one or more peer IDs to the list of protected peer connections - unprotect Remove one or more peer IDs from the list of protected peer connections. - list-protected List the peer IDs with protected connection. - help, h Shows a list of commands or help for one command + peers Print peers + ping Ping peers + connect Connect to a peer + listen List listen addresses + id Get node identity + find-peer, findpeer Find the addresses of a given peerID + scores Print peers' pubsub scores + reachability Print information about reachability from the internet + bandwidth Print bandwidth usage information + block Manage network connection gating rules + stat Report resource usage for a scope + limit Get or set resource limits for a scope + protect Add one or more peer IDs to the list of protected peer connections + unprotect Remove one or more peer IDs from the list of protected peer connections. + list-protected List the peer IDs with protected connection. + help, h Shows a list of commands or help for one command OPTIONS: --help, -h show help (default: false) @@ -2693,17 +2635,8 @@ OPTIONS: ``` -### lotus net findpeer +#### lotus net find-peer, findpeer ``` -NAME: - lotus net findpeer - Find the addresses of a given peerID - -USAGE: - lotus net findpeer [command options] [peerId] - -OPTIONS: - --help, -h show help (default: false) - ``` ### lotus net scores From 7184c9a529ca65b6dac20a7bce9c6868d99edf86 Mon Sep 17 00:00:00 2001 From: jennijuju Date: Tue, 3 May 2022 15:38:42 -0400 Subject: [PATCH 30/47] 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 31/47] 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 85be0aad1b611f22f124c23313c3bddb6cad7305 Mon Sep 17 00:00:00 2001 From: Travis Person Date: Wed, 4 May 2022 16:24:54 +0000 Subject: [PATCH 32/47] 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 0e0ea5adc..c218331ee 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1000,7 +1000,11 @@ workflows: only: - master - build-debug - - build-all + - build-all: + filters: + tags: + only: + - /^v\d+\.\d+\.\d+(-rc\d+)?$/ - build-ntwk-calibration: filters: tags: @@ -1012,7 +1016,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 cd846ee45..233771988 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 8ab23cbd5c3508b581bab4cc7a7784d73ef3f1aa Mon Sep 17 00:00:00 2001 From: zenground0 Date: Wed, 4 May 2022 15:14:49 -0400 Subject: [PATCH 33/47] try this --- .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% From b83824b28b36dd2d40ae01cf375fb5508f30db12 Mon Sep 17 00:00:00 2001 From: zenground0 Date: Wed, 4 May 2022 15:22:54 -0400 Subject: [PATCH 34/47] 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% From 1740dcb90a4f9637c7ec641aa5b82792c0b9b50c Mon Sep 17 00:00:00 2001 From: zenground0 Date: Wed, 4 May 2022 15:45:55 -0400 Subject: [PATCH 35/47] try that --- .codecov.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.codecov.yml b/.codecov.yml index 88869dd97..eec1d59ce 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -16,8 +16,8 @@ ignore: coverage: status: patch: off + threshold: 1% project: - threshold: 1% tools-and-tests: target: auto threshold: 1% From 23378f87103178130c93b92e04214c7e20561935 Mon Sep 17 00:00:00 2001 From: Geoff Stuart Date: Wed, 4 May 2022 15:48:44 -0400 Subject: [PATCH 36/47] Fix flaky test --- itests/gateway_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/itests/gateway_test.go b/itests/gateway_test.go index d5bc9c0eb..249112b1f 100644 --- a/itests/gateway_test.go +++ b/itests/gateway_test.go @@ -138,8 +138,8 @@ func TestGatewayWalletMsig(t *testing.T) { //stm: @CHAIN_STATE_MINER_AVAILABLE_BALANCE_001 msigBalance, err := lite.MsigGetAvailableBalance(ctx, msig, types.EmptyTSK) require.NoError(t, err) - require.Greater(t, msigBalance.Int64(), int64(0)) - require.Less(t, msigBalance.Int64(), amt.Int64()) + require.GreaterOrEqual(t, msigBalance.Int64(), int64(0)) + require.LessOrEqual(t, msigBalance.Int64(), amt.Int64()) // Propose to add a new address to the msig proto, err = lite.MsigAddPropose(ctx, msig, walletAddrs[0], walletAddrs[3], false) From 0b5e40f455e8ba0961737c9eb9aead9cfe36b812 Mon Sep 17 00:00:00 2001 From: zenground0 Date: Wed, 4 May 2022 16:09:10 -0400 Subject: [PATCH 37/47] try another one --- .codecov.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.codecov.yml b/.codecov.yml index eec1d59ce..dd6142925 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -16,7 +16,6 @@ ignore: coverage: status: patch: off - threshold: 1% project: tools-and-tests: target: auto @@ -35,27 +34,27 @@ coverage: markets: target: auto threshold: 1% - informational: false + informational: true paths: - "markets" - "paychmgr" miner: target: auto threshold: 1.5% - informational: false + informational: true paths: - "miner" - "storage" chain: target: auto threshold: 1% - informational: false + informational: true paths: - "chain" node: target: auto threshold: 1% - informational: false + informational: true paths: - "node" - "blockstore" From 962e37e8939bc59a759c3fe9539c46cb6c59465f Mon Sep 17 00:00:00 2001 From: simlecode Date: Sun, 24 Apr 2022 13:48:07 +0800 Subject: [PATCH 38/47] add StateGetNetworkParams api --- api/api_full.go | 3 ++ api/mocks/mock_full.go | 15 +++++++ api/proxy_gen.go | 13 ++++++ api/types.go | 33 +++++++++++++++ api/v0api/full.go | 3 ++ api/v0api/proxy_gen.go | 13 ++++++ api/v0api/v0mocks/mock_full.go | 15 +++++++ build/openrpc/full.json.gz | Bin 27138 -> 27588 bytes build/openrpc/miner.json.gz | Bin 13713 -> 13713 bytes build/openrpc/worker.json.gz | Bin 4614 -> 4614 bytes build/params_2k.go | 16 +++++-- build/params_butterfly.go | 19 ++++++--- build/params_calibnet.go | 17 +++++--- build/params_interop.go | 21 ++++++---- build/params_mainnet.go | 8 ++++ build/params_nerpanet.go | 38 ++++++++++------- build/params_testground.go | 6 +++ documentation/en/api-v0-methods.md | 44 ++++++++++++++++++++ documentation/en/api-v1-unstable-methods.md | 44 ++++++++++++++++++++ node/impl/full/state.go | 37 ++++++++++++++++ 20 files changed, 306 insertions(+), 39 deletions(-) diff --git a/api/api_full.go b/api/api_full.go index bcdfdad10..2a113dbaf 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -592,6 +592,9 @@ type FullNode interface { // StateGetRandomnessFromBeacon is used to sample the beacon for randomness. StateGetRandomnessFromBeacon(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk types.TipSetKey) (abi.Randomness, error) //perm:read + // StateGetNetworkParams return current network params + StateGetNetworkParams(ctx context.Context) (*NetworkParams, error) //perm:read + // MethodGroup: Msig // The Msig methods are used to interact with multisig wallets on the // filecoin network diff --git a/api/mocks/mock_full.go b/api/mocks/mock_full.go index 5db190ba6..f8ab754ed 100644 --- a/api/mocks/mock_full.go +++ b/api/mocks/mock_full.go @@ -2406,6 +2406,21 @@ func (mr *MockFullNodeMockRecorder) StateGetActor(arg0, arg1, arg2 interface{}) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2) } +// StateGetNetworkParams mocks base method. +func (m *MockFullNode) StateGetNetworkParams(arg0 context.Context) (*api.NetworkParams, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetNetworkParams", arg0) + ret0, _ := ret[0].(*api.NetworkParams) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetNetworkParams indicates an expected call of StateGetNetworkParams. +func (mr *MockFullNodeMockRecorder) StateGetNetworkParams(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetNetworkParams", reflect.TypeOf((*MockFullNode)(nil).StateGetNetworkParams), arg0) +} + // StateGetRandomnessFromBeacon mocks base method. func (m *MockFullNode) StateGetRandomnessFromBeacon(arg0 context.Context, arg1 crypto.DomainSeparationTag, arg2 abi.ChainEpoch, arg3 []byte, arg4 types.TipSetKey) (abi.Randomness, error) { m.ctrl.T.Helper() diff --git a/api/proxy_gen.go b/api/proxy_gen.go index 300e67555..7542ac367 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -352,6 +352,8 @@ type FullNodeStruct struct { StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"` + StateGetNetworkParams func(p0 context.Context) (*NetworkParams, error) `perm:"read"` + StateGetRandomnessFromBeacon func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"` StateGetRandomnessFromTickets func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"` @@ -2470,6 +2472,17 @@ func (s *FullNodeStub) StateGetActor(p0 context.Context, p1 address.Address, p2 return nil, ErrNotSupported } +func (s *FullNodeStruct) StateGetNetworkParams(p0 context.Context) (*NetworkParams, error) { + if s.Internal.StateGetNetworkParams == nil { + return nil, ErrNotSupported + } + return s.Internal.StateGetNetworkParams(p0) +} + +func (s *FullNodeStub) StateGetNetworkParams(p0 context.Context) (*NetworkParams, error) { + return nil, ErrNotSupported +} + func (s *FullNodeStruct) StateGetRandomnessFromBeacon(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) { if s.Internal.StateGetRandomnessFromBeacon == nil { return *new(abi.Randomness), ErrNotSupported diff --git a/api/types.go b/api/types.go index 9125744ba..d0b7c7cb9 100644 --- a/api/types.go +++ b/api/types.go @@ -11,6 +11,7 @@ import ( "github.com/filecoin-project/go-fil-markets/retrievalmarket" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/node/modules/dtypes" "github.com/ipfs/go-cid" "github.com/ipfs/go-graphsync" @@ -284,3 +285,35 @@ type ExportRef struct { FromLocalCAR string // if specified, get data from a local CARv2 file. DealID retrievalmarket.DealID } + +type NetworkParams struct { + NetworkName dtypes.NetworkName + BlockDelaySecs uint64 + ConsensusMinerMinPower abi.StoragePower + SupportedProofTypes []abi.RegisteredSealProof + PreCommitChallengeDelay abi.ChainEpoch + ForkUpgradeParams ForkUpgradeParams +} + +type ForkUpgradeParams struct { + UpgradeSmokeHeight abi.ChainEpoch + UpgradeBreezeHeight abi.ChainEpoch + UpgradeIgnitionHeight abi.ChainEpoch + UpgradeLiftoffHeight abi.ChainEpoch + UpgradeAssemblyHeight abi.ChainEpoch + UpgradeRefuelHeight abi.ChainEpoch + UpgradeTapeHeight abi.ChainEpoch + UpgradeKumquatHeight abi.ChainEpoch + UpgradePriceListOopsHeight abi.ChainEpoch + BreezeGasTampingDuration abi.ChainEpoch + UpgradeCalicoHeight abi.ChainEpoch + UpgradePersianHeight abi.ChainEpoch + UpgradeOrangeHeight abi.ChainEpoch + UpgradeClausHeight abi.ChainEpoch + UpgradeTrustHeight abi.ChainEpoch + UpgradeNorwegianHeight abi.ChainEpoch + UpgradeTurboHeight abi.ChainEpoch + UpgradeHyperdriveHeight abi.ChainEpoch + UpgradeChocolateHeight abi.ChainEpoch + UpgradeOhSnapHeight abi.ChainEpoch +} diff --git a/api/v0api/full.go b/api/v0api/full.go index b37e89155..c1aa69a77 100644 --- a/api/v0api/full.go +++ b/api/v0api/full.go @@ -604,6 +604,9 @@ type FullNode interface { // StateGetRandomnessFromBeacon is used to sample the beacon for randomness. StateGetRandomnessFromBeacon(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk types.TipSetKey) (abi.Randomness, error) //perm:read + // StateGetNetworkParams return current network params + StateGetNetworkParams(ctx context.Context) (*api.NetworkParams, error) //perm:read + // MethodGroup: Msig // The Msig methods are used to interact with multisig wallets on the // filecoin network diff --git a/api/v0api/proxy_gen.go b/api/v0api/proxy_gen.go index 49ebad428..6ac74904f 100644 --- a/api/v0api/proxy_gen.go +++ b/api/v0api/proxy_gen.go @@ -267,6 +267,8 @@ type FullNodeStruct struct { StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"` + StateGetNetworkParams func(p0 context.Context) (*api.NetworkParams, error) `perm:"read"` + StateGetRandomnessFromBeacon func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"` StateGetRandomnessFromTickets func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"` @@ -1746,6 +1748,17 @@ func (s *FullNodeStub) StateGetActor(p0 context.Context, p1 address.Address, p2 return nil, ErrNotSupported } +func (s *FullNodeStruct) StateGetNetworkParams(p0 context.Context) (*api.NetworkParams, error) { + if s.Internal.StateGetNetworkParams == nil { + return nil, ErrNotSupported + } + return s.Internal.StateGetNetworkParams(p0) +} + +func (s *FullNodeStub) StateGetNetworkParams(p0 context.Context) (*api.NetworkParams, error) { + return nil, ErrNotSupported +} + func (s *FullNodeStruct) StateGetRandomnessFromBeacon(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) { if s.Internal.StateGetRandomnessFromBeacon == nil { return *new(abi.Randomness), ErrNotSupported diff --git a/api/v0api/v0mocks/mock_full.go b/api/v0api/v0mocks/mock_full.go index 6cb80d894..7301b8aec 100644 --- a/api/v0api/v0mocks/mock_full.go +++ b/api/v0api/v0mocks/mock_full.go @@ -2275,6 +2275,21 @@ func (mr *MockFullNodeMockRecorder) StateGetActor(arg0, arg1, arg2 interface{}) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2) } +// StateGetNetworkParams mocks base method. +func (m *MockFullNode) StateGetNetworkParams(arg0 context.Context) (*api.NetworkParams, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetNetworkParams", arg0) + ret0, _ := ret[0].(*api.NetworkParams) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetNetworkParams indicates an expected call of StateGetNetworkParams. +func (mr *MockFullNodeMockRecorder) StateGetNetworkParams(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetNetworkParams", reflect.TypeOf((*MockFullNode)(nil).StateGetNetworkParams), arg0) +} + // StateGetRandomnessFromBeacon mocks base method. func (m *MockFullNode) StateGetRandomnessFromBeacon(arg0 context.Context, arg1 crypto.DomainSeparationTag, arg2 abi.ChainEpoch, arg3 []byte, arg4 types.TipSetKey) (abi.Randomness, error) { m.ctrl.T.Helper() diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index c27a0fc28a15c9624d615fee00035e4e95dfb909..92731a5f6c7916b672ed8af83b0118ad5784a7c6 100644 GIT binary patch delta 26627 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 diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index f1372a6602ac767fbd6d475f507517321c317932..cbbeec7d1e462377c3359e18e508d684a9c23200 100644 GIT binary patch delta 3497 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 Xs?uh2zxn?F00960NBv9izz+ccSLzKY delta 3496 zcmV;Z4OjApB!(og5CeZSVPnc-4klRV*yMy9VXY#>QG_4VeegrrXIt=LH>3zXQlSKGf3IJFS3+74^wsO|UQ-PE?NGW{D? z&ey-ejB%*j9VvTn&hq4*4JI==Vd2a2&A23{7g;?7$?Ik%Rq21{v(m4K8VgQF^6T*V z8+M8|C};h%ouKb<*gd?2bP*QovEq-0KkZ*_6LG=@pVYQMLo^S<;m}EI&;^G>5#P55 z>KZ_FS${%SLMw5dt~|TGX?&LFHqZ*r3g}ZR>V?!l-siNQF@qMpYP9VN{Q0 zR5d-{sD42NxsZl-8%GpEK>?C++iphUG5H>;qG))(I9x?&m zw$=j|l&SQY?JkiCrfUGfzk&m~GJxRRHjx3|JuR@Y0GODV4UzS+Tv-$w?CFUEjR$0I zdtsCH9zbFO2)?qn7SLPtl8*Oh>6CFfoUPUA4`?8$J$dG0xYnRHq*Kj%KuhOu`}@D0 z)!JSDR9y85U~8{v}{)?8Tgz?$oWa%=t_Ut3$24=P$E!;qdQ8L@30jr!Zpk*O44?^0QuyzN2UDnza zB&NM2$nz3lU`N=MFVt0F!LCjvJdp097BWaoU^)uU2HJlrJSbS4)*r>&m zeu~mcT=)f^ue$lZM!pucXVTd?(y?1}BKwb#c^>HgCakP1?MOVk)zy1h3L{&=dBfU! z{#dh3TdAxi+Rj-e4?}zoOOaSuHH06V^mDd5GXnWG6Y7Gd} zAXgJ4jY5C5!wjFEK75cm^Ib|g5>1<(5=@%&Y87<4wFAEB?W_XREdF1g)|9;}{SUE} z|GoaSFvx!`&_6$X@LBx^3o&ey zi8Irk9vbQ~jS>lZ-mY>xA2Ds#J>Z*Gj&BVJ4~Bm)0%3y5d_N={wQwjXoC|?(?;X}? zFV=h|_2UfZo6V^3Lc@gV)pW4PHY!lAEX4|*rLSmtxmbJHfR=Qot1>IN z@fb^nKdzskllZZFdVYE11%G|<|GG^QaG&bRu|0bFsGL6edrv14TP57gd__x}4OLb2 zu`GRs-;)JjE^lrqw(t)aOj+N5=MuWiN?L!|TjmsfxxA6i6j}NNJ(TKUBTM~M$75|g z9xBPcw`C1>AGW!XB{fAsUm0m5y+2m<1QGpVUm5n*kv43Uj$LocMwYY`Et;zKRdt|` zR3%A_qA8<^+8^{4y%ISm`Sc7k^k}*^n2fZsHe_?7r|22#x~dP9iLR&UQO9F_qV#{q zgsHZKj2q&8pehkvG%o^k}>pQ>KQ!Tw;3KZ&sORiVmwxt9IYEGObESsWLqxDGh+q zrbuZ{nR4=G)5?^eH``IBwN{}4blMat4Pet|NXaTwRc!1#pd z6K^qSN2z8?=SZLV(|K4{DAk z?JN3tFdC-TD=cdeMJqYV^pJgL)#%~+&TjJ$*LQYbf4IKWn(>f*r^}WaeaAGN=_%O!VU*{a{H&puSWT2~kJ&6)xyMQ(* z$yJ7`q7Ej?SXalXNzq2SHl7SLeblsd-V!5lw;%uRvLaS)FGY3T{M6#2 zFLBY=TeE57Nxn_HgmmF?S~I^+en#JT_V&;ku(!)>liynDr2@H4av7(H;#M;I77$pP z**^JRrBvF!8W?{KXZ^`|JUu}(O*zrc5jvS_$T*q6p*ouBQ#gQQNtXUXc)p-PQr_Qe z16qDZnasfFkX-xDsDPWu{f&D&4yI>~z)CX-KZfMR3Fc^ZxOpm#fWRM0g= zDG+qmHjw9CBhL$XnoHsnmGeb^wZdla=B6BoCL1b|`fYz}d~%+qGhg6?ip;XPelmZ+ zIs*0#Jo%#rUQk~K^YBU%GknongQo=|;d^()3Hk#bg)a5($ex;HJLt^v#Gh2SbD$Dh zXys0Vm+k-C5VL;2P|P0DRS-1|?ySh}TV9m4bPKhvzV>ek+WoE9yb?QyoVK=*`6EB* z1wdj;`I;lPl;S$$DSPOf@F;E&nN zLzJzPs>{+f{(*wO>qqjV7Asu`@Ar4m7`!m7!mz$I!>a2=hIMH_@}4^mDixVgIK`ns zxcK}&Fpc?^ku{QU5P1w=ND6=JI^WhsCzMaYA9R6SuHzJC#xFk3iqc*n<9uSL8<_$e<*AsE(po?>C z@uE2Nrdeaw(pJEKD}R)a}P8D)sv_XeF0jN zCJ-}!wO;Vu_Mgyu_#EgyPL7V%EaYYcEv67XznkFxibBqgwYM)m?P^aeP&TPcc$KyY!u-W%Z;Mv+;O zm*21AaEs)MacLx4XV3nr+PZhAy>ZvksNmD0;DoRr)#Q|(Sk1ckdfgBQnkF(ottq-7 zCi=ep#wdE?H-C+PAphH<-18uVn#tW`^tTmoNluaYrbt9yD%}y55sUV&2~%`M8|!s{ zFAIC|1EP!=w>T2DiD6{F40>}1bh2OBh&+!XExL$Pia2FsU~^pX$xJBAoIo?ImA^^b zs)u5r7rs&g^1?T`u-%TTRxZ{nnyOuSOLkQ25B2~A9c9Q#!O8Z&Ag2FZVMIAua$7H# zDGS|S+iLrIzvBJpv)`_(sbw1v9#|1CiY-7F$VC9U2#_F7=K*&`h#%eClVg82cho?c WNSn?5=Kli#0RR6L%_V!l4*>wPSKG1x diff --git a/build/params_2k.go b/build/params_2k.go index aa1beed36..60006cede 100644 --- a/build/params_2k.go +++ b/build/params_2k.go @@ -53,11 +53,19 @@ var DrandSchedule = map[abi.ChainEpoch]DrandEnum{ 0: DrandMainnet, } +var SupportedProofTypes = []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg2KiBV1, + abi.RegisteredSealProof_StackedDrg8MiBV1, +} +var ConsensusMinerMinPower = abi.NewStoragePower(2048) +var MinVerifiedDealSize = abi.NewStoragePower(256) +var PreCommitChallengeDelay = abi.ChainEpoch(10) + func init() { - policy.SetSupportedProofTypes(abi.RegisteredSealProof_StackedDrg2KiBV1, abi.RegisteredSealProof_StackedDrg8MiBV1) - policy.SetConsensusMinerMinPower(abi.NewStoragePower(2048)) - policy.SetMinVerifiedDealSize(abi.NewStoragePower(256)) - policy.SetPreCommitChallengeDelay(abi.ChainEpoch(10)) + policy.SetSupportedProofTypes(SupportedProofTypes...) + policy.SetConsensusMinerMinPower(ConsensusMinerMinPower) + policy.SetMinVerifiedDealSize(MinVerifiedDealSize) + policy.SetPreCommitChallengeDelay(PreCommitChallengeDelay) getUpgradeHeight := func(ev string, def abi.ChainEpoch) abi.ChainEpoch { hs, found := os.LookupEnv(ev) diff --git a/build/params_butterfly.go b/build/params_butterfly.go index 804bdde93..d74e17305 100644 --- a/build/params_butterfly.go +++ b/build/params_butterfly.go @@ -44,13 +44,20 @@ const UpgradeChocolateHeight = -17 const UpgradeOhSnapHeight = 240 +var SupportedProofTypes = []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg512MiBV1, + abi.RegisteredSealProof_StackedDrg32GiBV1, + abi.RegisteredSealProof_StackedDrg64GiBV1, +} +var ConsensusMinerMinPower = abi.NewStoragePower(2 << 30) +var MinVerifiedDealSize = abi.NewStoragePower(1 << 20) +var PreCommitChallengeDelay = abi.ChainEpoch(150) + func init() { - policy.SetConsensusMinerMinPower(abi.NewStoragePower(2 << 30)) - policy.SetSupportedProofTypes( - abi.RegisteredSealProof_StackedDrg512MiBV1, - abi.RegisteredSealProof_StackedDrg32GiBV1, - abi.RegisteredSealProof_StackedDrg64GiBV1, - ) + policy.SetSupportedProofTypes(SupportedProofTypes...) + policy.SetConsensusMinerMinPower(ConsensusMinerMinPower) + policy.SetMinVerifiedDealSize(MinVerifiedDealSize) + policy.SetPreCommitChallengeDelay(PreCommitChallengeDelay) SetAddressNetwork(address.Testnet) diff --git a/build/params_calibnet.go b/build/params_calibnet.go index a8f5b4720..5ff8bd853 100644 --- a/build/params_calibnet.go +++ b/build/params_calibnet.go @@ -57,12 +57,19 @@ const UpgradeChocolateHeight = 312746 // 2022-02-10T19:23:00Z const UpgradeOhSnapHeight = 682006 +var SupportedProofTypes = []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg32GiBV1, + abi.RegisteredSealProof_StackedDrg64GiBV1, +} +var ConsensusMinerMinPower = abi.NewStoragePower(32 << 30) +var MinVerifiedDealSize = abi.NewStoragePower(1 << 20) +var PreCommitChallengeDelay = abi.ChainEpoch(150) + func init() { - policy.SetConsensusMinerMinPower(abi.NewStoragePower(32 << 30)) - policy.SetSupportedProofTypes( - abi.RegisteredSealProof_StackedDrg32GiBV1, - abi.RegisteredSealProof_StackedDrg64GiBV1, - ) + policy.SetSupportedProofTypes(SupportedProofTypes...) + policy.SetConsensusMinerMinPower(ConsensusMinerMinPower) + policy.SetMinVerifiedDealSize(MinVerifiedDealSize) + policy.SetPreCommitChallengeDelay(PreCommitChallengeDelay) SetAddressNetwork(address.Testnet) diff --git a/build/params_interop.go b/build/params_interop.go index a483e7188..ad051570c 100644 --- a/build/params_interop.go +++ b/build/params_interop.go @@ -53,15 +53,20 @@ var DrandSchedule = map[abi.ChainEpoch]DrandEnum{ 0: DrandMainnet, } +var SupportedProofTypes = []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg2KiBV1, + abi.RegisteredSealProof_StackedDrg8MiBV1, + abi.RegisteredSealProof_StackedDrg512MiBV1, +} +var ConsensusMinerMinPower = abi.NewStoragePower(2048) +var MinVerifiedDealSize = abi.NewStoragePower(256) +var PreCommitChallengeDelay = abi.ChainEpoch(10) + func init() { - policy.SetSupportedProofTypes( - abi.RegisteredSealProof_StackedDrg2KiBV1, - abi.RegisteredSealProof_StackedDrg8MiBV1, - abi.RegisteredSealProof_StackedDrg512MiBV1, - ) - policy.SetConsensusMinerMinPower(abi.NewStoragePower(2048)) - policy.SetMinVerifiedDealSize(abi.NewStoragePower(256)) - policy.SetPreCommitChallengeDelay(abi.ChainEpoch(10)) + policy.SetSupportedProofTypes(SupportedProofTypes...) + policy.SetConsensusMinerMinPower(ConsensusMinerMinPower) + policy.SetMinVerifiedDealSize(MinVerifiedDealSize) + policy.SetPreCommitChallengeDelay(PreCommitChallengeDelay) getUpgradeHeight := func(ev string, def abi.ChainEpoch) abi.ChainEpoch { hs, found := os.LookupEnv(ev) diff --git a/build/params_mainnet.go b/build/params_mainnet.go index 0a9f6e775..72e25f2fb 100644 --- a/build/params_mainnet.go +++ b/build/params_mainnet.go @@ -70,6 +70,14 @@ const UpgradeChocolateHeight = 1231620 // 2022-03-01T15:00:00Z var UpgradeOhSnapHeight = abi.ChainEpoch(1594680) +var SupportedProofTypes = []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg32GiBV1, + abi.RegisteredSealProof_StackedDrg64GiBV1, +} +var ConsensusMinerMinPower = abi.NewStoragePower(10 << 40) +var MinVerifiedDealSize = abi.NewStoragePower(1 << 20) +var PreCommitChallengeDelay = abi.ChainEpoch(150) + func init() { if os.Getenv("LOTUS_USE_TEST_ADDRESSES") != "1" { SetAddressNetwork(address.Mainnet) diff --git a/build/params_nerpanet.go b/build/params_nerpanet.go index 0e2913adc..4621a7271 100644 --- a/build/params_nerpanet.go +++ b/build/params_nerpanet.go @@ -50,23 +50,29 @@ const UpgradeHyperdriveHeight = 379178 const UpgradeChocolateHeight = 999999999 +var SupportedProofTypes = []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg512MiBV1, + abi.RegisteredSealProof_StackedDrg32GiBV1, + abi.RegisteredSealProof_StackedDrg64GiBV1, +} + +// Minimum block production power is set to 4 TiB +// Rationale is to discourage small-scale miners from trying to take over the network +// One needs to invest in ~2.3x the compute to break consensus, making it not worth it +// +// DOWNSIDE: the fake-seals need to be kept alive/protected, otherwise network will seize +// +var ConsensusMinerMinPower = abi.NewStoragePower(4 << 40) +var MinVerifiedDealSize = abi.NewStoragePower(1 << 20) + +// Lower the most time-consuming parts of PoRep +var PreCommitChallengeDelay = abi.ChainEpoch(10) + func init() { - // Minimum block production power is set to 4 TiB - // Rationale is to discourage small-scale miners from trying to take over the network - // One needs to invest in ~2.3x the compute to break consensus, making it not worth it - // - // DOWNSIDE: the fake-seals need to be kept alive/protected, otherwise network will seize - // - policy.SetConsensusMinerMinPower(abi.NewStoragePower(4 << 40)) - - policy.SetSupportedProofTypes( - abi.RegisteredSealProof_StackedDrg512MiBV1, - abi.RegisteredSealProof_StackedDrg32GiBV1, - abi.RegisteredSealProof_StackedDrg64GiBV1, - ) - - // Lower the most time-consuming parts of PoRep - policy.SetPreCommitChallengeDelay(10) + policy.SetSupportedProofTypes(SupportedProofTypes...) + policy.SetConsensusMinerMinPower(ConsensusMinerMinPower) + policy.SetMinVerifiedDealSize(MinVerifiedDealSize) + policy.SetPreCommitChallengeDelay(PreCommitChallengeDelay) // TODO - make this a variable //miner.WPoStChallengeLookback = abi.ChainEpoch(2) diff --git a/build/params_testground.go b/build/params_testground.go index 41c46d41e..46e90f494 100644 --- a/build/params_testground.go +++ b/build/params_testground.go @@ -33,6 +33,12 @@ var ( MinimumBaseFee = int64(100) BlockDelaySecs = uint64(builtin2.EpochDurationSeconds) PropagationDelaySecs = uint64(6) + SupportedProofTypes = []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg32GiBV1, + abi.RegisteredSealProof_StackedDrg64GiBV1, + } + ConsensusMinerMinPower = abi.NewStoragePower(10 << 40) + PreCommitChallengeDelay = abi.ChainEpoch(150) AllowableClockDriftSecs = uint64(1) diff --git a/documentation/en/api-v0-methods.md b/documentation/en/api-v0-methods.md index 6973a6651..6f3e5c8ee 100644 --- a/documentation/en/api-v0-methods.md +++ b/documentation/en/api-v0-methods.md @@ -165,6 +165,7 @@ * [StateDealProviderCollateralBounds](#StateDealProviderCollateralBounds) * [StateDecodeParams](#StateDecodeParams) * [StateGetActor](#StateGetActor) + * [StateGetNetworkParams](#StateGetNetworkParams) * [StateGetRandomnessFromBeacon](#StateGetRandomnessFromBeacon) * [StateGetRandomnessFromTickets](#StateGetRandomnessFromTickets) * [StateGetReceipt](#StateGetReceipt) @@ -5185,6 +5186,49 @@ Response: } ``` +### StateGetNetworkParams +StateGetNetworkParams return current network params + + +Perms: read + +Inputs: `null` + +Response: +```json +{ + "NetworkName": "lotus", + "BlockDelaySecs": 42, + "ConsensusMinerMinPower": "0", + "SupportedProofTypes": [ + 8 + ], + "PreCommitChallengeDelay": 10101, + "ForkUpgradeParams": { + "UpgradeSmokeHeight": 10101, + "UpgradeBreezeHeight": 10101, + "UpgradeIgnitionHeight": 10101, + "UpgradeLiftoffHeight": 10101, + "UpgradeAssemblyHeight": 10101, + "UpgradeRefuelHeight": 10101, + "UpgradeTapeHeight": 10101, + "UpgradeKumquatHeight": 10101, + "UpgradePriceListOopsHeight": 10101, + "BreezeGasTampingDuration": 10101, + "UpgradeCalicoHeight": 10101, + "UpgradePersianHeight": 10101, + "UpgradeOrangeHeight": 10101, + "UpgradeClausHeight": 10101, + "UpgradeTrustHeight": 10101, + "UpgradeNorwegianHeight": 10101, + "UpgradeTurboHeight": 10101, + "UpgradeHyperdriveHeight": 10101, + "UpgradeChocolateHeight": 10101, + "UpgradeOhSnapHeight": 10101 + } +} +``` + ### StateGetRandomnessFromBeacon StateGetRandomnessFromBeacon is used to sample the beacon for randomness. diff --git a/documentation/en/api-v1-unstable-methods.md b/documentation/en/api-v1-unstable-methods.md index 5d4dab533..b08c87348 100644 --- a/documentation/en/api-v1-unstable-methods.md +++ b/documentation/en/api-v1-unstable-methods.md @@ -175,6 +175,7 @@ * [StateDecodeParams](#StateDecodeParams) * [StateEncodeParams](#StateEncodeParams) * [StateGetActor](#StateGetActor) + * [StateGetNetworkParams](#StateGetNetworkParams) * [StateGetRandomnessFromBeacon](#StateGetRandomnessFromBeacon) * [StateGetRandomnessFromTickets](#StateGetRandomnessFromTickets) * [StateListActors](#StateListActors) @@ -5642,6 +5643,49 @@ Response: } ``` +### StateGetNetworkParams +StateGetNetworkParams return current network params + + +Perms: read + +Inputs: `null` + +Response: +```json +{ + "NetworkName": "lotus", + "BlockDelaySecs": 42, + "ConsensusMinerMinPower": "0", + "SupportedProofTypes": [ + 8 + ], + "PreCommitChallengeDelay": 10101, + "ForkUpgradeParams": { + "UpgradeSmokeHeight": 10101, + "UpgradeBreezeHeight": 10101, + "UpgradeIgnitionHeight": 10101, + "UpgradeLiftoffHeight": 10101, + "UpgradeAssemblyHeight": 10101, + "UpgradeRefuelHeight": 10101, + "UpgradeTapeHeight": 10101, + "UpgradeKumquatHeight": 10101, + "UpgradePriceListOopsHeight": 10101, + "BreezeGasTampingDuration": 10101, + "UpgradeCalicoHeight": 10101, + "UpgradePersianHeight": 10101, + "UpgradeOrangeHeight": 10101, + "UpgradeClausHeight": 10101, + "UpgradeTrustHeight": 10101, + "UpgradeNorwegianHeight": 10101, + "UpgradeTurboHeight": 10101, + "UpgradeHyperdriveHeight": 10101, + "UpgradeChocolateHeight": 10101, + "UpgradeOhSnapHeight": 10101 + } +} +``` + ### StateGetRandomnessFromBeacon StateGetRandomnessFromBeacon is used to sample the beacon for randomness. diff --git a/node/impl/full/state.go b/node/impl/full/state.go index 51cb0dfbc..648b3e76e 100644 --- a/node/impl/full/state.go +++ b/node/impl/full/state.go @@ -19,6 +19,7 @@ import ( "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/dline" "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/lotus/build" "github.com/filecoin-project/lotus/extern/sector-storage/ffiwrapper" "github.com/filecoin-project/lotus/api" @@ -1438,3 +1439,39 @@ func (a *StateAPI) StateGetRandomnessFromBeacon(ctx context.Context, personaliza return a.StateManager.GetRandomnessFromBeacon(ctx, personalization, randEpoch, entropy, tsk) } + +func (a *StateAPI) StateGetNetworkParams(ctx context.Context) (*api.NetworkParams, error) { + networkName, err := a.StateNetworkName(ctx) + if err != nil { + return nil, err + } + + return &api.NetworkParams{ + NetworkName: networkName, + BlockDelaySecs: build.BlockDelaySecs, + ConsensusMinerMinPower: build.ConsensusMinerMinPower, + SupportedProofTypes: build.SupportedProofTypes, + PreCommitChallengeDelay: build.PreCommitChallengeDelay, + ForkUpgradeParams: api.ForkUpgradeParams{ + UpgradeSmokeHeight: build.UpgradeSmokeHeight, + UpgradeBreezeHeight: build.UpgradeBreezeHeight, + UpgradeIgnitionHeight: build.UpgradeIgnitionHeight, + UpgradeLiftoffHeight: build.UpgradeLiftoffHeight, + UpgradeAssemblyHeight: build.UpgradeAssemblyHeight, + UpgradeRefuelHeight: build.UpgradeRefuelHeight, + UpgradeTapeHeight: build.UpgradeTapeHeight, + UpgradeKumquatHeight: build.UpgradeKumquatHeight, + BreezeGasTampingDuration: build.BreezeGasTampingDuration, + UpgradeCalicoHeight: build.UpgradeCalicoHeight, + UpgradePersianHeight: build.UpgradePersianHeight, + UpgradeOrangeHeight: build.UpgradeOrangeHeight, + UpgradeClausHeight: build.UpgradeClausHeight, + UpgradeTrustHeight: build.UpgradeTrustHeight, + UpgradeNorwegianHeight: build.UpgradeNorwegianHeight, + UpgradeTurboHeight: build.UpgradeTurboHeight, + UpgradeHyperdriveHeight: build.UpgradeHyperdriveHeight, + UpgradeChocolateHeight: build.UpgradeChocolateHeight, + UpgradeOhSnapHeight: build.UpgradeOhSnapHeight, + }, + }, nil +} From 767a53f8c3b69dac78f68657e35aacb396b7cf75 Mon Sep 17 00:00:00 2001 From: Rob Quist Date: Thu, 5 May 2022 11:56:09 +0200 Subject: [PATCH 39/47] Make markets logger less noise when doing retrievals Logging each block causes a lot of useless information in the logs --- markets/loggers/loggers.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/markets/loggers/loggers.go b/markets/loggers/loggers.go index 2d13a64a1..13a76954b 100644 --- a/markets/loggers/loggers.go +++ b/markets/loggers/loggers.go @@ -22,12 +22,20 @@ func StorageProviderLogger(event storagemarket.ProviderEvent, deal storagemarket // RetrievalClientLogger logs events from the retrieval client func RetrievalClientLogger(event retrievalmarket.ClientEvent, deal retrievalmarket.ClientDealState) { - log.Infow("retrieval client event", "name", retrievalmarket.ClientEvents[event], "deal ID", deal.ID, "state", retrievalmarket.DealStatuses[deal.Status], "message", deal.Message) + method := log.Infow + if event == retrievalmarket.ClientEventBlocksReceived { + method = log.Debugw + } + method("retrieval client event", "name", retrievalmarket.ClientEvents[event], "deal ID", deal.ID, "state", retrievalmarket.DealStatuses[deal.Status], "message", deal.Message) } // RetrievalProviderLogger logs events from the retrieval provider func RetrievalProviderLogger(event retrievalmarket.ProviderEvent, deal retrievalmarket.ProviderDealState) { - log.Infow("retrieval provider event", "name", retrievalmarket.ProviderEvents[event], "deal ID", deal.ID, "receiver", deal.Receiver, "state", retrievalmarket.DealStatuses[deal.Status], "message", deal.Message) + method := log.Infow + if event == retrievalmarket.ProviderEventBlockSent { + method = log.Debugw + } + method("retrieval provider event", "name", retrievalmarket.ProviderEvents[event], "deal ID", deal.ID, "receiver", deal.Receiver, "state", retrievalmarket.DealStatuses[deal.Status], "message", deal.Message) } // DataTransferLogger logs events from the data transfer module From 3c9a8a42d9798bce7ac13f154699c5f5048caa17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Thu, 5 May 2022 13:12:09 -0400 Subject: [PATCH 40/47] more logs --- extern/sector-storage/fsutil/filesize_unix.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/extern/sector-storage/fsutil/filesize_unix.go b/extern/sector-storage/fsutil/filesize_unix.go index 7df8dae4c..9c7f04ace 100644 --- a/extern/sector-storage/fsutil/filesize_unix.go +++ b/extern/sector-storage/fsutil/filesize_unix.go @@ -4,6 +4,7 @@ import ( "os" "path/filepath" "syscall" + "time" "golang.org/x/xerrors" ) @@ -15,6 +16,8 @@ type SizeInfo struct { // FileSize returns bytes used by a file or directory on disk // NOTE: We care about the allocated bytes, not file or directory size func FileSize(path string) (SizeInfo, error) { + start := time.Now() + var size int64 err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error { if err != nil { @@ -32,6 +35,11 @@ func FileSize(path string) (SizeInfo, error) { } return err }) + + if time.Now().Sub(start) >= 3*time.Second { + log.Warnw("very slow file size check", "took", time.Now().Sub(start), "path", path) + } + if err != nil { if os.IsNotExist(err) { return SizeInfo{}, os.ErrNotExist From 304fa02d59106ecdc8813e05ce01600cb5e0a980 Mon Sep 17 00:00:00 2001 From: Jennifer Wang Date: Fri, 6 May 2022 01:57:03 -0400 Subject: [PATCH 41/47] 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 zcmV-d5vcC1Bd{Zof`8@2(N(yS;1aWiWw`L{_8C&Nsa*?SNcduPi)wZ@%@4@pOy<=ns+};Ic*rCYWwhnyw04Op2EO*SoY~@h!3&l^V>fTG>SI7Co zV%IC%wj72HUS`Ap35sRZ|IU_qvw0(VV>sLI@95@^e*5+fO3+;`m&jSeGq|JX_a~?6 z-ccw)8#!p{cYp87;X^cCpV*d5yx|Bw$A-}Er^YPR>oMB=hrYl|#AOJ7M@!qpevKEO zdD2%xu>;TgvMfvRkJWO@e@!+LymTyU_RqDA;n{d|FF|A&9$Uz~bSxV?jPQD9$aJv; z?MPBsbA3lJ9|kZ9&@ zSmvIOZkUD~2d%5OQ%zB>*vdNXi1dutF&QnZ*bFUKxwsiBr&sy9!Wk&V(LK-Pu1v=3 z4tPsitba^S6B)`_0pDsAS^}=lP#*dJon-tI{s(K>i9nd2ONs7__F;*>U-%XFhZ0;8 z8u=Au_GNq{McUpyTUFcmq|>;j_^#`-rDyc?7s3{+DRA)8Vi=f&K0pbs921_w1!J~* zc6vJZvh;Loc{&R~#EI=#oUc=p1CrCJX-!X;$bV(nIYl-(wH@pG`v2yb_U6`q{66Tb zW8S7T6#12+sfmq>NF*qg0Yu(|cT>wUi||2EI2#`LJyrn?>{!Wm{uR7@mfrKmq&g=^ zd|AJ_ltk>!)-298!3IcK7iTu|<%qMUp@2 zUVpcLwG3Pl)_SbAg=xcnCT3U~|Hd6v=3Z(hgkmgX%fd_;lll;I}*fxodZfpawsw-fbbyQsr3)8O< zomU0{Sq!uW3UXQ-f&>8$I-$T_00#-FE`PV2^$h=<&0Ng*I4PP0y(J>=?@fG_t3scL zHJ0ggpI*HltGQ+-9IkMjzI)-QYv7wgyAwr}0GPdL?1DXDO(!l??U zDxB)Eoa$J~cB)@6#SUVD-}rC5{>`zL!R}-g|C(D*HCL+>qjye>iY_*ncw64KsDHJ> z@pej)yWn^OseXB7+fxwAz=eS+BQuh*%6(1@;BfLTri>eB7n`#aKhKoVxvy-L0c02s zc3o@$vaPKLE*LlIGs{_G15DQdfq(f2z9fLaxn*D-yn9*@eE|qH2yY^%v0Ryq==|%6 zjr0d>Y^m_hdJhma00Limt_5-zy?^+^`!hV{QjTV8W%>i@7^zRLu^6sZqz>6sbszB3 z{@eQgZ+o@2miFJ%VQZe?Hi1(`29`M$=U6}4vYY#iFytvivt&)7KkZGRJ9R)RYg&u%s4 zUV_2SmVe%`_MAUbZPQ*V?SF~3eO79PA=-z9NGvECz>iIGJjxIYJM%gG6rQ1Kasi|8 zYyhFGJ#A9d29#-#X$j&^q1<7HPfs5{z|I_SE=HnBw^M*gGqRRJr&~YZsou^jaLeNT z^=Zv`R`@^El>hho(?X~JwZQ-Q@WB)H2V&d2Ew{Pg_P!!wjq_8dV1GHCi?;0*Cm+!b&)3+}#M=$JCw8A_SX zQA!OfVZ+)wax@s%fPct!6c6S7jtSk_zJt$%F)C7o)U~CJj1VedAV4- zL`Nn((-es(+_+pMgCEyV$d3KkeLcUtas9u(cz@l-8Msf7vVSd?oj%H^Pu|?q4%Jo; zCNp30(&9~3WNj?LujqR`;mhUC4I?J`f&4D(dwDLA!@Zyks zsEX28lz}!<X7%1mf&ZoX^J+GCz_Vv zM;VW`iQFHL$8xj$49BDXL>mo9>Tn~$!Lh`2cyuuxbx2Id9TU?@r^Iw4MXfBKObauc zHnZ(Fz1Xzo=}#p2aCY^;%m|~JV^j|!Xp27f?lQ>-*+Oe@M})5f&AY_?-eYmGt!=(H(T8o;K_u#z^WikR4UW?`!I`stP# zx#5MNdh4f(tjT?Oq74T_v3@GnPY*4oW!Fy+Bc>4(JM&`qW!Trgtc?ewVZ!(aX$@L_ zIm5&rl6Km-9*%YznjVgJ8jBu|cG5^5l6KNg9)FT{+CmSb9*TCv(%BAf zXLA1PS31Y?K$VB;aD14>ByXHEtlv=XE0cky^tCu(ho;GiB3^R znmV2gRBhDsYSNY&vCesH$xPbHBT8n>#w@J$ zh#f!v>&m+uAoi5HvO+EPl*FD=P5UbLl#acplwnxK{!(`q?#2F+*k2O+OK)d?$-#3> zUGF;V173@T*RCAn6Gu$jMX;}a=~Wyt?SJYK(-?Ra7PTu(^G#Okh7Gb6giEYrC3Yq<&G$jj^&m50mgBZgOy^Qr-@0S-oRTzbYB$XVFn1A3t zXEb;x^riYIA@|kGc#2V~Se3RGgygT6@3NdRY=!p=a?j>?0jL2d1gsf&@>&gCzq|zIK^T1_$Y`#?(*n~V-yOAm zdcbAKVeTE>(~@i(of@9#mlAQZOQD5U;%L9@|KEn14JNs2_K2_iT~j~KdV1dSqOK)t zsP$Z{_p-(AZ>{Dtt{LpKHGhT7ZuvnUtq@bn*EFRRPq-fO3D?4xN5sfJFW~Z985seWyE-!I=ckJtcey>4^s{;KEsqq>tvoR;P`^O^uYV8qkNerE{|cKJ zx%kFA<&KSth(A%f8rt{wS3Q$}=)CF?sRZe^fP1=y;;2-o6txRLJt4_uPYC=uo4J_r zaZ)r1UXvf#|GWN9epq9vCyYIM2i=1gj#W6;x8_(UN}gj~T8~xF9s7my+$froz#&|G ze($@+Y|qFm$##fU9DiTH3MZZI>%tStr{GVvz)q#(6h+Q2+Rl>No}=T{)V5s>s3`AQ zw(^gaX=WVt@Dd|4-0d+B(|p~^rOIlaaz$2BE9+RKY*obSJ%mrNj=lG_t0LA2;r8%q zymbPtc0u<$hE`)zTo$c{_*7LS=oLQqJGqGkr}~ID%1PnUUVrKos=&Vj{|fxOw~Ov; z*)IATBlFyg177t&Wu#;^_w3_FWL|k^e<^ldZzq{2d;SsWj6C904lU`|WBbfLiF0C9 z-Cd3}qb+A2?>J&KcSU9fK zKIhJHlr)RmJ%5;n27}|EChMzci+9AUjc2qQs+4SUp+$gl0m@%9C|3qAf%2+nJ0m5l zN5tT%0Z#pM#cJc|)=p=}8z+{`I;ERkz|LtQevN2Scsk+f-kPUVb7DVnlYZ&o`YTYo z!i_9K?YDIlXQ)j#7;AQPMM-$WPUvqJyx~upo*H$RI zmtxrcP9AU~E}sOZD+ac~?PzeMI})*uYk@&rG&MPG5v}egiB_i$bE4Ho>wbAghNiH`tk2)JLcG5PkZYeKxYj0x%fDWtofbAvG) zlYgpjIc&>iPl1=nzD*DOz3Y{J-V{xYw>1|`jbEs~(u6tMl59l?bAXe(l`N|m_zwr{ zJrRDP6{!(`-l$@(Y{t01kSF@t_L`v3u*XxGb z$S|<+Y0dBjHSqWC9i#AzSN%2lfxWv$nSbX&1~r4bNBD1R!zJED;!cs+c`5ZqSV}G0 zdnQcQWOc07eJt$73q&b3Zm}gw6U|8940>}1bketMM4U$v7G3O9ihat)z^0mWWhT(& zia;|cl|4z@numO#7i1{_c|nd!*lx#FD-Y}Cb=5AtB|ob62YUd5jtZofbF%#}L{Qj2 zRs^$(BDpP>DU`X(U)y5)u6{-7XN%vC)YP=}2N$d;BPL)A>|lT#45+_P=K^O%skghg dr^Nnr%Ta?7+-&YQ{~rJV|NoG6MA*~>0RRgG+8zJ^ 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 42/47] 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 43/47] 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% From c057ce10d16df18d695a739e28d078883c3e1988 Mon Sep 17 00:00:00 2001 From: Rob Quist Date: Mon, 9 May 2022 22:13:09 +0200 Subject: [PATCH 44/47] Make deal making logs much less noisy For each upgrade-marked sector, for each deal, this "info" log comes along but its not really "info" imho --- extern/storage-sealing/input.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/storage-sealing/input.go b/extern/storage-sealing/input.go index 9654296ca..945de51b7 100644 --- a/extern/storage-sealing/input.go +++ b/extern/storage-sealing/input.go @@ -446,7 +446,7 @@ func (m *Sealing) updateInput(ctx context.Context, sp abi.RegisteredSealProof) e } if !ok { exp, _, _ := expF(sector.number) - log.Infof("CC update sector %d cannot fit deal, expiration %d before deal end epoch %d", id, exp, piece.deal.DealProposal.EndEpoch) + log.Debugf("CC update sector %d cannot fit deal, expiration %d before deal end epoch %d", id, exp, piece.deal.DealProposal.EndEpoch) continue } From ddc46fc05920853b8e6826db33db1f18f46350a4 Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Tue, 10 May 2022 16:40:29 -0400 Subject: [PATCH 45/47] Update to filecoin pubsub --- chain/messagepool/messagepool.go | 2 +- chain/store/store.go | 2 +- chain/sync.go | 2 +- go.mod | 4 +- go.sum | 7 +- testplans/lotus-soup/go.mod | 79 +++++++++--------- testplans/lotus-soup/go.sum | 139 ++++++++++++++++++++----------- 7 files changed, 140 insertions(+), 95 deletions(-) diff --git a/chain/messagepool/messagepool.go b/chain/messagepool/messagepool.go index 34daa6f7c..2d6b7e01f 100644 --- a/chain/messagepool/messagepool.go +++ b/chain/messagepool/messagepool.go @@ -19,6 +19,7 @@ import ( "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/crypto" "github.com/filecoin-project/go-state-types/network" + lps "github.com/filecoin-project/pubsub" "github.com/hashicorp/go-multierror" lru "github.com/hashicorp/golang-lru" "github.com/ipfs/go-cid" @@ -27,7 +28,6 @@ import ( "github.com/ipfs/go-datastore/query" logging "github.com/ipfs/go-log/v2" pubsub "github.com/libp2p/go-libp2p-pubsub" - lps "github.com/whyrusleeping/pubsub" "golang.org/x/xerrors" "github.com/filecoin-project/go-address" diff --git a/chain/store/store.go b/chain/store/store.go index d86a66f12..9a0084f16 100644 --- a/chain/store/store.go +++ b/chain/store/store.go @@ -28,6 +28,7 @@ import ( "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/pubsub" lru "github.com/hashicorp/golang-lru" block "github.com/ipfs/go-block-format" "github.com/ipfs/go-cid" @@ -35,7 +36,6 @@ import ( "github.com/ipfs/go-datastore/query" cbor "github.com/ipfs/go-ipld-cbor" logging "github.com/ipfs/go-log/v2" - "github.com/whyrusleeping/pubsub" "golang.org/x/xerrors" ) diff --git a/chain/sync.go b/chain/sync.go index a34a83d76..bb42f070e 100644 --- a/chain/sync.go +++ b/chain/sync.go @@ -14,6 +14,7 @@ import ( "github.com/filecoin-project/lotus/node/modules/dtypes" "github.com/Gurpartap/async" + "github.com/filecoin-project/pubsub" "github.com/hashicorp/go-multierror" blocks "github.com/ipfs/go-block-format" "github.com/ipfs/go-cid" @@ -22,7 +23,6 @@ import ( "github.com/libp2p/go-libp2p-core/connmgr" "github.com/libp2p/go-libp2p-core/peer" cbg "github.com/whyrusleeping/cbor-gen" - "github.com/whyrusleeping/pubsub" "go.opencensus.io/stats" "go.opencensus.io/trace" "golang.org/x/xerrors" diff --git a/go.mod b/go.mod index e3add1727..e11e69a80 100644 --- a/go.mod +++ b/go.mod @@ -46,6 +46,7 @@ require ( github.com/filecoin-project/go-statestore v0.2.0 github.com/filecoin-project/go-storedcounter v0.1.0 github.com/filecoin-project/index-provider v0.5.0 + github.com/filecoin-project/pubsub v1.0.0 github.com/filecoin-project/specs-actors v0.9.14 github.com/filecoin-project/specs-actors/v2 v2.3.6 github.com/filecoin-project/specs-actors/v3 v3.1.1 @@ -140,14 +141,13 @@ require ( 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 + github.com/stretchr/testify v1.7.1 github.com/syndtr/goleveldb v1.0.0 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 github.com/whyrusleeping/ledger-filecoin-go v0.9.1-0.20201010031517-c3dcc1bddce4 github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 - github.com/whyrusleeping/pubsub v0.0.0-20190708150250-92bcb0691325 github.com/xorcare/golden v0.6.1-0.20191112154924-b87f686d7542 go.opencensus.io v0.23.0 go.opentelemetry.io/otel v1.3.0 diff --git a/go.sum b/go.sum index 6f3f4d5ec..5112c7bd3 100644 --- a/go.sum +++ b/go.sum @@ -382,6 +382,8 @@ github.com/filecoin-project/go-storedcounter v0.1.0 h1:Mui6wSUBC+cQGHbDUBcO7rfh5 github.com/filecoin-project/go-storedcounter v0.1.0/go.mod h1:4ceukaXi4vFURIoxYMfKzaRF5Xv/Pinh2oTnoxpv+z8= github.com/filecoin-project/index-provider v0.5.0 h1:k2C1RFvOvxmA2i8bhmkb3b4qun7RDRDzzs/y25/TwQg= github.com/filecoin-project/index-provider v0.5.0/go.mod h1:KHVrP2vU3YuScb+fawObwTFoR882up9U07kk0ZrfP0c= +github.com/filecoin-project/pubsub v1.0.0 h1:ZTmT27U07e54qV1mMiQo4HDr0buo8I1LDHBYLXlsNXM= +github.com/filecoin-project/pubsub v1.0.0/go.mod h1:GkpB33CcUtUNrLPhJgfdy4FDx4OMNR9k+46DHx/Lqrg= github.com/filecoin-project/specs-actors v0.9.13/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= github.com/filecoin-project/specs-actors v0.9.14 h1:68PVstg2UB3ZsMLF+DKFTAs/YKsqhKWynkr0IqmVRQY= github.com/filecoin-project/specs-actors v0.9.14/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= @@ -1906,8 +1908,9 @@ github.com/stretchr/testify v1.3.1-0.20190311161405-34c6fa2dc709/go.mod h1:M5WIy github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= @@ -1996,8 +1999,6 @@ github.com/whyrusleeping/mdns v0.0.0-20180901202407-ef14215e6b30/go.mod h1:j4l84 github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= -github.com/whyrusleeping/pubsub v0.0.0-20190708150250-92bcb0691325 h1:++Zf4xQ7YrkE81gNHIjVqx5JZsn0nbMeHOkY1ILAIME= -github.com/whyrusleeping/pubsub v0.0.0-20190708150250-92bcb0691325/go.mod h1:g7ckxrjiFh8mi1AY7ox23PZD0g6QU/TxW3U3unX7I3A= github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee h1:lYbXeSvJi5zk5GLKVuid9TVjS9a0OmLIDKTfoZBL6Ow= github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg= github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= diff --git a/testplans/lotus-soup/go.mod b/testplans/lotus-soup/go.mod index 033dfacac..65cd77f42 100644 --- a/testplans/lotus-soup/go.mod +++ b/testplans/lotus-soup/go.mod @@ -27,8 +27,8 @@ require ( github.com/ipfs/go-unixfs v0.3.1 github.com/ipld/go-car v0.3.3 github.com/kpacha/opencensus-influxdb v0.0.0-20181102202715-663e2683a27c - github.com/libp2p/go-libp2p v0.18.1 - github.com/libp2p/go-libp2p-core v0.14.0 + github.com/libp2p/go-libp2p v0.19.0 + github.com/libp2p/go-libp2p-core v0.15.1 github.com/libp2p/go-libp2p-pubsub-tracer v0.0.0-20200626141350-e730b32bf1e6 github.com/multiformats/go-multiaddr v0.5.0 github.com/testground/sdk-go v0.2.6 @@ -49,7 +49,7 @@ require ( github.com/akavel/rsrc v0.8.0 // indirect github.com/alecthomas/units v0.0.0-20210927113745-59d0afb8317a // indirect github.com/avast/retry-go v2.6.0+incompatible // indirect - github.com/benbjohnson/clock v1.2.0 // 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 @@ -58,9 +58,9 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/cheekybits/genny v1.0.0 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect - github.com/cilium/ebpf v0.2.0 // indirect + github.com/cilium/ebpf v0.4.0 // indirect github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 // indirect - github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327 // indirect + github.com/containerd/cgroups v1.0.3 // indirect github.com/coreos/go-systemd/v22 v22.3.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 // indirect @@ -77,7 +77,7 @@ require ( github.com/dustin/go-humanize v1.0.0 // indirect github.com/elastic/go-sysinfo v1.7.0 // indirect github.com/elastic/go-windows v1.0.0 // indirect - github.com/elastic/gosigar v0.14.1 // indirect + github.com/elastic/gosigar v0.14.2 // indirect github.com/fatih/color v1.13.0 // indirect github.com/filecoin-project/dagstore v0.5.2 // indirect github.com/filecoin-project/filecoin-ffi v0.30.4-0.20200910194244-f640612a1a1f // indirect @@ -100,13 +100,14 @@ require ( github.com/filecoin-project/go-statemachine v1.0.2 // indirect github.com/filecoin-project/go-statestore v0.2.0 // indirect github.com/filecoin-project/index-provider v0.5.0 // indirect + github.com/filecoin-project/pubsub v1.0.0 // indirect github.com/filecoin-project/specs-actors/v2 v2.3.6 // indirect github.com/filecoin-project/specs-actors/v3 v3.1.1 // indirect github.com/filecoin-project/specs-actors/v4 v4.0.1 // indirect github.com/filecoin-project/specs-actors/v5 v5.0.4 // indirect github.com/filecoin-project/specs-actors/v6 v6.0.1 // indirect github.com/filecoin-project/specs-actors/v7 v7.0.0 // indirect - github.com/filecoin-project/specs-storage v0.2.2 // indirect + github.com/filecoin-project/specs-storage v0.2.3-0.20220426183226-1a0a63c5990f // 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 @@ -122,7 +123,7 @@ require ( github.com/go-ole/go-ole v1.2.5 // indirect github.com/go-redis/redis/v7 v7.4.0 // indirect github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect - github.com/godbus/dbus/v5 v5.0.4 // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gogo/googleapis v1.4.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/gogo/status v1.1.0 // indirect @@ -132,7 +133,7 @@ require ( github.com/golang/protobuf v1.5.2 // indirect github.com/golang/snappy v0.0.3 // indirect github.com/google/gopacket v1.1.19 // indirect - github.com/gorilla/websocket v1.4.2 // indirect + github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.2.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect @@ -141,7 +142,7 @@ require ( github.com/hannahhoward/go-pubsub v0.0.0-20200423002714-8d62886cc36e // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect - github.com/huin/goupnp v1.0.2 // indirect + github.com/huin/goupnp v1.0.3 // indirect github.com/icza/backscanner v0.0.0-20210726202459-ac2ffc679f94 // indirect github.com/influxdata/influxdb v1.9.4 // indirect github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab // indirect @@ -193,8 +194,8 @@ require ( github.com/jpillora/backoff v1.0.0 // indirect github.com/kelseyhightower/envconfig v1.4.0 // indirect github.com/kilic/bls12-381 v0.0.0-20200820230200-6b2c19996391 // indirect - github.com/klauspost/compress v1.13.6 // indirect - github.com/klauspost/cpuid/v2 v2.0.9 // 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-buffer-pool v0.0.2 // indirect github.com/libp2p/go-cidranger v1.1.0 // indirect @@ -209,24 +210,23 @@ require ( github.com/libp2p/go-libp2p-kad-dht v0.15.0 // 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-mplex v0.6.0 // indirect github.com/libp2p/go-libp2p-nat v0.1.0 // indirect - github.com/libp2p/go-libp2p-noise v0.3.0 // indirect + github.com/libp2p/go-libp2p-noise v0.4.0 // indirect github.com/libp2p/go-libp2p-peerstore v0.6.0 // indirect github.com/libp2p/go-libp2p-pnet v0.2.0 // indirect github.com/libp2p/go-libp2p-pubsub v0.6.1 // indirect - github.com/libp2p/go-libp2p-quic-transport v0.16.1 // indirect + github.com/libp2p/go-libp2p-quic-transport v0.17.0 // indirect github.com/libp2p/go-libp2p-record v0.1.3 // indirect - github.com/libp2p/go-libp2p-resource-manager v0.2.0 // indirect + github.com/libp2p/go-libp2p-resource-manager v0.2.1 // indirect github.com/libp2p/go-libp2p-routing-helpers v0.2.3 // indirect github.com/libp2p/go-libp2p-swarm v0.10.2 // indirect github.com/libp2p/go-libp2p-testing v0.9.2 // indirect - github.com/libp2p/go-libp2p-tls v0.3.1 // indirect + github.com/libp2p/go-libp2p-tls v0.4.1 // indirect github.com/libp2p/go-libp2p-transport-upgrader v0.7.1 // indirect - github.com/libp2p/go-libp2p-yamux v0.9.0 // indirect + github.com/libp2p/go-libp2p-yamux v0.9.1 // indirect github.com/libp2p/go-maddr-filter v0.1.0 // indirect github.com/libp2p/go-mplex v0.6.0 // indirect - github.com/libp2p/go-msgio v0.1.0 // 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 @@ -235,19 +235,19 @@ require ( 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.0 // indirect - github.com/lucas-clemente/quic-go v0.25.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/marten-seemann/qtls-go1-16 v0.1.4 // indirect - github.com/marten-seemann/qtls-go1-17 v0.1.0 // indirect - github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1 // 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-isatty v0.0.14 // 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.43 // 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/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect @@ -261,12 +261,12 @@ require ( github.com/multiformats/go-multibase v0.0.3 // indirect github.com/multiformats/go-multicodec v0.4.1 // indirect github.com/multiformats/go-multihash v0.1.0 // indirect - github.com/multiformats/go-multistream v0.2.2 // indirect + github.com/multiformats/go-multistream v0.3.0 // indirect github.com/multiformats/go-varint v0.0.6 // 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.4 // indirect + github.com/onsi/ginkgo v1.16.5 // indirect github.com/opencontainers/runtime-spec v1.0.2 // indirect github.com/opentracing-contrib/go-grpc v0.0.0-20191001143057-db30781987df // indirect github.com/opentracing-contrib/go-stdlib v1.0.0 // indirect @@ -276,9 +276,9 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e // indirect - github.com/prometheus/client_golang v1.11.0 // indirect + github.com/prometheus/client_golang v1.12.1 // indirect github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.30.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/raulk/clock v1.1.0 // indirect @@ -294,7 +294,7 @@ require ( 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/stretchr/testify v1.7.0 // indirect + github.com/stretchr/testify v1.7.1 // indirect github.com/syndtr/goleveldb v1.0.0 // indirect github.com/tj/go-spin v1.1.0 // indirect github.com/uber/jaeger-client-go v2.28.0+incompatible // indirect @@ -311,7 +311,6 @@ require ( github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect github.com/whyrusleeping/ledger-filecoin-go v0.9.1-0.20201010031517-c3dcc1bddce4 // indirect github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 // indirect - github.com/whyrusleeping/pubsub v0.0.0-20190708150250-92bcb0691325 // 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 @@ -325,21 +324,21 @@ require ( go.uber.org/atomic v1.9.0 // indirect go.uber.org/dig v1.12.0 // indirect go.uber.org/fx v1.15.0 // indirect - go.uber.org/multierr v1.7.0 // indirect - go.uber.org/zap v1.19.1 // indirect + go.uber.org/multierr v1.8.0 // indirect + go.uber.org/zap v1.21.0 // indirect go4.org v0.0.0-20200411211856-f5505b9728dd // indirect - golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b // 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/net v0.0.0-20211112202133-69e39bad7dc2 // indirect - golang.org/x/sys v0.0.0-20211209171907-798191bca915 // indirect - golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf // indirect + golang.org/x/net v0.0.0-20220418201149-a630d4f3e7a2 // indirect + golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/tools v0.1.10 // indirect - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 // indirect - google.golang.org/grpc v1.40.0 // indirect - google.golang.org/protobuf v1.27.1 // indirect + google.golang.org/grpc v1.45.0 // indirect + google.golang.org/protobuf v1.28.0 // indirect gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/testplans/lotus-soup/go.sum b/testplans/lotus-soup/go.sum index 6f9efd946..75ffd2a15 100644 --- a/testplans/lotus-soup/go.sum +++ b/testplans/lotus-soup/go.sum @@ -188,8 +188,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/benbjohnson/immutable v0.2.1/go.mod h1:uc6OHo6PN2++n98KHLxW8ef4W42ylHiQSENghE1ezxI= github.com/benbjohnson/tmpl v1.0.0/go.mod h1:igT620JFIi44B6awvU9IsDhR77IXWtFigTLil/RPdps= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -252,8 +253,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= @@ -261,7 +263,11 @@ 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= @@ -269,8 +275,9 @@ github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 h1:sDMmm+q/3+Bu github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/codeskyblue/go-sh v0.0.0-20200712050446-30169cf553fe h1:69JI97HlzP+PH5Mi1thcGlDoBr6PS2Oe+l3mNmAkbs4= github.com/codeskyblue/go-sh v0.0.0-20200712050446-30169cf553fe/go.mod h1:VQx0hjo2oUeQkQUET7wRwradO6f+fN5jzXgB/zROxxE= -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= @@ -364,8 +371,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/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= 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= @@ -377,6 +384,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/go.mod h1:VdfDY72AFAiUhy0ZXEaWSpveGjMT5JcDIm903NGqFwQ= github.com/etclabscore/go-openrpc-reflect v0.0.36/go.mod h1:0404Ky3igAasAOpyj1eESjstTyneBAIk5PgJFbK4s5E= @@ -465,6 +473,8 @@ github.com/filecoin-project/go-storedcounter v0.1.0 h1:Mui6wSUBC+cQGHbDUBcO7rfh5 github.com/filecoin-project/go-storedcounter v0.1.0/go.mod h1:4ceukaXi4vFURIoxYMfKzaRF5Xv/Pinh2oTnoxpv+z8= github.com/filecoin-project/index-provider v0.5.0 h1:k2C1RFvOvxmA2i8bhmkb3b4qun7RDRDzzs/y25/TwQg= github.com/filecoin-project/index-provider v0.5.0/go.mod h1:KHVrP2vU3YuScb+fawObwTFoR882up9U07kk0ZrfP0c= +github.com/filecoin-project/pubsub v1.0.0 h1:ZTmT27U07e54qV1mMiQo4HDr0buo8I1LDHBYLXlsNXM= +github.com/filecoin-project/pubsub v1.0.0/go.mod h1:GkpB33CcUtUNrLPhJgfdy4FDx4OMNR9k+46DHx/Lqrg= github.com/filecoin-project/specs-actors v0.9.13/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= github.com/filecoin-project/specs-actors v0.9.14 h1:68PVstg2UB3ZsMLF+DKFTAs/YKsqhKWynkr0IqmVRQY= github.com/filecoin-project/specs-actors v0.9.14/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= @@ -485,8 +495,8 @@ github.com/filecoin-project/specs-actors/v6 v6.0.1/go.mod h1:V1AYfi5GkHXipx1mnVi github.com/filecoin-project/specs-actors/v7 v7.0.0-rc1.0.20220118005651-2470cb39827e/go.mod h1:TA5FwCna+Yi36POaT7SLKXsgEDvJwc0V/L6ZsO19B9M= github.com/filecoin-project/specs-actors/v7 v7.0.0 h1:FQN7tjt3o68hfb3qLFSJBoLMuOFY0REkFVLO/zXj8RU= github.com/filecoin-project/specs-actors/v7 v7.0.0/go.mod h1:TA5FwCna+Yi36POaT7SLKXsgEDvJwc0V/L6ZsO19B9M= -github.com/filecoin-project/specs-storage v0.2.2 h1:6ugbtKQ6LTcTEnEIX9HkeCtTp1PCYO497P/bokF5tF4= -github.com/filecoin-project/specs-storage v0.2.2/go.mod h1:6cc/lncmAxMUocPi0z1EPCX63beIX7F7UnlmUZ3hLQo= +github.com/filecoin-project/specs-storage v0.2.3-0.20220426183226-1a0a63c5990f h1:+suJFu4RJt7aZRXvE+Innrpacap+Z8N87y6a1Cgkuqc= +github.com/filecoin-project/specs-storage v0.2.3-0.20220426183226-1a0a63c5990f/go.mod h1:6cc/lncmAxMUocPi0z1EPCX63beIX7F7UnlmUZ3hLQo= github.com/filecoin-project/storetheindex v0.3.5 h1:KoS9TvjPm6zIZfUH8atAHJbVHOO7GTP1MdTG+v0eE+Q= github.com/filecoin-project/storetheindex v0.3.5/go.mod h1:0r3d0kSpK63O6AvLr1CjAINLi+nWD49clzcnKV+GLpI= github.com/filecoin-project/test-vectors/schema v0.0.5/go.mod h1:iQ9QXLpYWL3m7warwvK1JC/pTri8mnfEmKygNDqqY6E= @@ -656,8 +666,9 @@ github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY9 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/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= 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= @@ -787,8 +798,9 @@ github.com/gorilla/mux v1.8.0/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= @@ -865,8 +877,9 @@ github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbc 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/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= @@ -1232,14 +1245,16 @@ github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0 github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= 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 v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= 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/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/koalacxr/quantile v0.0.1/go.mod h1:bGN/mCZLZ4lrSDHRQ6Lglj9chowGux8sGUIND+DQeD0= @@ -1312,8 +1327,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= @@ -1387,8 +1402,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= @@ -1445,8 +1461,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= @@ -1486,8 +1503,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= @@ -1496,8 +1513,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= @@ -1540,12 +1557,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= @@ -1579,8 +1598,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= @@ -1600,8 +1619,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= @@ -1680,8 +1700,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= @@ -1691,8 +1711,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= @@ -1719,13 +1740,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/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= @@ -1777,8 +1801,9 @@ github.com/miekg/dns v1.1.28/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7 github.com/miekg/dns v1.1.29/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= @@ -1890,8 +1915,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= @@ -1940,8 +1966,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 v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= 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= @@ -2026,8 +2053,9 @@ github.com/prometheus/client_golang v1.5.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= @@ -2047,8 +2075,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= @@ -2197,8 +2227,9 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= @@ -2295,8 +2326,6 @@ github.com/whyrusleeping/mdns v0.0.0-20180901202407-ef14215e6b30/go.mod h1:j4l84 github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= -github.com/whyrusleeping/pubsub v0.0.0-20190708150250-92bcb0691325 h1:++Zf4xQ7YrkE81gNHIjVqx5JZsn0nbMeHOkY1ILAIME= -github.com/whyrusleeping/pubsub v0.0.0-20190708150250-92bcb0691325/go.mod h1:g7ckxrjiFh8mi1AY7ox23PZD0g6QU/TxW3U3unX7I3A= github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee h1:lYbXeSvJi5zk5GLKVuid9TVjS9a0OmLIDKTfoZBL6Ow= github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= @@ -2402,8 +2431,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.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -2415,8 +2445,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= @@ -2476,8 +2507,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= @@ -2595,11 +2627,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-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-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE= 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= @@ -2608,6 +2644,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= @@ -2743,12 +2780,16 @@ golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBc 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-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 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= @@ -2847,13 +2888,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.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.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= @@ -2960,8 +3003,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= @@ -2974,8 +3018,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 9da58c5f6a8c4ce6de64636b605161620f728604 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Tue, 10 May 2022 13:40:40 -0400 Subject: [PATCH 46/47] fix: mpool: avoid deadlock on unsubscribe When unsubscribing _all_ topics, pubsub will drain the subscription channel to avoid deadlocks. See https://github.com/whyrusleeping/pubsub/pull/1. fixes #7803 --- chain/messagepool/messagepool.go | 2 +- chain/sync.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/chain/messagepool/messagepool.go b/chain/messagepool/messagepool.go index 2d6b7e01f..0ff36512c 100644 --- a/chain/messagepool/messagepool.go +++ b/chain/messagepool/messagepool.go @@ -1477,7 +1477,7 @@ func (mp *MessagePool) Updates(ctx context.Context) (<-chan api.MpoolUpdate, err sub := mp.changes.Sub(localUpdates) go func() { - defer mp.changes.Unsub(sub, localUpdates) + defer mp.changes.Unsub(sub) defer close(out) for { diff --git a/chain/sync.go b/chain/sync.go index bb42f070e..28b324211 100644 --- a/chain/sync.go +++ b/chain/sync.go @@ -260,7 +260,7 @@ func (syncer *Syncer) IncomingBlocks(ctx context.Context) (<-chan *types.BlockHe out := make(chan *types.BlockHeader, 10) go func() { - defer syncer.incoming.Unsub(sub, LocalIncoming) + defer syncer.incoming.Unsub(sub) for { select { From 086908e5352ef51e065f09537410cb0dad5b7634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Tue, 10 May 2022 18:36:45 -0400 Subject: [PATCH 47/47] stores: Cache disk usage results for a few seconds --- extern/sector-storage/stores/local.go | 49 +------ .../stores/localstorage_cached.go | 131 ++++++++++++++++++ extern/sector-storage/stores/remote.go | 6 + 3 files changed, 138 insertions(+), 48 deletions(-) create mode 100644 extern/sector-storage/stores/localstorage_cached.go diff --git a/extern/sector-storage/stores/local.go b/extern/sector-storage/stores/local.go index e33b662d5..4a8c4e1b3 100644 --- a/extern/sector-storage/stores/local.go +++ b/extern/sector-storage/stores/local.go @@ -85,56 +85,9 @@ type path struct { reserved int64 reservations map[abi.SectorID]storiface.SectorFileType - - statLk sync.Mutex - statDone chan struct{} - - lastStat *fsutil.FsStat // nil if no stat / was error } func (p *path) stat(ls LocalStorage) (fsutil.FsStat, error) { - for { - p.statLk.Lock() - if p.statDone == nil { - p.statDone = make(chan struct{}) - p.statLk.Unlock() - - st, err := p.doStat(ls) - - p.statLk.Lock() - p.lastStat = nil - if err == nil { - p.lastStat = &st - } - close(p.statDone) - p.statDone = nil - p.statLk.Unlock() - return st, err - } - - doneCh := p.statDone - p.statLk.Unlock() - - select { - case <-doneCh: - // todo context? - } - - p.statLk.Lock() - if p.lastStat == nil { - p.statLk.Unlock() - continue - } - - st := *p.lastStat - - p.statLk.Unlock() - - return st, nil - } -} - -func (p *path) doStat(ls LocalStorage) (fsutil.FsStat, error) { start := time.Now() stat, err := ls.Stat(p.local) @@ -217,7 +170,7 @@ type URLs []string func NewLocal(ctx context.Context, ls LocalStorage, index SectorIndex, urls []string) (*Local, error) { l := &Local{ - localStorage: ls, + localStorage: newCachedLocalStorage(ls), index: index, urls: urls, diff --git a/extern/sector-storage/stores/localstorage_cached.go b/extern/sector-storage/stores/localstorage_cached.go new file mode 100644 index 000000000..9ada06cbf --- /dev/null +++ b/extern/sector-storage/stores/localstorage_cached.go @@ -0,0 +1,131 @@ +package stores + +import ( + "sync" + "time" + + lru "github.com/hashicorp/golang-lru" + + "github.com/filecoin-project/lotus/extern/sector-storage/fsutil" +) + +var StatTimeout = 5 * time.Second +var MaxDiskUsageDuration = time.Second + +type cachedLocalStorage struct { + base LocalStorage + + statLk sync.Mutex + stats *lru.Cache // path -> statEntry + pathDUs *lru.Cache // path -> *diskUsageEntry +} + +func newCachedLocalStorage(ls LocalStorage) *cachedLocalStorage { + statCache, _ := lru.New(1024) + duCache, _ := lru.New(1024) + + return &cachedLocalStorage{ + base: ls, + stats: statCache, + pathDUs: duCache, + } +} + +type statEntry struct { + stat fsutil.FsStat + time time.Time +} + +type diskUsageEntry struct { + last diskUsageResult + + usagePromise <-chan diskUsageResult +} + +type diskUsageResult struct { + usage int64 + time time.Time +} + +func (c *cachedLocalStorage) GetStorage() (StorageConfig, error) { + return c.base.GetStorage() +} + +func (c *cachedLocalStorage) SetStorage(f func(*StorageConfig)) error { + return c.base.SetStorage(f) +} + +func (c *cachedLocalStorage) Stat(path string) (fsutil.FsStat, error) { + c.statLk.Lock() + defer c.statLk.Unlock() + + if v, ok := c.stats.Get(path); ok && time.Now().Sub(v.(statEntry).time) < StatTimeout { + return v.(statEntry).stat, nil + } + + // if we don't, get the stat + st, err := c.base.Stat(path) + if err == nil { + c.stats.Add(path, statEntry{ + stat: st, + time: time.Now(), + }) + } + + return st, err +} + +func (c *cachedLocalStorage) DiskUsage(path string) (int64, error) { + c.statLk.Lock() + defer c.statLk.Unlock() + + var entry *diskUsageEntry + + if v, ok := c.pathDUs.Get(path); ok { + entry = v.(*diskUsageEntry) + + // if we have recent cached entry, use that + if time.Now().Sub(entry.last.time) < StatTimeout { + return entry.last.usage, nil + } + } else { + entry = new(diskUsageEntry) + c.pathDUs.Add(path, entry) + } + + // start a new disk usage request; this can take a while so start a + // goroutine, and if it doesn't return quickly, return either the + // previous value, or zero - that's better than potentially blocking + // here for a long time. + if entry.usagePromise == nil { + resCh := make(chan diskUsageResult, 1) + go func() { + du, err := c.base.DiskUsage(path) + if err != nil { + log.Errorw("error getting disk usage", "path", path, "error", err) + } + resCh <- diskUsageResult{ + usage: du, + time: time.Now(), + } + }() + entry.usagePromise = resCh + } + + // wait for the disk usage result; if it doesn't come, fallback on + // previous usage + select { + case du := <-entry.usagePromise: + entry.usagePromise = nil + entry.last = du + case <-time.After(MaxDiskUsageDuration): + log.Warnw("getting usage is slow, falling back to previous usage", + "path", path, + "fallback", entry.last.usage, + "age", time.Now().Sub(entry.last.time)) + } + + return entry.last.usage, nil +} + +var _ LocalStorage = &cachedLocalStorage{} diff --git a/extern/sector-storage/stores/remote.go b/extern/sector-storage/stores/remote.go index 62c780d09..0a9868c8f 100644 --- a/extern/sector-storage/stores/remote.go +++ b/extern/sector-storage/stores/remote.go @@ -95,6 +95,8 @@ func (r *Remote) AcquireSector(ctx context.Context, s storage.SectorRef, existin return storiface.SectorPaths{}, storiface.SectorPaths{}, xerrors.New("can't both find and allocate a sector") } + // First make sure that no other goroutines are trying to fetch this sector; + // wait if there are any. for { r.fetchLk.Lock() @@ -122,6 +124,7 @@ func (r *Remote) AcquireSector(ctx context.Context, s storage.SectorRef, existin r.fetchLk.Unlock() }() + // Try to get the sector from local storage paths, stores, err := r.local.AcquireSector(ctx, s, existing, allocate, pathType, op) if err != nil { return storiface.SectorPaths{}, storiface.SectorPaths{}, xerrors.Errorf("local acquire error: %w", err) @@ -148,6 +151,9 @@ func (r *Remote) AcquireSector(ctx context.Context, s storage.SectorRef, existin odt = storiface.FsOverheadFinalized } + // If any path types weren't found in local storage, try fetching them + + // First reserve storage releaseStorage, err := r.local.Reserve(ctx, s, toFetch, ids, odt) if err != nil { return storiface.SectorPaths{}, storiface.SectorPaths{}, xerrors.Errorf("reserving storage space: %w", err)