From 7576eabb8fd2ec793265118e67375511d2544c8f Mon Sep 17 00:00:00 2001 From: "Masih H. Derkani" Date: Wed, 13 Nov 2024 12:47:19 +0700 Subject: [PATCH 1/9] Fix minor bugs in lotus shed datastore subcommand (#12694) * Use consistent pattern to pick `namespace`: the cleaned datastore key vs. direct user input. This way `metadata` for example would work consistently. Otherwise, `clear`, `export` and `import` wont work unless `/metadata` is specified. * Fix minor bug on number of arguments required for `clear` command. --- cmd/lotus-shed/datastore.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cmd/lotus-shed/datastore.go b/cmd/lotus-shed/datastore.go index ad68145852c..3c7d1f9831d 100644 --- a/cmd/lotus-shed/datastore.go +++ b/cmd/lotus-shed/datastore.go @@ -133,8 +133,8 @@ var datastoreClearCmd = &cli.Command{ }, ArgsUsage: "[namespace]", Action: func(cctx *cli.Context) (_err error) { - if cctx.NArg() != 2 { - return xerrors.Errorf("requires 2 arguments: the datastore prefix") + if cctx.NArg() != 1 { + return xerrors.Errorf("requires 1 argument: the datastore prefix") } namespace := cctx.Args().Get(0) @@ -157,7 +157,7 @@ var datastoreClearCmd = &cli.Command{ } defer lr.Close() //nolint:errcheck - ds, err := lr.Datastore(cctx.Context, namespace) + ds, err := lr.Datastore(cctx.Context, datastore.NewKey(namespace).String()) if err != nil { return err } @@ -306,7 +306,7 @@ var datastoreExportCmd = &cli.Command{ } defer lr.Close() //nolint:errcheck - ds, err := lr.Datastore(cctx.Context, namespace) + ds, err := lr.Datastore(cctx.Context, datastore.NewKey(namespace).String()) if err != nil { return err } @@ -389,7 +389,7 @@ var datastoreImportCmd = &cli.Command{ } defer lr.Close() //nolint:errcheck - ds, err := lr.Datastore(cctx.Context, namespace) + ds, err := lr.Datastore(cctx.Context, datastore.NewKey(namespace).String()) if err != nil { return err } From b6574c2348198fc0ccb53f4ee98dce7ece3679c9 Mon Sep 17 00:00:00 2001 From: "Masih H. Derkani" Date: Wed, 13 Nov 2024 15:43:28 +0700 Subject: [PATCH 2/9] Fix missing flag for `lotus-shed datastore import` (#12695) The `really-do-it` flag is required but not configured for the import. --- cmd/lotus-shed/datastore.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmd/lotus-shed/datastore.go b/cmd/lotus-shed/datastore.go index 3c7d1f9831d..a03e2cf24f8 100644 --- a/cmd/lotus-shed/datastore.go +++ b/cmd/lotus-shed/datastore.go @@ -354,6 +354,10 @@ var datastoreImportCmd = &cli.Command{ Usage: "node type (FullNode, StorageMiner, Worker, Wallet)", Value: "FullNode", }, + &cli.BoolFlag{ + Name: "really-do-it", + Usage: "must be specified for the action to take effect", + }, }, Description: "Import the specified datastore snapshot.", ArgsUsage: "[namespace filename]", From c087d72aceb75fa06597470b052d20af86016f30 Mon Sep 17 00:00:00 2001 From: "Masih H. Derkani" Date: Tue, 19 Nov 2024 10:54:17 +0000 Subject: [PATCH 3/9] feat: implement F3 CLI to list power table and proportional power at instance (#12698) * Implement F3 CLI to list power table and proportional power at instance Implement utility CLIs to: * get the power table used by F3 at a given instance ID. * get total proportional power of a list of actors at a given instance ID. These utilities allow us to debug the exact participation power for an instance without having to manually calculate it or estimate it from the latest power. * Update changelog * Address lint issue * Regenerate CLI docs * Take instance ID via flag and actor IDs as args * Reduce indentation by defiling top level vars * Work around bug in docsgencli by using one-liner usage --- CHANGELOG.md | 1 + cli/f3.go | 770 +++++++++++++++++++++++----------- documentation/en/cli-lotus.md | 45 ++ 3 files changed, 566 insertions(+), 250 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3eeb44b7dd5..a2401a17021 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ This Lotus release candidate introduces the new `ChainIndexer` subsystem, enhanc - Implement `EthGetTransactionByBlockNumberAndIndex` (`eth_getTransactionByBlockNumberAndIndex`) and `EthGetTransactionByBlockHashAndIndex` (`eth_getTransactionByBlockHashAndIndex`) methods. ([filecoin-project/lotus#12618](https://github.com/filecoin-project/lotus/pull/12618)) - `lotus-shed indexes inspect-indexes` now performs a comprehensive comparison of the event index data for each message by comparing the AMT root CID from the message receipt with the root of a reconstructed AMT. Previously `inspect-indexes` simply compared event counts. Comparing AMT roots instead confirms all the event data is byte-perfect. ([filecoin-project/lotus#12570](https://github.com/filecoin-project/lotus/pull/12570)) - Reduce size of embedded genesis CAR files by removing WASM actor blocks and compressing with zstd. This reduces the `lotus` binary size by approximately 10 MiB. ([filecoin-project/lotus#12439](https://github.com/filecoin-project/lotus/pull/12439)) +- Implement F3 utility CLIs to list the power table for a given instance and sum the proportional power of a set of actors that participate in a given instance. ([filecoin-project/lotus#12698](https://github.com/filecoin-project/lotus/pull/12698)) ## 🐛 Bug Fix Highlights - Add logic to check if the miner's owner address is delegated (f4 address). If it is delegated, the `lotus-shed sectors termination-estimate` command now sends the termination state call using the worker ID. This fix resolves the issue where termination-estimate did not function correctly for miners with delegated owner addresses. ([filecoin-project/lotus#12569](https://github.com/filecoin-project/lotus/pull/12569)) diff --git a/cli/f3.go b/cli/f3.go index 7ffd8bae419..02874750711 100644 --- a/cli/f3.go +++ b/cli/f3.go @@ -1,6 +1,7 @@ package cli import ( + "context" "embed" "encoding/json" "errors" @@ -10,119 +11,350 @@ import ( "strings" "text/template" + "github.com/ipfs/go-cid" "github.com/urfave/cli/v2" "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-f3/certs" "github.com/filecoin-project/go-f3/gpbft" "github.com/filecoin-project/go-f3/manifest" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/lotus/api/v1api" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/lib/tablewriter" ) -var ( - F3Cmd = &cli.Command{ - Name: "f3", - Usage: "Manages Filecoin Fast Finality (F3) interactions", - Subcommands: []*cli.Command{ - { - Name: "list-miners", - Aliases: []string{"lm"}, - Usage: "Lists the miners that currently participate in F3 via this node.", - Action: func(cctx *cli.Context) error { - api, closer, err := GetFullNodeAPIV1(cctx) - if err != nil { - return err - } - defer closer() +var F3Cmd = &cli.Command{ + Name: "f3", + Usage: "Manages Filecoin Fast Finality (F3) interactions", + Subcommands: []*cli.Command{ + f3SbCmdListMiners, + f3SubCmdPowerTable, + f3SubCmdCerts, + f3SubCmdManifest, + f3SubCmdStatus, + }, +} +var f3SbCmdListMiners = &cli.Command{ + Name: "list-miners", + Aliases: []string{"lm"}, + Usage: `Lists the miners that currently participate in F3 via this node.`, + Action: func(cctx *cli.Context) error { + api, closer, err := GetFullNodeAPIV1(cctx) + if err != nil { + return err + } + defer closer() + + miners, err := api.F3ListParticipants(cctx.Context) + if err != nil { + return fmt.Errorf("listing participants: %w", err) + } + if len(miners) == 0 { + _, err = fmt.Fprintln(cctx.App.Writer, "No miners.") + return err + } + const ( + miner = "Miner" + from = "From" + to = "To" + ) + tw := tablewriter.New( + tablewriter.Col(miner), + tablewriter.Col(from), + tablewriter.Col(to), + ) + for _, participant := range miners { + addr, err := address.NewIDAddress(participant.MinerID) + if err != nil { + return fmt.Errorf("converting miner ID to address: %w", err) + } - miners, err := api.F3ListParticipants(cctx.Context) + tw.Write(map[string]interface{}{ + miner: addr, + from: participant.FromInstance, + to: participant.FromInstance + participant.ValidityTerm, + }) + } + return tw.Flush(cctx.App.Writer) + }, +} +var f3SubCmdPowerTable = &cli.Command{ + Name: "powertable", + Aliases: []string{"pt"}, + Subcommands: []*cli.Command{ + { + Name: "get", + Aliases: []string{"g"}, + Usage: `Get F3 power table at a specific instance ID or latest instance if none is specified.`, + ArgsUsage: "[instance]", + Flags: []cli.Flag{f3FlagPowerTableFromEC}, + Before: func(cctx *cli.Context) error { + if cctx.Args().Len() > 1 { + return fmt.Errorf("too many arguments") + } + return nil + }, + Action: func(cctx *cli.Context) error { + api, closer, err := GetFullNodeAPIV1(cctx) + if err != nil { + return err + } + defer closer() + + progress, err := api.F3GetProgress(cctx.Context) + if err != nil { + return fmt.Errorf("getting progress: %w", err) + } + + var instance uint64 + if cctx.Args().Present() { + instance, err = strconv.ParseUint(cctx.Args().First(), 10, 64) if err != nil { - return fmt.Errorf("listing participants: %w", err) + return fmt.Errorf("parsing instance: %w", err) } - if len(miners) == 0 { - _, err = fmt.Fprintln(cctx.App.Writer, "No miners.") - return err + if instance > progress.ID { + // TODO: Technically we can return power table for instances ahead as long as + // instance is within lookback. Implement it. + return fmt.Errorf("instance is ahead the current instance in progress: %d > %d", instance, progress.ID) } - const ( - miner = "Miner" - from = "From" - to = "To" - ) - tw := tablewriter.New( - tablewriter.Col(miner), - tablewriter.Col(from), - tablewriter.Col(to), - ) - for _, participant := range miners { - addr, err := address.NewIDAddress(participant.MinerID) + } else { + instance = progress.ID + } + + ltsk, expectedPowerTableCID, err := f3GetPowerTableTSKByInstance(cctx.Context, api, instance) + if err != nil { + return fmt.Errorf("getting power table tsk for instance %d: %w", instance, err) + } + + var result = struct { + Instance uint64 + FromEC bool + PowerTable struct { + CID string + Entries gpbft.PowerEntries + Total gpbft.StoragePower + ScaledTotal int64 + } + }{ + Instance: instance, + FromEC: cctx.Bool(f3FlagPowerTableFromEC.Name), + } + if result.FromEC { + result.PowerTable.Entries, err = api.F3GetECPowerTable(cctx.Context, ltsk) + } else { + result.PowerTable.Entries, err = api.F3GetF3PowerTable(cctx.Context, ltsk) + } + if err != nil { + return fmt.Errorf("getting f3 power table at instance %d: %w", instance, err) + } + + pt := gpbft.NewPowerTable() + if err := pt.Add(result.PowerTable.Entries...); err != nil { + // Sanity check the entries returned by the API. + return fmt.Errorf("retrieved power table is not valid for instance %d: %w", instance, err) + } + result.PowerTable.Total = pt.Total + result.PowerTable.ScaledTotal = pt.ScaledTotal + + actualPowerTableCID, err := certs.MakePowerTableCID(result.PowerTable.Entries) + if err != nil { + return fmt.Errorf("gettingh power table CID at instance %d: %w", instance, err) + } + if !expectedPowerTableCID.Equals(actualPowerTableCID) { + return fmt.Errorf("expected power table CID %s at instance %d, got: %s", expectedPowerTableCID, instance, actualPowerTableCID) + } + result.PowerTable.CID = actualPowerTableCID.String() + + output, err := json.MarshalIndent(result, "", " ") + if err != nil { + return fmt.Errorf("marshalling f3 power table at instance %d: %w", instance, err) + } + _, _ = fmt.Fprint(cctx.App.Writer, string(output)) + return nil + }, + }, + { + Name: "get-proportion", + Aliases: []string{"gp"}, + Usage: `Gets the total proportion of power for a list of actors at a given instance.`, + ArgsUsage: " [actor-id] ...", + Flags: []cli.Flag{ + f3FlagPowerTableFromEC, + f3FlagInstanceID, + }, + Before: func(cctx *cli.Context) error { + if cctx.Args().Len() < 1 { + return fmt.Errorf("at least one actor ID must be specified") + } + return nil + }, + Action: func(cctx *cli.Context) error { + api, closer, err := GetFullNodeAPIV1(cctx) + if err != nil { + return err + } + defer closer() + + progress, err := api.F3GetProgress(cctx.Context) + if err != nil { + return fmt.Errorf("getting progress: %w", err) + } + + var instance uint64 + if cctx.IsSet(f3FlagInstanceID.Name) { + instance = cctx.Uint64(f3FlagInstanceID.Name) + if instance > progress.ID { + // TODO: Technically we can return power table for instances ahead as long as + // instance is within lookback. Implement it. + return fmt.Errorf("instance is ahead the current instance in progress: %d > %d", instance, progress.ID) + } + } else { + instance = progress.ID + } + + ltsk, expectedPowerTableCID, err := f3GetPowerTableTSKByInstance(cctx.Context, api, instance) + if err != nil { + return fmt.Errorf("getting power table tsk for instance %d: %w", instance, err) + } + + var result = struct { + Instance uint64 + FromEC bool + PowerTable struct { + CID string + ScaledTotal int64 + } + ScaledSum int64 + Proportion float64 + }{ + Instance: instance, + FromEC: cctx.Bool(f3FlagPowerTableFromEC.Name), + } + + var powerEntries gpbft.PowerEntries + if result.FromEC { + powerEntries, err = api.F3GetECPowerTable(cctx.Context, ltsk) + } else { + powerEntries, err = api.F3GetF3PowerTable(cctx.Context, ltsk) + } + if err != nil { + return fmt.Errorf("getting f3 power table at instance %d: %w", instance, err) + } + + actualPowerTableCID, err := certs.MakePowerTableCID(powerEntries) + if err != nil { + return fmt.Errorf("gettingh power table CID at instance %d: %w", instance, err) + } + if !expectedPowerTableCID.Equals(actualPowerTableCID) { + return fmt.Errorf("expected power table CID %s at instance %d, got: %s", expectedPowerTableCID, instance, actualPowerTableCID) + } + result.PowerTable.CID = actualPowerTableCID.String() + + pt := gpbft.NewPowerTable() + if err := pt.Add(powerEntries...); err != nil { + return fmt.Errorf("constructing power table from entries: %w", err) + } + result.PowerTable.ScaledTotal = pt.ScaledTotal + + inputActorIDs := cctx.Args().Slice() + seenIDs := map[gpbft.ActorID]struct{}{} + for _, stringID := range inputActorIDs { + var actorID gpbft.ActorID + switch addr, err := address.NewFromString(stringID); { + case err == nil: + idAddr, err := address.IDFromAddress(addr) if err != nil { - return fmt.Errorf("converting miner ID to address: %w", err) + return fmt.Errorf("parsing ID from address %q: %w", stringID, err) } - - tw.Write(map[string]interface{}{ - miner: addr, - from: participant.FromInstance, - to: participant.FromInstance + participant.ValidityTerm, - }) + actorID = gpbft.ActorID(idAddr) + case errors.Is(err, address.ErrUnknownNetwork), + errors.Is(err, address.ErrUnknownProtocol): + // Try parsing as uint64 straight up. + id, err := strconv.ParseUint(stringID, 10, 64) + if err != nil { + return fmt.Errorf("parsing as uint64 %q: %w", stringID, err) + } + actorID = gpbft.ActorID(id) + default: + return fmt.Errorf("parsing address %q: %w", stringID, err) + } + // Prune duplicate IDs. + if _, ok := seenIDs[actorID]; ok { + continue + } + seenIDs[actorID] = struct{}{} + scaled, key := pt.Get(actorID) + if key == nil { + return fmt.Errorf("actor ID %q not found in power table", actorID) + } + result.ScaledSum += scaled + } + result.Proportion = float64(result.ScaledSum) / float64(result.PowerTable.ScaledTotal) + output, err := json.MarshalIndent(result, "", " ") + if err != nil { + return fmt.Errorf("marshalling f3 power table at instance %d: %w", instance, err) + } + _, _ = fmt.Fprint(cctx.App.Writer, string(output)) + return nil + }, + }, + }, +} +var f3SubCmdCerts = &cli.Command{ + Name: "certs", + Aliases: []string{"c"}, + Usage: "Manages interactions with F3 finality certificates.", + Subcommands: []*cli.Command{ + { + Name: "get", + Usage: "Gets an F3 finality certificate to a given instance ID, " + + "or the latest certificate if no instance is specified.", + ArgsUsage: "[instance]", + Flags: []cli.Flag{ + f3FlagOutput, + }, + Before: func(cctx *cli.Context) error { + if count := cctx.NArg(); count > 1 { + return fmt.Errorf("too many arguments: expected at most 1 but got %d", count) + } + return nil + }, + Action: func(cctx *cli.Context) error { + api, closer, err := GetFullNodeAPIV1(cctx) + if err != nil { + return err + } + defer closer() + + // Get the certificate, either for the given instance or the latest if no + // instance is specified. + var cert *certs.FinalityCertificate + if cctx.Args().Present() { + var instance uint64 + instance, err = strconv.ParseUint(cctx.Args().First(), 10, 64) + if err != nil { + return fmt.Errorf("parsing instance: %w", err) } - return tw.Flush(cctx.App.Writer) - }, + cert, err = api.F3GetCertificate(cctx.Context, instance) + } else { + cert, err = api.F3GetLatestCertificate(cctx.Context) + } + if err != nil { + return fmt.Errorf("getting finality certificate: %w", err) + } + if cert == nil { + _, _ = fmt.Fprintln(cctx.App.ErrWriter, "No certificate.") + return nil + } + + return outputFinalityCertificate(cctx, cert) }, - { - Name: "certs", - Aliases: []string{"c"}, - Usage: "Manages interactions with F3 finality certificates.", - Subcommands: []*cli.Command{ - { - Name: "get", - Usage: "Gets an F3 finality certificate to a given instance ID, " + - "or the latest certificate if no instance is specified.", - ArgsUsage: "[instance]", - Flags: []cli.Flag{ - f3FlagOutput, - }, - Before: func(cctx *cli.Context) error { - if count := cctx.NArg(); count > 1 { - return fmt.Errorf("too many arguments: expected at most 1 but got %d", count) - } - return nil - }, - Action: func(cctx *cli.Context) error { - api, closer, err := GetFullNodeAPIV1(cctx) - if err != nil { - return err - } - defer closer() - - // Get the certificate, either for the given instance or the latest if no - // instance is specified. - var cert *certs.FinalityCertificate - if cctx.Args().Present() { - var instance uint64 - instance, err = strconv.ParseUint(cctx.Args().First(), 10, 64) - if err != nil { - return fmt.Errorf("parsing instance: %w", err) - } - cert, err = api.F3GetCertificate(cctx.Context, instance) - } else { - cert, err = api.F3GetLatestCertificate(cctx.Context) - } - if err != nil { - return fmt.Errorf("getting finality certificate: %w", err) - } - if cert == nil { - _, _ = fmt.Fprintln(cctx.App.ErrWriter, "No certificate.") - return nil - } - - return outputFinalityCertificate(cctx, cert) - }, - }, - { - Name: "list", - Usage: `Lists a range of F3 finality certificates. + }, + { + Name: "list", + Usage: `Lists a range of F3 finality certificates. By default the certificates are listed in newest to oldest order, i.e. descending instance IDs. The order may be reversed using the @@ -158,179 +390,217 @@ Examples: * All certificates from instance 3 to 1413 in order of newest to oldest: $ lotus f3 certs list 3..1413 `, - ArgsUsage: "[range]", - Flags: []cli.Flag{ - f3FlagOutput, - f3FlagInstanceLimit, - f3FlagReverseOrder, - }, - Before: func(cctx *cli.Context) error { - if count := cctx.NArg(); count > 1 { - return fmt.Errorf("too many arguments: expected at most 1 but got %d", count) - } - return nil - }, - Action: func(cctx *cli.Context) error { - api, closer, err := GetFullNodeAPIV1(cctx) - if err != nil { - return err - } - defer closer() - - limit := cctx.Int(f3FlagInstanceLimit.Name) - reverse := cctx.Bool(f3FlagReverseOrder.Name) - fromTo := cctx.Args().First() - if fromTo == "" { - fromTo = "0.." - if !cctx.IsSet(f3FlagInstanceLimit.Name) { - // Default to limit of 10 if no explicit range and limit is given. - limit = 10 - } - } - r, err := newRanger(fromTo, limit, reverse, func() (uint64, error) { - latest, err := api.F3GetLatestCertificate(cctx.Context) - if err != nil { - return 0, fmt.Errorf("getting latest finality certificate: %w", err) - } - if latest == nil { - return 0, errors.New("no latest finality certificate") - } - return latest.GPBFTInstance, nil - }) - if err != nil { - return err - } - - var cert *certs.FinalityCertificate - for cctx.Context.Err() == nil { - next, proceed := r.next() - if !proceed { - return nil - } - cert, err = api.F3GetCertificate(cctx.Context, next) - if err != nil { - return fmt.Errorf("getting finality certificate for instance %d: %w", next, err) - } - if cert == nil { - // This is unexpected, because the range of iteration was determined earlier and - // certstore should to have all the certs. Error out. - return fmt.Errorf("nil finality certificate for instance %d", next) - } - if err := outputFinalityCertificate(cctx, cert); err != nil { - return err - } - _, _ = fmt.Fprintln(cctx.App.Writer) - } - return nil - }, - }, - }, + ArgsUsage: "[range]", + Flags: []cli.Flag{ + f3FlagOutput, + f3FlagInstanceLimit, + f3FlagReverseOrder, }, - { - Name: "manifest", - Usage: "Gets the current manifest used by F3.", - Flags: []cli.Flag{f3FlagOutput}, - Action: func(cctx *cli.Context) error { - api, closer, err := GetFullNodeAPIV1(cctx) - if err != nil { - return err - } - defer closer() - - manifest, err := api.F3GetManifest(cctx.Context) - if err != nil { - return fmt.Errorf("getting manifest: %w", err) - } - switch output := cctx.String(f3FlagOutput.Name); strings.ToLower(output) { - case "text": - return prettyPrintManifest(cctx.App.Writer, manifest) - case "json": - encoder := json.NewEncoder(cctx.App.Writer) - encoder.SetIndent("", " ") - return encoder.Encode(manifest) - default: - return fmt.Errorf("unknown output format: %s", output) - } - }, + Before: func(cctx *cli.Context) error { + if count := cctx.NArg(); count > 1 { + return fmt.Errorf("too many arguments: expected at most 1 but got %d", count) + } + return nil }, - { - Name: "status", - Usage: "Checks the F3 status.", - Action: func(cctx *cli.Context) error { - api, closer, err := GetFullNodeAPIV1(cctx) - if err != nil { - return err + Action: func(cctx *cli.Context) error { + api, closer, err := GetFullNodeAPIV1(cctx) + if err != nil { + return err + } + defer closer() + + limit := cctx.Int(f3FlagInstanceLimit.Name) + reverse := cctx.Bool(f3FlagReverseOrder.Name) + fromTo := cctx.Args().First() + if fromTo == "" { + fromTo = "0.." + if !cctx.IsSet(f3FlagInstanceLimit.Name) { + // Default to limit of 10 if no explicit range and limit is given. + limit = 10 } - defer closer() - - running, err := api.F3IsRunning(cctx.Context) + } + r, err := newRanger(fromTo, limit, reverse, func() (uint64, error) { + latest, err := api.F3GetLatestCertificate(cctx.Context) if err != nil { - return fmt.Errorf("getting running state: %w", err) + return 0, fmt.Errorf("getting latest finality certificate: %w", err) } - _, _ = fmt.Fprintf(cctx.App.Writer, "Running: %t\n", running) - if !running { + if latest == nil { + return 0, errors.New("no latest finality certificate") + } + return latest.GPBFTInstance, nil + }) + if err != nil { + return err + } + + var cert *certs.FinalityCertificate + for cctx.Context.Err() == nil { + next, proceed := r.next() + if !proceed { return nil } - - progress, err := api.F3GetProgress(cctx.Context) + cert, err = api.F3GetCertificate(cctx.Context, next) if err != nil { - return fmt.Errorf("getting progress: %w", err) + return fmt.Errorf("getting finality certificate for instance %d: %w", next, err) } - - _, _ = fmt.Fprintln(cctx.App.Writer, "Progress:") - _, _ = fmt.Fprintf(cctx.App.Writer, " Instance: %d\n", progress.ID) - _, _ = fmt.Fprintf(cctx.App.Writer, " Round: %d\n", progress.Round) - _, _ = fmt.Fprintf(cctx.App.Writer, " Phase: %s\n", progress.Phase) - - manifest, err := api.F3GetManifest(cctx.Context) - if err != nil { - return fmt.Errorf("getting manifest: %w", err) + if cert == nil { + // This is unexpected, because the range of iteration was determined earlier and + // certstore should to have all the certs. Error out. + return fmt.Errorf("nil finality certificate for instance %d", next) + } + if err := outputFinalityCertificate(cctx, cert); err != nil { + return err } - return prettyPrintManifest(cctx.App.Writer, manifest) - }, + _, _ = fmt.Fprintln(cctx.App.Writer) + } + return nil }, }, + }, +} +var f3SubCmdManifest = &cli.Command{ + Name: "manifest", + Usage: "Gets the current manifest used by F3.", + Flags: []cli.Flag{f3FlagOutput}, + Action: func(cctx *cli.Context) error { + api, closer, err := GetFullNodeAPIV1(cctx) + if err != nil { + return err + } + defer closer() + + manifest, err := api.F3GetManifest(cctx.Context) + if err != nil { + return fmt.Errorf("getting manifest: %w", err) + } + switch output := cctx.String(f3FlagOutput.Name); strings.ToLower(output) { + case "text": + return prettyPrintManifest(cctx.App.Writer, manifest) + case "json": + encoder := json.NewEncoder(cctx.App.Writer) + encoder.SetIndent("", " ") + return encoder.Encode(manifest) + default: + return fmt.Errorf("unknown output format: %s", output) + } + }, +} +var f3SubCmdStatus = &cli.Command{ + Name: "status", + Usage: "Checks the F3 status.", + Action: func(cctx *cli.Context) error { + api, closer, err := GetFullNodeAPIV1(cctx) + if err != nil { + return err + } + defer closer() + + running, err := api.F3IsRunning(cctx.Context) + if err != nil { + return fmt.Errorf("getting running state: %w", err) + } + _, _ = fmt.Fprintf(cctx.App.Writer, "Running: %t\n", running) + if !running { + return nil + } + + progress, err := api.F3GetProgress(cctx.Context) + if err != nil { + return fmt.Errorf("getting progress: %w", err) + } + + _, _ = fmt.Fprintln(cctx.App.Writer, "Progress:") + _, _ = fmt.Fprintf(cctx.App.Writer, " Instance: %d\n", progress.ID) + _, _ = fmt.Fprintf(cctx.App.Writer, " Round: %d\n", progress.Round) + _, _ = fmt.Fprintf(cctx.App.Writer, " Phase: %s\n", progress.Phase) + + manifest, err := api.F3GetManifest(cctx.Context) + if err != nil { + return fmt.Errorf("getting manifest: %w", err) + } + return prettyPrintManifest(cctx.App.Writer, manifest) + }, +} + +// TODO: we should standardise format as a top level flag. For now, here is an f3 +// +// specific one. +// See: https://github.com/filecoin-project/lotus/issues/12616 +var f3FlagOutput = &cli.StringFlag{ + Name: "output", + Usage: "The output format. Supported formats: text, json", + Value: "text", + Action: func(cctx *cli.Context, output string) error { + switch output { + case "text", "json": + return nil + default: + return fmt.Errorf("unknown output format: %s", output) + } + }, +} +var f3FlagInstanceLimit = &cli.IntFlag{ + Name: "limit", + Usage: "The maximum number of instances. A value less than 0 indicates no limit.", + DefaultText: "10 when no range is specified. Otherwise, unlimited.", + Value: -1, +} +var f3FlagReverseOrder = &cli.BoolFlag{ + Name: "reverse", + Usage: "Reverses the default order of output. ", +} +var f3FlagPowerTableFromEC = &cli.BoolFlag{ + Name: "ec", + Usage: "Whether to get the power table from EC.", +} +var f3FlagInstanceID = &cli.Uint64Flag{ + Name: "instance", + Aliases: []string{"i"}, + Usage: "The F3 instance ID.", + DefaultText: "Latest Instance", +} + +//go:embed templates/f3_*.go.tmpl +var f3TemplatesFS embed.FS +var f3Templates = template.Must( + template.New(""). + Funcs(template.FuncMap{ + "ptDiffToString": f3PowerTableDiffsToString, + "tipSetKeyToLotusTipSetKey": types.TipSetKeyFromBytes, + "add": func(a, b int) int { return a + b }, + "sub": func(a, b int) int { return a - b }, + }). + ParseFS(f3TemplatesFS, "templates/f3_*.go.tmpl"), +) + +func f3GetPowerTableTSKByInstance(ctx context.Context, api v1api.FullNode, instance uint64) (types.TipSetKey, cid.Cid, error) { + mfst, err := api.F3GetManifest(ctx) + if err != nil { + return types.EmptyTSK, cid.Undef, fmt.Errorf("getting manifest: %w", err) } - // TODO: we should standardise format as a top level flag. For now, here is an f3 - // specific one. - // See: https://github.com/filecoin-project/lotus/issues/12616 - f3FlagOutput = &cli.StringFlag{ - Name: "output", - Usage: "The output format. Supported formats: text, json", - Value: "text", - Action: func(cctx *cli.Context, output string) error { - switch output { - case "text", "json": - return nil - default: - return fmt.Errorf("unknown output format: %s", output) - } - }, + if instance < mfst.InitialInstance+mfst.CommitteeLookback { + ts, err := api.ChainGetTipSetByHeight(ctx, abi.ChainEpoch(mfst.BootstrapEpoch-mfst.EC.Finality), types.EmptyTSK) + if err != nil { + return types.EmptyTSK, cid.Undef, fmt.Errorf("getting bootstrap epoch tipset: %w", err) + } + return ts.Key(), mfst.InitialPowerTable, nil } - f3FlagInstanceLimit = &cli.IntFlag{ - Name: "limit", - Usage: "The maximum number of instances. A value less than 0 indicates no limit.", - DefaultText: "10 when no range is specified. Otherwise, unlimited.", - Value: -1, + + previous, err := api.F3GetCertificate(ctx, instance-1) + if err != nil { + return types.EmptyTSK, cid.Undef, fmt.Errorf("getting certificate for previous instance: %w", err) } - f3FlagReverseOrder = &cli.BoolFlag{ - Name: "reverse", - Usage: "Reverses the default order of output. ", + lookback, err := api.F3GetCertificate(ctx, instance-mfst.CommitteeLookback) + if err != nil { + return types.EmptyTSK, cid.Undef, fmt.Errorf("getting certificate for lookback instance: %w", err) } - //go:embed templates/f3_*.go.tmpl - f3TemplatesFS embed.FS - f3Templates = template.Must( - template.New(""). - Funcs(template.FuncMap{ - "ptDiffToString": f3PowerTableDiffsToString, - "tipSetKeyToLotusTipSetKey": types.TipSetKeyFromBytes, - "add": func(a, b int) int { return a + b }, - "sub": func(a, b int) int { return a - b }, - }). - ParseFS(f3TemplatesFS, "templates/f3_*.go.tmpl"), - ) -) + ltsk, err := types.TipSetKeyFromBytes(lookback.ECChain.Head().Key) + if err != nil { + return types.EmptyTSK, cid.Undef, fmt.Errorf("getting lotus tipset key from head of lookback certificate: %w", err) + } + return ltsk, previous.SupplementalData.PowerTable, nil +} func outputFinalityCertificate(cctx *cli.Context, cert *certs.FinalityCertificate) error { diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index a6e5b701225..e8e6f8d7004 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -2799,6 +2799,7 @@ USAGE: COMMANDS: list-miners, lm Lists the miners that currently participate in F3 via this node. + powertable, pt certs, c Manages interactions with F3 finality certificates. manifest Gets the current manifest used by F3. status Checks the F3 status. @@ -2820,6 +2821,50 @@ OPTIONS: --help, -h show help ``` +### lotus f3 powertable +``` +NAME: + lotus f3 powertable + +USAGE: + lotus f3 powertable command [command options] [arguments...] + +COMMANDS: + get, g Get F3 power table at a specific instance ID or latest instance if none is specified. + get-proportion, gp Gets the total proportion of power for a list of actors at a given instance. + help, h Shows a list of commands or help for one command + +OPTIONS: + --help, -h show help +``` + +#### lotus f3 powertable get +``` +NAME: + lotus f3 powertable get - Get F3 power table at a specific instance ID or latest instance if none is specified. + +USAGE: + lotus f3 powertable get [command options] [instance] + +OPTIONS: + --ec Whether to get the power table from EC. (default: false) + --help, -h show help +``` + +#### lotus f3 powertable get-proportion +``` +NAME: + lotus f3 powertable get-proportion - Gets the total proportion of power for a list of actors at a given instance. + +USAGE: + lotus f3 powertable get-proportion [command options] [actor-id] ... + +OPTIONS: + --ec Whether to get the power table from EC. (default: false) + --instance value, -i value The F3 instance ID. (default: Latest Instance) + --help, -h show help +``` + ### lotus f3 certs ``` NAME: From d8f5595ba0f7187746244e0dd93cd605ee0f36b7 Mon Sep 17 00:00:00 2001 From: "Masih H. Derkani" Date: Mon, 18 Nov 2024 18:31:18 +0700 Subject: [PATCH 4/9] Use DEBUG level log when F3 is not ready for participation (#12700) To reduce log verbosity change the log level for message indicating that F3 is not ready for participation yet. Because, the participation logic will reattempt after some backoff and these logs may at times become too verbose. Fixes #12688 --- chain/lf3/participation.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chain/lf3/participation.go b/chain/lf3/participation.go index 0c36a2cc9cb..5150d6b23e2 100644 --- a/chain/lf3/participation.go +++ b/chain/lf3/participation.go @@ -193,7 +193,7 @@ func (p *Participant) tryParticipate(ctx context.Context, ticket api.F3Participa log.Debugw("Reattempting F3 participation with the same ticket.", "attempts", p.backoff.Attempt()) continue case errors.Is(err, api.ErrF3NotReady): - log.Warnw("F3 is not ready. Retrying F3 participation after backoff.", "backoff", p.backoff.Duration(), "err", err) + log.Debugw("F3 is not ready. Retrying F3 participation after backoff.", "backoff", p.backoff.Duration(), "err", err) p.backOff(ctx) continue case err != nil: From ddc6c8ead9759bda86882a0f54927c7a3119da89 Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Wed, 20 Nov 2024 16:52:48 +1100 Subject: [PATCH 5/9] docs: replace more references to lotus-shed with lotus in ChainIndexer docs (#12708) Ref: https://github.com/filecoin-project/lotus/issues/12654 --- .../en/chain-indexer-overview-for-operators.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/documentation/en/chain-indexer-overview-for-operators.md b/documentation/en/chain-indexer-overview-for-operators.md index 4c815f61122..cafa24872dc 100644 --- a/documentation/en/chain-indexer-overview-for-operators.md +++ b/documentation/en/chain-indexer-overview-for-operators.md @@ -17,7 +17,7 @@ - [Backfill](#backfill) - [Backfill Timing](#backfill-timing) - [Backfill Disk Space Requirements](#backfill-disk-space-requirements) - - [`lotus index validate-backfill` CLI tool](#lotus-shed-chainindex-validate-backfill-cli-tool) + - [`lotus index validate-backfill` CLI tool](#lotus-index-validate-backfill-cli-tool) - [Usage](#usage) - [Regular Checks](#regular-checks) - [Downgrade Steps](#downgrade-steps) @@ -233,7 +233,7 @@ The command validates the chain index entries for each epoch in the specified ra You can learn about how to use the tool with `lotus index validate-backfill -h`. -Note: If you are using a non-standard Lotus repo directory then you can run the command with `lotus-shed -repo /path/to/lotus/repo chainindex validate-backfill ...`, or by setting the `LOTUS_REPO` environment variable. +Note: If you are using a non-standard Lotus repo directory then you can run the command with `lotus -repo /path/to/lotus/repo chainindex validate-backfill ...`, or by setting the `LOTUS_REPO` environment variable. ## Regular Checks @@ -252,8 +252,8 @@ current_date=$(date '+%Y-%m-%d %H:%M:%S') # not expect regular errors in the index. BACKFILL_OPTION=false -# Path to the lotus-shed binary -LOTUS_SHED_PATH="/path/to/lotus-shed" +# Path to the lotus binary +LOTUS_BIN_PATH="/path/to/lotus" # Get the current chain head epoch number start_epoch=$(lotus chain head --height) @@ -267,7 +267,7 @@ epochs_to_validate=3000 end_epoch=$((start_epoch - epochs_to_validate + 1)) # Run the Lotus chainindex validate-backfill command -validation_output=$("$LOTUS_SHED_PATH" chainindex validate-backfill --from="$start_epoch" --to="$end_epoch" --backfill="$BACKFILL_OPTION" --quiet 2>&1) +validation_output=$("$LOTUS_BIN_PATH" chainindex validate-backfill --from="$start_epoch" --to="$end_epoch" --backfill="$BACKFILL_OPTION" --quiet 2>&1) # Check the exit status of the command to determine if errors occurred if [ $? -ne 0 ]; then From 5858cb1ea3455878c4dc1fd976c35d6ba31bbdca Mon Sep 17 00:00:00 2001 From: "Masih H. Derkani" Date: Tue, 26 Nov 2024 10:49:43 +0000 Subject: [PATCH 6/9] Skip checking the initial power table CID if undefined (#12725) In Lotus F3 cli Only check the expected power table CID when it is present. --- cli/f3.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/f3.go b/cli/f3.go index 02874750711..6a8f7cce32e 100644 --- a/cli/f3.go +++ b/cli/f3.go @@ -162,7 +162,7 @@ var f3SubCmdPowerTable = &cli.Command{ if err != nil { return fmt.Errorf("gettingh power table CID at instance %d: %w", instance, err) } - if !expectedPowerTableCID.Equals(actualPowerTableCID) { + if !cid.Undef.Equals(expectedPowerTableCID) && !expectedPowerTableCID.Equals(actualPowerTableCID) { return fmt.Errorf("expected power table CID %s at instance %d, got: %s", expectedPowerTableCID, instance, actualPowerTableCID) } result.PowerTable.CID = actualPowerTableCID.String() @@ -247,7 +247,7 @@ var f3SubCmdPowerTable = &cli.Command{ if err != nil { return fmt.Errorf("gettingh power table CID at instance %d: %w", instance, err) } - if !expectedPowerTableCID.Equals(actualPowerTableCID) { + if !cid.Undef.Equals(expectedPowerTableCID) && !expectedPowerTableCID.Equals(actualPowerTableCID) { return fmt.Errorf("expected power table CID %s at instance %d, got: %s", expectedPowerTableCID, instance, actualPowerTableCID) } result.PowerTable.CID = actualPowerTableCID.String() From 30a69eb5b7d85906799187d2c2b50e5cc1ede902 Mon Sep 17 00:00:00 2001 From: ZenGround0 <5515260+ZenGround0@users.noreply.github.com> Date: Wed, 27 Nov 2024 00:03:55 -0500 Subject: [PATCH 7/9] fix(miner): fix scary verified power miscalculation upon extension (#12720) * Fix scary verified power calculation * Update changelog --------- Co-authored-by: zenground0 --- CHANGELOG.md | 3 ++- cmd/lotus-miner/sectors.go | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2401a17021..0c0db220d06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,6 @@ # Lotus changelog # UNRELEASED -- Improve eth filter performance for nodes serving many clients. ([filecoin-project/lotus#12603](https://github.com/filecoin-project/lotus/pull/12603)) # Node and Miner v1.31.0-rc1 / 2024-11-12 @@ -16,6 +15,7 @@ This Lotus release candidate introduces the new `ChainIndexer` subsystem, enhanc - Implement `EthGetTransactionByBlockNumberAndIndex` (`eth_getTransactionByBlockNumberAndIndex`) and `EthGetTransactionByBlockHashAndIndex` (`eth_getTransactionByBlockHashAndIndex`) methods. ([filecoin-project/lotus#12618](https://github.com/filecoin-project/lotus/pull/12618)) - `lotus-shed indexes inspect-indexes` now performs a comprehensive comparison of the event index data for each message by comparing the AMT root CID from the message receipt with the root of a reconstructed AMT. Previously `inspect-indexes` simply compared event counts. Comparing AMT roots instead confirms all the event data is byte-perfect. ([filecoin-project/lotus#12570](https://github.com/filecoin-project/lotus/pull/12570)) - Reduce size of embedded genesis CAR files by removing WASM actor blocks and compressing with zstd. This reduces the `lotus` binary size by approximately 10 MiB. ([filecoin-project/lotus#12439](https://github.com/filecoin-project/lotus/pull/12439)) +- Improve ETH-filter performance for nodes serving many clients. ([filecoin-project/lotus#12603](https://github.com/filecoin-project/lotus/pull/12603)) - Implement F3 utility CLIs to list the power table for a given instance and sum the proportional power of a set of actors that participate in a given instance. ([filecoin-project/lotus#12698](https://github.com/filecoin-project/lotus/pull/12698)) ## 🐛 Bug Fix Highlights @@ -25,6 +25,7 @@ This Lotus release candidate introduces the new `ChainIndexer` subsystem, enhanc - Make the ordering of event output for `eth_` APIs and `GetActorEventsRaw` consistent, sorting ascending on: epoch, message index, event index and original event entry order. ([filecoin-project/lotus#12623](https://github.com/filecoin-project/lotus/pull/12623)) - Event APIs (Eth events and actor events) should only return reverted events if client queries by specific block hash / tipset. Eth and actor event subscription APIs should always return reverted events to enable accurate observation of real-time changes. ([filecoin-project/lotus#12585](https://github.com/filecoin-project/lotus/pull/12585)) - Fix a bug in the `lotus-shed indexes backfill-events` command that may result in either duplicate events being backfilled where there are existing events (such an operation *should* be idempotent) or events erroneously having duplicate `logIndex` values when queried via ETH APIs. ([filecoin-project/lotus#12567](https://github.com/filecoin-project/lotus/pull/12567)) +- Correct erroneous sector QAP-calculation upon sector extension in lotus-miner cli. ([filecoin-project/lotus#12698](https://github.com/filecoin-project/lotus/pull/12720)) ## 📝 Changelog diff --git a/cmd/lotus-miner/sectors.go b/cmd/lotus-miner/sectors.go index 2ee4e9bf4a5..fa23e5f268f 100644 --- a/cmd/lotus-miner/sectors.go +++ b/cmd/lotus-miner/sectors.go @@ -220,9 +220,11 @@ var sectorsListCmd = &cli.Command{ if err != nil { return err } + powerBaseEpochs := make(map[abi.SectorNumber]abi.ChainEpoch, len(sset)) commitedIDs := make(map[abi.SectorNumber]struct{}, len(sset)) for _, info := range sset { commitedIDs[info.SectorNumber] = struct{}{} + powerBaseEpochs[info.SectorNumber] = info.PowerBaseEpoch } sort.Slice(list, func(i, j int) bool { @@ -290,7 +292,8 @@ var sectorsListCmd = &cli.Command{ estimate := (st.Expiration-st.Activation <= 0) || sealing.IsUpgradeState(sealing.SectorState(st.State)) if !estimate { rdw := big.Add(st.DealWeight, st.VerifiedDealWeight) - dw = float64(big.Div(rdw, big.NewInt(int64(st.Expiration-st.Activation))).Uint64()) + powerBaseEpoch := powerBaseEpochs[st.SectorID] + dw = float64(big.Div(rdw, big.NewInt(int64(st.Expiration-powerBaseEpoch))).Uint64()) vp = float64(big.Div(big.Mul(st.VerifiedDealWeight, big.NewInt(verifiedPowerGainMul)), big.NewInt(int64(st.Expiration-st.Activation))).Uint64()) } else { for _, piece := range st.Pieces { From e51b80364fc3d325a283e59b754f291faa3539a4 Mon Sep 17 00:00:00 2001 From: Phi-rjan Date: Wed, 27 Nov 2024 21:30:09 +0100 Subject: [PATCH 8/9] chore: bump libp2p deps (#12729) chore: bump libp2p deps --- .github/actions/install-go/action.yml | 2 +- go.mod | 75 ++++++------ go.sum | 160 +++++++++++++------------- 3 files changed, 116 insertions(+), 121 deletions(-) diff --git a/.github/actions/install-go/action.yml b/.github/actions/install-go/action.yml index 30be7d7f14a..1a28ac7922c 100644 --- a/.github/actions/install-go/action.yml +++ b/.github/actions/install-go/action.yml @@ -19,5 +19,5 @@ runs: working-directory: ${{ inputs.working-directory || github.workspace }} - uses: actions/setup-go@v5 with: - go-version: ${{ fromJSON(steps.go-mod.outputs.json).Go }}.x + go-version: ${{ fromJSON(steps.go-mod.outputs.json).Go }} cache: false diff --git a/go.mod b/go.mod index 42100a1f73a..188ecdab8dc 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/filecoin-project/lotus -go 1.22 +go 1.22.7 retract v1.14.0 // Accidentally force-pushed tag, use v1.14.1+ instead. @@ -34,7 +34,7 @@ require ( github.com/dustin/go-humanize v1.0.1 github.com/elastic/go-elasticsearch/v7 v7.14.0 github.com/elastic/go-sysinfo v1.7.0 - github.com/elastic/gosigar v0.14.2 + github.com/elastic/gosigar v0.14.3 github.com/etclabscore/go-openrpc-reflect v0.0.36 github.com/fatih/color v1.15.0 github.com/filecoin-project/filecoin-ffi v1.30.0 @@ -103,10 +103,10 @@ require ( github.com/jackc/pgerrcode v0.0.0-20240316143900-6e2875d9b438 github.com/jpillora/backoff v1.0.0 github.com/kelseyhightower/envconfig v1.4.0 - github.com/klauspost/compress v1.17.9 + github.com/klauspost/compress v1.17.11 github.com/koalacxr/quantile v0.0.1 github.com/libp2p/go-buffer-pool v0.1.0 - github.com/libp2p/go-libp2p v0.35.5 + github.com/libp2p/go-libp2p v0.37.2 github.com/libp2p/go-libp2p-kad-dht v0.25.2 github.com/libp2p/go-libp2p-pubsub v0.11.0 github.com/libp2p/go-libp2p-record v0.2.0 @@ -119,13 +119,13 @@ require ( github.com/mitchellh/go-homedir v1.1.0 github.com/multiformats/go-base32 v0.1.0 github.com/multiformats/go-multiaddr v0.13.0 - github.com/multiformats/go-multiaddr-dns v0.4.0 + github.com/multiformats/go-multiaddr-dns v0.4.1 github.com/multiformats/go-multicodec v0.9.0 github.com/multiformats/go-multihash v0.2.3 github.com/multiformats/go-varint v0.0.7 github.com/open-rpc/meta-schema v0.0.0-20201029221707-1b72ef2ea333 github.com/polydawn/refmt v0.89.0 - github.com/prometheus/client_golang v1.19.1 + github.com/prometheus/client_golang v1.20.5 github.com/puzpuzpuz/xsync/v2 v2.4.0 github.com/raulk/clock v1.1.0 github.com/raulk/go-watchdog v1.3.0 @@ -151,17 +151,17 @@ require ( go.opentelemetry.io/otel/metric v1.28.0 go.opentelemetry.io/otel/sdk v1.28.0 go.opentelemetry.io/otel/sdk/metric v1.28.0 - go.uber.org/fx v1.22.1 + go.uber.org/fx v1.23.0 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 - golang.org/x/crypto v0.28.0 - golang.org/x/mod v0.20.0 - golang.org/x/net v0.29.0 - golang.org/x/sync v0.8.0 - golang.org/x/sys v0.26.0 - golang.org/x/term v0.25.0 + golang.org/x/crypto v0.29.0 + golang.org/x/mod v0.21.0 + golang.org/x/net v0.30.0 + golang.org/x/sync v0.9.0 + golang.org/x/sys v0.27.0 + golang.org/x/term v0.26.0 golang.org/x/time v0.5.0 - golang.org/x/tools v0.24.0 + golang.org/x/tools v0.26.0 golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da gotest.tools v2.2.0+incompatible ) @@ -219,7 +219,7 @@ require ( github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/gopacket v1.1.19 // indirect - github.com/google/pprof v0.0.0-20240509144519-723abb6459b7 // indirect + github.com/google/pprof v0.0.0-20241017200806-017d972448fc // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/huin/goupnp v1.3.0 // indirect @@ -251,7 +251,7 @@ require ( github.com/klauspost/cpuid/v2 v2.2.8 // indirect github.com/koron/go-ssdp v0.0.4 // indirect github.com/libp2p/go-cidranger v1.1.0 // indirect - github.com/libp2p/go-flow-metrics v0.1.0 // indirect + github.com/libp2p/go-flow-metrics v0.2.0 // indirect github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect github.com/libp2p/go-libp2p-kbucket v0.6.3 // indirect github.com/libp2p/go-nat v0.2.0 // indirect @@ -264,7 +264,7 @@ require ( github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect - github.com/miekg/dns v1.1.59 // indirect + github.com/miekg/dns v1.1.62 // 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 @@ -274,40 +274,40 @@ require ( github.com/multiformats/go-base36 v0.2.0 // indirect github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect github.com/multiformats/go-multibase v0.2.0 // indirect - github.com/multiformats/go-multistream v0.5.0 // indirect + github.com/multiformats/go-multistream v0.6.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/nikkolasg/hexjson v0.1.0 // indirect github.com/nkovacs/streamquote v1.0.0 // indirect - github.com/onsi/ginkgo/v2 v2.17.3 // indirect + github.com/onsi/ginkgo/v2 v2.20.2 // indirect github.com/opencontainers/runtime-spec v1.2.0 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 // indirect - github.com/pion/datachannel v1.5.6 // indirect - github.com/pion/dtls/v2 v2.2.11 // indirect - github.com/pion/ice/v2 v2.3.25 // indirect - github.com/pion/interceptor v0.1.29 // indirect + github.com/pion/datachannel v1.5.9 // indirect + github.com/pion/dtls/v2 v2.2.12 // indirect + github.com/pion/ice/v2 v2.3.36 // indirect + github.com/pion/interceptor v0.1.37 // indirect github.com/pion/logging v0.2.2 // indirect github.com/pion/mdns v0.0.12 // indirect github.com/pion/randutil v0.1.0 // indirect github.com/pion/rtcp v1.2.14 // indirect - github.com/pion/rtp v1.8.6 // indirect - github.com/pion/sctp v1.8.16 // indirect + github.com/pion/rtp v1.8.9 // indirect + github.com/pion/sctp v1.8.33 // indirect github.com/pion/sdp/v3 v3.0.9 // indirect - github.com/pion/srtp/v2 v2.0.18 // indirect + github.com/pion/srtp/v2 v2.0.20 // indirect github.com/pion/stun v0.6.1 // indirect - github.com/pion/transport/v2 v2.2.5 // indirect + github.com/pion/transport/v2 v2.2.10 // indirect github.com/pion/turn/v2 v2.1.6 // indirect - github.com/pion/webrtc/v3 v3.2.40 // indirect + github.com/pion/webrtc/v3 v3.3.4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/common v0.60.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/prometheus/statsd_exporter v0.22.7 // indirect - github.com/quic-go/qpack v0.4.0 // indirect - github.com/quic-go/quic-go v0.44.0 // indirect - github.com/quic-go/webtransport-go v0.8.0 // indirect + github.com/quic-go/qpack v0.5.1 // indirect + github.com/quic-go/quic-go v0.48.2 // indirect + github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/shirou/gopsutil v2.18.12+incompatible // indirect @@ -318,6 +318,7 @@ require ( github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 // indirect github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect + github.com/wlynxg/anet v0.0.5 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 // indirect @@ -328,15 +329,15 @@ require ( go.dedis.ch/kyber/v4 v4.0.0-pre2.0.20240924132404-4de33740016e // indirect go.opentelemetry.io/otel/trace v1.28.0 // indirect go.uber.org/atomic v1.11.0 // indirect - go.uber.org/dig v1.17.1 // indirect - go.uber.org/mock v0.4.0 // indirect + go.uber.org/dig v1.18.0 // indirect + go.uber.org/mock v0.5.0 // indirect go4.org v0.0.0-20230225012048-214862532bf5 // indirect - golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e // indirect - golang.org/x/text v0.19.0 // indirect + golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect + golang.org/x/text v0.20.0 // indirect gonum.org/v1/gonum v0.15.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect google.golang.org/grpc v1.64.0 // indirect - google.golang.org/protobuf v1.34.2 // indirect + google.golang.org/protobuf v1.35.1 // indirect gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 0de1d7a9d05..981d53e5749 100644 --- a/go.sum +++ b/go.sum @@ -231,8 +231,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.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= -github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= +github.com/elastic/gosigar v0.14.3 h1:xwkKwPia+hSfg9GqrCUKYdId102m9qTJIIr7egmK/uo= +github.com/elastic/gosigar v0.14.3/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -487,8 +487,8 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20240509144519-723abb6459b7 h1:velgFPYr1X9TDwLIfkV7fWqsFlf7TeP11M/7kPd/dVI= -github.com/google/pprof v0.0.0-20240509144519-723abb6459b7/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/pprof v0.0.0-20241017200806-017d972448fc h1:NGyrhhFhwvRAZg02jnYVg3GBQy0qGBKmFQJwaPmpmxs= +github.com/google/pprof v0.0.0-20241017200806-017d972448fc/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -769,8 +769,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= -github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= @@ -794,6 +794,8 @@ github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= @@ -807,12 +809,12 @@ github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38y github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= github.com/libp2p/go-conn-security-multistream v0.1.0/go.mod h1:aw6eD7LOsHEX7+2hJkDxw1MteijaVcI+/eP2/x3J1xc= github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= -github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= -github.com/libp2p/go-flow-metrics v0.1.0/go.mod h1:4Xi8MX8wj5aWNDAZttg6UPmc0ZrnFNsMtpsYUClFtro= +github.com/libp2p/go-flow-metrics v0.2.0 h1:EIZzjmeOE6c8Dav0sNv35vhZxATIXWZg6j/C08XmmDw= +github.com/libp2p/go-flow-metrics v0.2.0/go.mod h1:st3qqfu8+pMfh+9Mzqb2GTiwrAGjIPszEjZmtksN8Jc= github.com/libp2p/go-libp2p v0.1.0/go.mod h1:6D/2OBauqLUoqcADOJpn9WbKqvaM07tDw68qHM0BxUM= github.com/libp2p/go-libp2p v0.1.1/go.mod h1:I00BRo1UuUSdpuc8Q2mN7yDF/oTUTRAX6JWpTiK9Rp8= -github.com/libp2p/go-libp2p v0.35.5 h1:uCA1pHDvoemISNAugfYhDYECDMftbVOjCCeMjFqlhaM= -github.com/libp2p/go-libp2p v0.35.5/go.mod h1:RKCDNt30IkFipGL0tl8wQW/3zVWEGFUZo8g2gAKxwjU= +github.com/libp2p/go-libp2p v0.37.2 h1:Irh+n9aDPTLt9wJYwtlHu6AhMUipbC1cGoJtOiBqI9c= +github.com/libp2p/go-libp2p v0.37.2/go.mod h1:M8CRRywYkqC6xKHdZ45hmqVckBj5z4mRLIMLWReypz8= github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94= github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8= github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8= @@ -919,8 +921,8 @@ github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= github.com/miekg/dns v1.1.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.59 h1:C9EXc/UToRwKLhK5wKU/I4QVsBUc8kE6MkHBkeypWZs= -github.com/miekg/dns v1.1.59/go.mod h1:nZpewl5p6IvctfgrckopVx2OlSEHPRO/U4SYkRklrEk= +github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ= +github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ= 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= @@ -969,8 +971,8 @@ github.com/multiformats/go-multiaddr v0.13.0 h1:BCBzs61E3AGHcYYTv8dqRH43ZfyrqM8R github.com/multiformats/go-multiaddr v0.13.0/go.mod h1:sBXrNzucqkFJhvKOiwwLyqamGa/P5EIXNPLovyhQCII= github.com/multiformats/go-multiaddr-dns v0.0.1/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= github.com/multiformats/go-multiaddr-dns v0.0.2/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= -github.com/multiformats/go-multiaddr-dns v0.4.0 h1:P76EJ3qzBXpUXZ3twdCDx/kvagMsNo0LMFXpyms/zgU= -github.com/multiformats/go-multiaddr-dns v0.4.0/go.mod h1:7hfthtB4E4pQwirrz+J0CcDUfbWzTqEzVyYKKIKpgkc= +github.com/multiformats/go-multiaddr-dns v0.4.1 h1:whi/uCLbDS3mSEUMb1MsoT4uzUeZB0N32yzufqS0i5M= +github.com/multiformats/go-multiaddr-dns v0.4.1/go.mod h1:7hfthtB4E4pQwirrz+J0CcDUfbWzTqEzVyYKKIKpgkc= github.com/multiformats/go-multiaddr-fmt v0.0.1/go.mod h1:aBYjqL4T/7j4Qx+R73XSv/8JsgnRFlf0w2KGLCmXl3Q= github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= @@ -992,8 +994,8 @@ github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJ github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= github.com/multiformats/go-multistream v0.1.0/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= -github.com/multiformats/go-multistream v0.5.0 h1:5htLSLl7lvJk3xx3qT/8Zm9J4K8vEOf/QGkvOGQAyiE= -github.com/multiformats/go-multistream v0.5.0/go.mod h1:n6tMZiwiP2wUsR8DgfDWw1dydlEqV3l6N3/GBsX6ILA= +github.com/multiformats/go-multistream v0.6.0 h1:ZaHKbsL404720283o4c/IHQXiS6gb8qAN5EIJ4PN5EA= +github.com/multiformats/go-multistream v0.6.0/go.mod h1:MOyoG5otO24cHIg8kf9QW2/NozURlkP/rvi2FQJyCPg= github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= @@ -1019,14 +1021,14 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108 github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= 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/ginkgo/v2 v2.17.3 h1:oJcvKpIb7/8uLpDDtnQuf18xVnwKp8DTD7DQ6gTd/MU= -github.com/onsi/ginkgo/v2 v2.17.3/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc= +github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4= +github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag= 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= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.33.0 h1:snPCflnZrpMsy94p4lXVEkHo12lmPnc3vY5XBbreexE= -github.com/onsi/gomega v1.33.0/go.mod h1:+925n5YtiFsLzzafLUHzVMBpvvRAzrydIBiSIxjX3wY= +github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= +github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= github.com/open-rpc/meta-schema v0.0.0-20201029221707-1b72ef2ea333 h1:CznVS40zms0Dj5he4ERo+fRPtO0qxUk8lA8Xu3ddet0= github.com/open-rpc/meta-schema v0.0.0-20201029221707-1b72ef2ea333/go.mod h1:Ag6rSXkHIckQmjFBCweJEEt1mrTPBv8b9W4aU/NQWfI= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= @@ -1046,15 +1048,15 @@ github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhM github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 h1:1/WtZae0yGtPq+TI6+Tv1WTxkukpXeMlviSxvL7SRgk= github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9/go.mod h1:x3N5drFsm2uilKKuuYo6LdyD8vZAW55sH/9w+pbo1sw= -github.com/pion/datachannel v1.5.6 h1:1IxKJntfSlYkpUj8LlYRSWpYiTTC02nUrOE8T3DqGeg= -github.com/pion/datachannel v1.5.6/go.mod h1:1eKT6Q85pRnr2mHiWHxJwO50SfZRtWHTsNIVb/NfGW4= +github.com/pion/datachannel v1.5.9 h1:LpIWAOYPyDrXtU+BW7X0Yt/vGtYxtXQ8ql7dFfYUVZA= +github.com/pion/datachannel v1.5.9/go.mod h1:kDUuk4CU4Uxp82NH4LQZbISULkX/HtzKa4P7ldf9izE= github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= -github.com/pion/dtls/v2 v2.2.11 h1:9U/dpCYl1ySttROPWJgqWKEylUdT0fXp/xst6JwY5Ks= -github.com/pion/dtls/v2 v2.2.11/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= -github.com/pion/ice/v2 v2.3.25 h1:M5rJA07dqhi3nobJIg+uPtcVjFECTrhcR3n0ns8kDZs= -github.com/pion/ice/v2 v2.3.25/go.mod h1:KXJJcZK7E8WzrBEYnV4UtqEZsGeWfHxsNqhVcVvgjxw= -github.com/pion/interceptor v0.1.29 h1:39fsnlP1U8gw2JzOFWdfCU82vHvhW9o0rZnZF56wF+M= -github.com/pion/interceptor v0.1.29/go.mod h1:ri+LGNjRUc5xUNtDEPzfdkmSqISixVTBF/z/Zms/6T4= +github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= +github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= +github.com/pion/ice/v2 v2.3.36 h1:SopeXiVbbcooUg2EIR8sq4b13RQ8gzrkkldOVg+bBsc= +github.com/pion/ice/v2 v2.3.36/go.mod h1:mBF7lnigdqgtB+YHkaY/Y6s6tsyRyo4u4rPGRuOjUBQ= +github.com/pion/interceptor v0.1.37 h1:aRA8Zpab/wE7/c0O3fh1PqY0AJI3fCSEM5lRWJVorwI= +github.com/pion/interceptor v0.1.37/go.mod h1:JzxbJ4umVTlZAf+/utHzNesY8tmRkM2lVmkS82TTj8Y= github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= github.com/pion/mdns v0.0.12 h1:CiMYlY+O0azojWDmxdNr7ADGrnZ+V6Ilfner+6mSVK8= @@ -1065,31 +1067,29 @@ github.com/pion/rtcp v1.2.12/go.mod h1:sn6qjxvnwyAkkPzPULIbVqSKI5Dv54Rv7VG0kNxh9 github.com/pion/rtcp v1.2.14 h1:KCkGV3vJ+4DAJmvP0vaQShsb0xkRfWkO540Gy102KyE= github.com/pion/rtcp v1.2.14/go.mod h1:sn6qjxvnwyAkkPzPULIbVqSKI5Dv54Rv7VG0kNxh9L4= github.com/pion/rtp v1.8.3/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU= -github.com/pion/rtp v1.8.6 h1:MTmn/b0aWWsAzux2AmP8WGllusBVw4NPYPVFFd7jUPw= -github.com/pion/rtp v1.8.6/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU= -github.com/pion/sctp v1.8.13/go.mod h1:YKSgO/bO/6aOMP9LCie1DuD7m+GamiK2yIiPM6vH+GA= -github.com/pion/sctp v1.8.16 h1:PKrMs+o9EMLRvFfXq59WFsC+V8mN1wnKzqrv+3D/gYY= -github.com/pion/sctp v1.8.16/go.mod h1:P6PbDVA++OJMrVNg2AL3XtYHV4uD6dvfyOovCgMs0PE= +github.com/pion/rtp v1.8.9 h1:E2HX740TZKaqdcPmf4pw6ZZuG8u5RlMMt+l3dxeu6Wk= +github.com/pion/rtp v1.8.9/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU= +github.com/pion/sctp v1.8.33 h1:dSE4wX6uTJBcNm8+YlMg7lw1wqyKHggsP5uKbdj+NZw= +github.com/pion/sctp v1.8.33/go.mod h1:beTnqSzewI53KWoG3nqB282oDMGrhNxBdb+JZnkCwRM= github.com/pion/sdp/v3 v3.0.9 h1:pX++dCHoHUwq43kuwf3PyJfHlwIj4hXA7Vrifiq0IJY= github.com/pion/sdp/v3 v3.0.9/go.mod h1:B5xmvENq5IXJimIO4zfp6LAe1fD9N+kFv+V/1lOdz8M= -github.com/pion/srtp/v2 v2.0.18 h1:vKpAXfawO9RtTRKZJbG4y0v1b11NZxQnxRl85kGuUlo= -github.com/pion/srtp/v2 v2.0.18/go.mod h1:0KJQjA99A6/a0DOVTu1PhDSw0CXF2jTkqOoMg3ODqdA= +github.com/pion/srtp/v2 v2.0.20 h1:HNNny4s+OUmG280ETrCdgFndp4ufx3/uy85EawYEhTk= +github.com/pion/srtp/v2 v2.0.20/go.mod h1:0KJQjA99A6/a0DOVTu1PhDSw0CXF2jTkqOoMg3ODqdA= github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8= github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g= -github.com/pion/transport/v2 v2.2.2/go.mod h1:OJg3ojoBJopjEeECq2yJdXH9YVrUJ1uQ++NjXLOUorc= github.com/pion/transport/v2 v2.2.3/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= github.com/pion/transport/v2 v2.2.4/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= -github.com/pion/transport/v2 v2.2.5 h1:iyi25i/21gQck4hfRhomF6SktmUQjRsRW4WJdhfc3Kc= -github.com/pion/transport/v2 v2.2.5/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= +github.com/pion/transport/v2 v2.2.10 h1:ucLBLE8nuxiHfvkFKnkDQRYWYfp8ejf4YBOPfaQpw6Q= +github.com/pion/transport/v2 v2.2.10/go.mod h1:sq1kSLWs+cHW9E+2fJP95QudkzbK7wscs8yYgQToO5E= github.com/pion/transport/v3 v3.0.1/go.mod h1:UY7kiITrlMv7/IKgd5eTUcaahZx5oUN3l9SzK5f5xE0= -github.com/pion/transport/v3 v3.0.2 h1:r+40RJR25S9w3jbA6/5uEPTzcdn7ncyU44RWCbHkLg4= -github.com/pion/transport/v3 v3.0.2/go.mod h1:nIToODoOlb5If2jF9y2Igfx3PFYWfuXi37m0IlWa/D0= +github.com/pion/transport/v3 v3.0.7 h1:iRbMH05BzSNwhILHoBoAPxoB9xQgOaJk+591KC9P1o0= +github.com/pion/transport/v3 v3.0.7/go.mod h1:YleKiTZ4vqNxVwh77Z0zytYi7rXHl7j6uPLGhhz9rwo= github.com/pion/turn/v2 v2.1.3/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= github.com/pion/turn/v2 v2.1.6 h1:Xr2niVsiPTB0FPtt+yAWKFUkU1eotQbGgpTIld4x1Gc= github.com/pion/turn/v2 v2.1.6/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= -github.com/pion/webrtc/v3 v3.2.40 h1:Wtfi6AZMQg+624cvCXUuSmrKWepSB7zfgYDOYqsSOVU= -github.com/pion/webrtc/v3 v3.2.40/go.mod h1:M1RAe3TNTD1tzyvqHrbVODfwdPGSXOUo/OgpoGGJqFY= +github.com/pion/webrtc/v3 v3.3.4 h1:v2heQVnXTSqNRXcaFQVOhIOYkLMxOu1iJG8uy1djvkk= +github.com/pion/webrtc/v3 v3.3.4/go.mod h1:liNa+E1iwyzyXqNUwvoMRNQ10x8h8FOeJKL8RkIbamE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -1111,8 +1111,8 @@ github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqr github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= -github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= -github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= +github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -1127,8 +1127,8 @@ github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9 github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= -github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= +github.com/prometheus/common v0.60.0 h1:+V9PAREWNvJMAuJ1x1BaWl9dewMW4YrHZQbx0sJNllA= +github.com/prometheus/common v0.60.0/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= 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= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1144,12 +1144,12 @@ github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI= github.com/puzpuzpuz/xsync/v2 v2.4.0 h1:5sXAMHrtx1bg9nbRZTOn8T4MkWe5V+o8yKRH02Eznag= github.com/puzpuzpuz/xsync/v2 v2.4.0/go.mod h1:gD2H2krq/w52MfPLE+Uy64TzJDVY7lP2znR9qmR35kU= -github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= -github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= -github.com/quic-go/quic-go v0.44.0 h1:So5wOr7jyO4vzL2sd8/pD9Kesciv91zSk8BoFngItQ0= -github.com/quic-go/quic-go v0.44.0/go.mod h1:z4cx/9Ny9UtGITIPzmPTXh1ULfOyWh4qGQlpnPcWmek= -github.com/quic-go/webtransport-go v0.8.0 h1:HxSrwun11U+LlmwpgM1kEqIqH90IT4N8auv/cD7QFJg= -github.com/quic-go/webtransport-go v0.8.0/go.mod h1:N99tjprW432Ut5ONql/aUhSLT0YVSlwHohQsuac9WaM= +github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= +github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= +github.com/quic-go/quic-go v0.48.2 h1:wsKXZPeGWpMpCGSWqOcqpW2wZYic/8T3aqiOID0/KWE= +github.com/quic-go/quic-go v0.48.2/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= +github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 h1:4WFk6u3sOT6pLa1kQ50ZVdm8BQFgJNA117cepZxtLIg= +github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66/go.mod h1:Vp72IJajgeOL6ddqrAhmp7IM9zbTcgkQxD/YdxrVwMw= github.com/raulk/clock v1.1.0 h1:dpb29+UKMbLqiU/jqIJptgLR1nn23HLgMY0sTCDza5Y= github.com/raulk/clock v1.1.0/go.mod h1:3MpVxdZ/ODBQDxbN+kzshf5OSZwPjtMDx6BBXBmOeY0= github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= @@ -1320,6 +1320,9 @@ github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1: github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc= github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw= +github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= +github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU= +github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= @@ -1391,15 +1394,15 @@ go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/dig v1.17.1 h1:Tga8Lz8PcYNsWsyHMZ1Vm0OQOUaJNDyvPImgbAu9YSc= -go.uber.org/dig v1.17.1/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= -go.uber.org/fx v1.22.1 h1:nvvln7mwyT5s1q201YE29V/BFrGor6vMiDNpU/78Mys= -go.uber.org/fx v1.22.1/go.mod h1:HT2M7d7RHo+ebKGh9NRcrsrHHfpZ60nW3QRubMRfv48= +go.uber.org/dig v1.18.0 h1:imUL1UiY0Mg4bqbFfsRQO5G4CGRBec/ZujWTvSVp3pw= +go.uber.org/dig v1.18.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= +go.uber.org/fx v1.23.0 h1:lIr/gYWQGfTwGcSXWXu4vP5Ws6iqnNEIY+F/aFzCKTg= +go.uber.org/fx v1.23.0/go.mod h1:o/D9n+2mLP6v1EG+qsdT1O8wKopYAsqZasju97SDFCU= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= -go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= +go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= +go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= @@ -1445,10 +1448,8 @@ golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1459,8 +1460,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e h1:I88y4caeGeuDQxgdoFPUq097j7kNfw6uvuiNxUBfcBk= -golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= +golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= +golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1485,8 +1486,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= -golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= 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= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1542,13 +1543,10 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= -golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= 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= @@ -1663,10 +1661,8 @@ golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -1678,10 +1674,8 @@ golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= -golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= +golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= +golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= 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= @@ -1758,8 +1752,8 @@ golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= -golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= +golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= +golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= 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= @@ -1866,8 +1860,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= +google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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 ca0a31e32ab8cafb09678fcc7d342e8aee2f36c9 Mon Sep 17 00:00:00 2001 From: Phi Date: Thu, 28 Nov 2024 09:20:42 +0100 Subject: [PATCH 9/9] chore: go mod tidy chore: go mod tidy --- go.sum | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/go.sum b/go.sum index 981d53e5749..f5a7d86a1ae 100644 --- a/go.sum +++ b/go.sum @@ -1571,8 +1571,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180202135801-37707fdb30a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1689,8 +1689,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=