diff --git a/.gitignore b/.gitignore index bc34f13..18c9491 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ data sequoia *.txt *.json +~ +.DS_Store \ No newline at end of file diff --git a/api/client.go b/api/client.go index 5b84218..dcb22b0 100644 --- a/api/client.go +++ b/api/client.go @@ -11,10 +11,8 @@ import ( "github.com/rs/zerolog/log" ) -func SpaceHandler(c *client.Client, address string) func(http.ResponseWriter, *http.Request) { +func SpaceHandler(c *client.Client, queryClient storageTypes.QueryClient, address string) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, req *http.Request) { - queryClient := storageTypes.NewQueryClient(c.GRPCConn) - params := &storageTypes.QueryProvider{ Address: address, } diff --git a/api/file_handler.go b/api/file_handler.go index 1a58c13..4b201fa 100644 --- a/api/file_handler.go +++ b/api/file_handler.go @@ -48,7 +48,7 @@ func handleErr(err error, w http.ResponseWriter, code int) { } } -func PostFileHandler(fio *file_system.FileSystem, prover *proofs.Prover, wl *wallet.Wallet, chunkSize int64) func(http.ResponseWriter, *http.Request) { +func PostFileHandler(fio *file_system.FileSystem, prover *proofs.Prover, wl *wallet.Wallet, query storageTypes.QueryClient, chunkSize int64) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, req *http.Request) { err := req.ParseMultipartForm(MaxFileSize) // MAX file size lives here if err != nil { @@ -96,13 +96,12 @@ func PostFileHandler(fio *file_system.FileSystem, prover *proofs.Prover, wl *wal return } - cl := storageTypes.NewQueryClient(wl.Client.GRPCConn) queryParams := storageTypes.QueryFile{ Merkle: merkle, Owner: sender, Start: startBlock, } - res, err := cl.File(context.Background(), &queryParams) + res, err := query.File(context.Background(), &queryParams) if err != nil { handleErr(fmt.Errorf("failed to find file on chain with merkle: %x, owner: %s, start: %d | %w", merkle, sender, startBlock, err), w, http.StatusInternalServerError) return @@ -154,7 +153,7 @@ func PostFileHandler(fio *file_system.FileSystem, prover *proofs.Prover, wl *wal } } -func PostFileHandlerV2(fio *file_system.FileSystem, prover *proofs.Prover, wl *wallet.Wallet, chunkSize int64) func(http.ResponseWriter, *http.Request) { +func PostFileHandlerV2(fio *file_system.FileSystem, prover *proofs.Prover, wl *wallet.Wallet, queryClient storageTypes.QueryClient, chunkSize int64) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, req *http.Request) { err := req.ParseMultipartForm(MaxFileSize) // MAX file size lives here if err != nil { @@ -227,13 +226,12 @@ func PostFileHandlerV2(fio *file_system.FileSystem, prover *proofs.Prover, wl *w log.Error().Err(fmt.Errorf("can't encode json : %w", err)) } - cl := storageTypes.NewQueryClient(wl.Client.GRPCConn) queryParams := storageTypes.QueryFile{ Merkle: merkle, Owner: sender, Start: startBlock, } - res, err := cl.File(context.Background(), &queryParams) + res, err := queryClient.File(context.Background(), &queryParams) if err != nil { log.Error().Err(fmt.Errorf("failed to find file on chain with merkle: %x, owner: %s, start: %d | %w", merkle, sender, startBlock, err)) return diff --git a/api/server.go b/api/server.go index c86a23f..cbeb0dd 100644 --- a/api/server.go +++ b/api/server.go @@ -13,6 +13,7 @@ import ( "github.com/rs/cors" "github.com/JackalLabs/sequoia/file_system" + storageTypes "github.com/jackalLabs/canine-chain/v4/x/storage/types" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/JackalLabs/sequoia/proofs" @@ -47,7 +48,7 @@ func (a *API) Close() error { return a.srv.Close() } -func (a *API) Serve(f *file_system.FileSystem, p *proofs.Prover, wallet *wallet.Wallet, chunkSize int64, myIp string) { +func (a *API) Serve(f *file_system.FileSystem, p *proofs.Prover, wallet *wallet.Wallet, queryClient storageTypes.QueryClient, myIp string, chunkSize int64) { defer log.Info().Msg("API module stopped") r := mux.NewRouter() @@ -55,8 +56,8 @@ func (a *API) Serve(f *file_system.FileSystem, p *proofs.Prover, wallet *wallet. outline.RegisterGetRoute(r, "/", IndexHandler(wallet.AccAddress())) - outline.RegisterPostRoute(r, "/upload", PostFileHandler(f, p, wallet, chunkSize)) - outline.RegisterPostRoute(r, "/v2/upload", PostFileHandlerV2(f, p, wallet, chunkSize)) + outline.RegisterPostRoute(r, "/upload", PostFileHandler(f, p, wallet, queryClient, chunkSize)) + outline.RegisterPostRoute(r, "/v2/upload", PostFileHandlerV2(f, p, wallet, queryClient, chunkSize)) outline.RegisterPostRoute(r, "/v2/status/{id}", CheckUploadStatus()) outline.RegisterPostRoute(r, "/api/jobs", ListJobsHandler()) outline.RegisterGetRoute(r, "/download/{merkle}", DownloadFileHandler(f)) @@ -69,7 +70,7 @@ func (a *API) Serve(f *file_system.FileSystem, p *proofs.Prover, wallet *wallet. outline.RegisterGetRoute(r, "/list", ListFilesHandler(f)) outline.RegisterGetRoute(r, "/api/client/list", ListFilesHandler(f)) outline.RegisterGetRoute(r, "/api/data/fids", LegacyListFilesHandler(f)) - outline.RegisterGetRoute(r, "/api/client/space", SpaceHandler(wallet.Client, wallet.AccAddress())) + outline.RegisterGetRoute(r, "/api/client/space", SpaceHandler(wallet.Client, queryClient, wallet.AccAddress())) outline.RegisterGetRoute(r, "/ipfs/peers", IPFSListPeers(f)) outline.RegisterGetRoute(r, "/ipfs/hosts", IPFSListHosts(f)) @@ -99,11 +100,18 @@ func (a *API) Serve(f *file_system.FileSystem, p *proofs.Prover, wallet *wallet. } log.Logger.Info().Msg(fmt.Sprintf("Sequoia API now listening on %s", a.srv.Addr)) - err := a.srv.ListenAndServe() - if err != nil { - if !errors.Is(err, http.ErrServerClosed) { - log.Warn().Err(err) - return - } + + // Create a channel to listen for errors coming from the listener. + serverErrors := make(chan error, 1) + + go func() { + serverErrors <- a.srv.ListenAndServe() + }() + + // Wait for server error + err := <-serverErrors + if err != nil && !errors.Is(err, http.ErrServerClosed) { + log.Warn().Err(err).Msg("server error") + return } } diff --git a/cmd/start.go b/cmd/start.go index a2869b1..3ed523f 100644 --- a/cmd/start.go +++ b/cmd/start.go @@ -45,7 +45,13 @@ func StartCmd() *cobra.Command { log.Logger = log.Level(zerolog.ErrorLevel) } - app, err := core.NewApp(home) + var opts []core.Option + + if cmd.Flags().Changed("test_mode") { + opts = append(opts, core.WithTestMode()) + } + + app, err := core.NewApp(home, opts...) if err != nil { return err } @@ -61,5 +67,7 @@ func StartCmd() *cobra.Command { }, } + cmd.Flags().Bool("test_mode", false, "run provider without chain network") + return cmd } diff --git a/config/types.go b/config/types.go index 5235cde..7266cfd 100644 --- a/config/types.go +++ b/config/types.go @@ -23,8 +23,8 @@ type ChainConfig struct { } type Config struct { - QueueInterval int64 `yaml:"queue_interval" mapstructure:"queue_interval"` ProofInterval int64 `yaml:"proof_interval" mapstructure:"proof_interval"` + QueueConfig QueueConfig `yaml:"queue_config" mapstructure:"queue_config"` StrayManagerCfg StrayManagerConfig `yaml:"stray_manager" mapstructure:"stray_manager"` ChainCfg ChainConfig `yaml:"chain_config" mapstructure:"chain_config"` Ip string `yaml:"domain" mapstructure:"domain"` @@ -35,10 +35,6 @@ type Config struct { BlockStoreConfig BlockStoreConfig `yaml:"block_store_config" mapstructure:"block_store_config"` } -func DefaultQueueInterval() int64 { - return 10 -} - func DefaultProofInterval() int64 { return 120 } @@ -113,7 +109,7 @@ func DefaultBlockStoreConfig() BlockStoreConfig { if err != nil { panic(err) } - k, err := priv.Raw() + k, err := crypto.MarshalPrivateKey(priv) if err != nil { panic(err) } @@ -144,10 +140,32 @@ func DefaultChainConfig() ChainConfig { } } +type QueueConfig struct { + // seconds + QueueInterval int64 `yaml:"queue_interval" mapstructure:"queue_interval"` + // seconds + TxTimer int16 `yaml:"tx_timer" mapstructure:"tx_timer"` + QueueThreads int8 `yaml:"queue_threads" mapstructure:"queue_threads"` + // resend tx if network isn't responding + MaxRetryAttempt int8 `yaml:"max_retry_attempt" mapstructure:"max_retry_attempt"` + // group individual messages into one tx + TxBatchSize int8 `yaml:"tx_batch_size" mapstructure:"tx_batch_size"` +} + +func DefaultQueueConfig() QueueConfig { + return QueueConfig{ + QueueInterval: 10, + QueueThreads: 5, + MaxRetryAttempt: 100, + TxBatchSize: 45, + TxTimer: 3, + } +} + func DefaultConfig() *Config { return &Config{ - QueueInterval: DefaultQueueInterval(), ProofInterval: DefaultProofInterval(), + QueueConfig: DefaultQueueConfig(), StrayManagerCfg: DefaultStrayManagerConfig(), ChainCfg: DefaultChainConfig(), Ip: DefaultIP(), @@ -160,8 +178,7 @@ func DefaultConfig() *Config { } func (c Config) MarshalZerologObject(e *zerolog.Event) { - e.Int64("QueueInterval", c.QueueInterval). - Int64("ProofInterval", c.ProofInterval). + e.Int64("ProofInterval", c.ProofInterval). Int64("StrayCheckInterval", c.StrayManagerCfg.CheckInterval). Int64("StrayRefreshInterval", c.StrayManagerCfg.RefreshInterval). Int("StrayHandCount", c.StrayManagerCfg.HandCount). @@ -180,7 +197,7 @@ func (c Config) MarshalZerologObject(e *zerolog.Event) { } func init() { - viper.SetDefault("QueueInterval", DefaultQueueInterval()) + viper.SetDefault("QueueConfig", DefaultQueueConfig()) viper.SetDefault("ProofInterval", DefaultProofInterval()) viper.SetDefault("StrayManagerCfg", DefaultStrayManagerConfig()) viper.SetDefault("ChainCfg", DefaultChainConfig()) diff --git a/core/app.go b/core/app.go index 93768dd..f36369b 100644 --- a/core/app.go +++ b/core/app.go @@ -3,6 +3,7 @@ package core import ( "context" "encoding/json" + "errors" "fmt" "net/http" "net/url" @@ -10,13 +11,17 @@ import ( "os/signal" "path" "regexp" + "slices" "strconv" "strings" "syscall" "time" apiTypes "github.com/JackalLabs/sequoia/api/types" + "github.com/JackalLabs/sequoia/testutil" "github.com/libp2p/go-libp2p/core/peer" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" "github.com/JackalLabs/sequoia/file_system" "github.com/JackalLabs/sequoia/ipfs" @@ -24,36 +29,50 @@ import ( "github.com/JackalLabs/sequoia/monitoring" - "github.com/cosmos/gogoproto/grpc" - "github.com/JackalLabs/sequoia/api" "github.com/JackalLabs/sequoia/config" "github.com/JackalLabs/sequoia/logger" "github.com/JackalLabs/sequoia/proofs" "github.com/JackalLabs/sequoia/queue" "github.com/JackalLabs/sequoia/strays" + sequoiaWallet "github.com/JackalLabs/sequoia/wallet" walletTypes "github.com/desmos-labs/cosmos-go-wallet/types" "github.com/desmos-labs/cosmos-go-wallet/wallet" badger "github.com/dgraph-io/badger/v4" storageTypes "github.com/jackalLabs/canine-chain/v4/x/storage/types" "github.com/rs/zerolog/log" + + "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/feegrant" ) type App struct { api *api.API - q *queue.Queue + q queue.Queue prover *proofs.Prover strayManager *strays.StrayManager home string monitor *monitoring.Monitor fileSystem *file_system.FileSystem wallet *wallet.Wallet + queryClient storageTypes.QueryClient +} + +type Option func(*App) + +func WithTestMode() Option { + return func(app *App) { + app.queryClient = testutil.NewFakeStorageQueryClient() + app.wallet.Client.AuthClient = testutil.NewFakeAuthQueryClient(app.wallet) + app.wallet.Client.RPCClient = testutil.NewFakeRPCClient() + app.wallet.Client.TxClient = testutil.NewFakeServiceClient() + } } // NewApp initializes and returns a new App instance using the provided home directory. // It sets up configuration, data directories, database, IPFS datastore and blockstore, API server, wallet, and file system. // Returns the initialized App or an error if any component fails to initialize. -func NewApp(home string) (*App, error) { +func NewApp(home string, opts ...Option) (*App, error) { cfg, err := config.Init(home) if err != nil { return nil, err @@ -108,12 +127,22 @@ func NewApp(home string) (*App, error) { if err != nil { return nil, err } - return &App{ - fileSystem: f, - api: apiServer, - home: home, - wallet: w, - }, nil + + queryClient := storageTypes.NewQueryClient(w.Client.GRPCConn) + + app := &App{ + fileSystem: f, + api: apiServer, + home: home, + wallet: w, + queryClient: queryClient, + } + + for _, opt := range opts { + opt(app) + } + + return app, nil } func initProviderOnChain(wallet *wallet.Wallet, ip string, totalSpace int64) error { @@ -182,12 +211,10 @@ func updateIp(wallet *wallet.Wallet, ip string) error { return nil } -func (a *App) GetStorageParams(client grpc.ClientConn) (storageTypes.Params, error) { +func (a *App) GetStorageParams(queryClient storageTypes.QueryClient) (storageTypes.Params, error) { queryParams := &storageTypes.QueryParams{} - cl := storageTypes.NewQueryClient(client) - - res, err := cl.Params(context.Background(), queryParams) + res, err := queryClient.Params(context.Background(), queryParams) if err != nil { return storageTypes.Params{}, err } @@ -208,61 +235,93 @@ func (a *App) Start() error { Address: myAddress, } - cl := storageTypes.NewQueryClient(a.wallet.Client.GRPCConn) + offsetWalletCount := cfg.QueueConfig.QueueThreads + int8(cfg.StrayManagerCfg.HandCount) + offsetWallets, err := sequoiaWallet.CreateOffsetWallets(a.wallet, int(offsetWalletCount)) + if err != nil { + return err + } + + res, err := a.queryClient.Provider(context.Background(), queryParams) + if code := status.Code(err); code == codes.NotFound { + log.Info().Err(err).Msg("Provider does not exist on network") + log.Info(). + Str("address", myAddress). + Str("ip", cfg.Ip). + Int64("total_space", cfg.TotalSpace). + Msg("attempting to register provider on network") + return initProviderOnChain(a.wallet, cfg.Ip, cfg.TotalSpace) + } else if err != nil { + log.Info().Err(err).Msg("Network is unreachable...") + return err + } - claimers := make([]string, 0) + log.Debug(). + Str("address", res.Provider.Address). + Str("ip", res.Provider.Ip). + Str("totalspace", res.Provider.Totalspace). + Str("burned_contracts", res.Provider.BurnedContracts). + Str("keybase_identity", res.Provider.KeybaseIdentity). + Msg("provider query result") - res, err := cl.Provider(context.Background(), queryParams) + totalSpace, err := strconv.ParseInt(res.Provider.Totalspace, 10, 64) if err != nil { - log.Info().Err(err).Msg("Provider does not exist on network or is not connected...") - err := initProviderOnChain(a.wallet, cfg.Ip, cfg.TotalSpace) + return err + } + if totalSpace != cfg.TotalSpace { + err := updateSpace(a.wallet, cfg.TotalSpace) if err != nil { return err } - } else { - log.Debug(). - Str("address", res.Provider.Address). - Str("ip", res.Provider.Ip). - Str("totalspace", res.Provider.Totalspace). - Str("burned_contracts", res.Provider.BurnedContracts). - Str("keybase_identity", res.Provider.KeybaseIdentity). - Msg("provider query result") - claimers = res.Provider.AuthClaimers - - totalSpace, err := strconv.ParseInt(res.Provider.Totalspace, 10, 64) + } + if res.Provider.Ip != cfg.Ip { + err := updateIp(a.wallet, cfg.Ip) if err != nil { return err } - if totalSpace != cfg.TotalSpace { - err := updateSpace(a.wallet, cfg.TotalSpace) - if err != nil { - return err - } - } - if res.Provider.Ip != cfg.Ip { - err := updateIp(a.wallet, cfg.Ip) + } + for _, w := range offsetWallets { + if !slices.Contains(res.Provider.AuthClaimers, w.AccAddress()) { + err = a.authorizeClaimer(w) if err != nil { return err } } } - params, err := a.GetStorageParams(a.wallet.Client.GRPCConn) + params, err := a.GetStorageParams(a.queryClient) + if err != nil { + return err + } + + queueWallets := offsetWallets[:cfg.QueueConfig.QueueThreads] + a.q, err = queue.NewPool(a.wallet, a.queryClient, queueWallets, cfg.QueueConfig) if err != nil { + log.Error().Err(err).Msg("failed to initialize Queue module") return err } - a.q = queue.NewQueue(a.wallet, cfg.QueueInterval) go a.q.Listen() - prover := proofs.NewProver(a.wallet, a.q, a.fileSystem, cfg.ProofInterval, cfg.ProofThreads, int(params.ChunkSize)) + prover := proofs.NewProver(a.wallet, a.queryClient, a.q, a.fileSystem, cfg.ProofInterval, cfg.ProofThreads, int(params.ChunkSize)) myUrl := cfg.Ip log.Info().Msg(fmt.Sprintf("Provider started as: %s", myAddress)) a.prover = prover - a.strayManager = strays.NewStrayManager(a.wallet, a.q, cfg.StrayManagerCfg.CheckInterval, cfg.StrayManagerCfg.RefreshInterval, cfg.StrayManagerCfg.HandCount, claimers) + handWallets := offsetWallets[cfg.QueueConfig.QueueThreads:] + strayManager, err := strays.NewStrayManager( + a.wallet, + a.queryClient, + a.q, + cfg.StrayManagerCfg.CheckInterval, + cfg.StrayManagerCfg.RefreshInterval, + handWallets) + if err != nil { + return err + } + a.strayManager = strayManager + a.monitor = monitoring.NewMonitor(a.wallet) // Starting the 4 concurrent services @@ -270,9 +329,10 @@ func (a *App) Start() error { // nolint:all go a.ConnectPeers() } - go a.api.Serve(a.fileSystem, a.prover, a.wallet, params.ChunkSize, myUrl) + go a.api.Serve(a.fileSystem, a.prover, a.wallet, a.queryClient, myUrl, params.ChunkSize) go a.prover.Start() - go a.strayManager.Start(a.fileSystem, a.q, myUrl, params.ChunkSize) + go a.strayManager.Start(a.fileSystem, a.queryClient, a.q, myUrl, params.ChunkSize) + go a.monitor.Start() done := make(chan os.Signal, 1) @@ -295,19 +355,51 @@ func (a *App) Start() error { return nil } +func (a *App) authorizeClaimer(claimer *wallet.Wallet) error { + allowance := feegrant.BasicAllowance{ + SpendLimit: nil, + Expiration: nil, + } + + wadd, err := types.AccAddressFromBech32(a.wallet.AccAddress()) + if err != nil { + return err + } + + hadd, err := types.AccAddressFromBech32(claimer.AccAddress()) + if err != nil { + return err + } + + grantMsg, nerr := feegrant.NewMsgGrantAllowance(&allowance, wadd, hadd) + if nerr != nil { + return err + } + msg := storageTypes.NewMsgAddClaimer(a.wallet.AccAddress(), claimer.AccAddress()) + txData := walletTypes.NewTransactionData(msg, grantMsg).WithFeeAuto().WithGasAuto() + + res, err := a.wallet.BroadcastTxCommit(txData) + if err != nil { + return errors.Join(errors.New("unable to broadcast MsgAddClaimer"), err) + } + + log.Info().Str("claimer", claimer.AccAddress()).Type("msg_type", msg).Str("tx_hash", res.TxHash).Msg("added new claimer") + + return nil +} + func (a *App) ConnectPeers() { log.Info().Msg("Starting IPFS Peering cycle...") ctx := context.Background() - queryClient := storageTypes.NewQueryClient(a.wallet.Client.GRPCConn) - activeProviders, err := queryClient.ActiveProviders(ctx, &storageTypes.QueryActiveProviders{}) + activeProviders, err := a.queryClient.ActiveProviders(ctx, &storageTypes.QueryActiveProviders{}) if err != nil { log.Warn().Msg("Cannot get active provider list. Won't try IPFS Peers.") return } for _, provider := range activeProviders.Providers { - providerDetails, err := queryClient.Provider(ctx, &storageTypes.QueryProvider{ + providerDetails, err := a.queryClient.Provider(ctx, &storageTypes.QueryProvider{ Address: provider.Address, }) if err != nil { diff --git a/file_system/file_system.go b/file_system/file_system.go index bd3534e..120fc10 100644 --- a/file_system/file_system.go +++ b/file_system/file_system.go @@ -551,11 +551,10 @@ func (f *FileSystem) GetFileData(merkle []byte) ([]byte, error) { return err } - _ = b.Value(func(val []byte) error { + return b.Value(func(val []byte) error { fcid = string(val) return nil }) - return nil }) if err != nil { return nil, fmt.Errorf("cannot get cid mapping from disk: %w", err) @@ -586,12 +585,16 @@ func (f *FileSystem) GetFileData(merkle []byte) ([]byte, error) { return nil, fmt.Errorf("cannot get file for cid '%s': %w", c.String(), err) } - //nolint:errcheck - defer rsc.Close() + defer func() { + if err := rsc.Close(); err != nil { + log.Error().Err(err).Msg("error closing file resource") + } + }() + fileData, err := io.ReadAll(rsc) if err != nil { return nil, err } - return fileData, err + return fileData, nil } diff --git a/go.mod b/go.mod index e5800f1..e90de7c 100644 --- a/go.mod +++ b/go.mod @@ -1,15 +1,15 @@ module github.com/JackalLabs/sequoia -go 1.22.2 +go 1.23.5 -toolchain go1.22.5 +toolchain go1.24.0 require ( github.com/cosmos/cosmos-sdk v0.45.17 github.com/cosmos/go-bip39 v1.0.0 - github.com/cosmos/gogoproto v1.4.12 + github.com/cosmos/gogoproto v1.7.0 github.com/desmos-labs/cosmos-go-wallet v0.7.2 - github.com/dgraph-io/badger/v4 v4.2.0 + github.com/dgraph-io/badger/v4 v4.5.1 github.com/gorilla/mux v1.8.1 github.com/hsanjuan/ipfs-lite v1.8.2 github.com/ipfs/boxo v0.17.0 @@ -22,15 +22,15 @@ require ( github.com/json-iterator/go v1.1.12 github.com/libp2p/go-libp2p v0.32.2 github.com/multiformats/go-multiaddr v0.12.3 - github.com/prometheus/client_golang v1.18.0 - github.com/rs/cors v1.11.0 + github.com/prometheus/client_golang v1.20.5 + github.com/rs/cors v1.11.1 github.com/rs/zerolog v1.33.0 - github.com/spf13/cobra v1.8.0 - github.com/spf13/viper v1.16.0 - github.com/stretchr/testify v1.9.0 + github.com/spf13/cobra v1.8.1 + github.com/spf13/viper v1.19.0 + github.com/stretchr/testify v1.10.0 github.com/tendermint/tendermint v0.34.27 github.com/wealdtech/go-merkletree/v2 v2.6.0 - google.golang.org/grpc v1.61.1 + google.golang.org/grpc v1.70.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -41,12 +41,14 @@ require ( filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect + github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect github.com/CosmWasm/wasmd v0.32.0 // indirect github.com/CosmWasm/wasmvm v1.2.6 // indirect github.com/DataDog/zstd v1.5.2 // indirect github.com/Jorropo/jsync v1.0.1 // indirect github.com/Workiva/go-datastructures v1.0.53 // indirect + github.com/adlio/schema v1.3.6 // indirect github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 // indirect github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 // indirect github.com/andybalholm/brotli v1.2.0 // indirect @@ -55,16 +57,19 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect + github.com/btcsuite/btcd/btcutil v1.1.6 // indirect + github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cockroachdb/errors v1.9.1 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cockroachdb/errors v1.11.3 // indirect + github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 // indirect - github.com/cockroachdb/redact v1.1.3 // indirect + github.com/cockroachdb/pebble v1.1.2 // indirect + github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect - github.com/cometbft/cometbft-db v0.7.0 // indirect + github.com/cometbft/cometbft-db v1.0.1 // indirect github.com/confio/ics23/go v0.9.1 // indirect github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect @@ -80,12 +85,13 @@ require ( github.com/creachadair/taskgroup v0.3.2 // indirect github.com/cskr/pubsub v1.0.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect - github.com/dgraph-io/ristretto v0.1.1 // indirect + github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91 // indirect + github.com/dgraph-io/ristretto/v2 v2.1.0 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect github.com/docker/go-units v0.5.0 // indirect @@ -94,35 +100,35 @@ require ( github.com/ecies/go/v2 v2.0.6 // indirect github.com/elastic/gosigar v0.14.2 // indirect github.com/ethereum/go-ethereum v1.13.15 // indirect - github.com/felixge/httpsnoop v1.0.2 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect github.com/flynn/noise v1.0.1 // indirect github.com/francoispqt/gojay v1.2.13 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/getsentry/sentry-go v0.18.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/getsentry/sentry-go v0.27.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.5.1 // indirect - github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gogo/gateway v1.1.0 // indirect github.com/gogo/protobuf v1.3.3 // indirect - github.com/golang/glog v1.1.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/mock v1.6.0 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect - github.com/google/btree v1.1.2 // indirect - github.com/google/flatbuffers v1.12.1 // indirect + github.com/google/btree v1.1.3 // indirect + github.com/google/flatbuffers v24.12.23+incompatible // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/gopacket v1.1.19 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/pprof v0.0.0-20231229205709-960ae82b1e42 // indirect - github.com/google/uuid v1.5.0 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect - github.com/gorilla/websocket v1.5.0 // indirect + github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect @@ -157,12 +163,12 @@ require ( github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect github.com/jbenet/goprocess v0.1.4 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.17.4 // indirect + github.com/klauspost/compress v1.17.11 // indirect github.com/klauspost/cpuid/v2 v2.2.6 // indirect github.com/koron/go-ssdp v0.0.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect - github.com/lib/pq v1.10.7 // indirect + github.com/lib/pq v1.10.9 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-cidranger v1.1.0 // indirect github.com/libp2p/go-flow-metrics v0.1.0 // indirect @@ -176,17 +182,16 @@ require ( github.com/libp2p/go-netroute v0.2.1 // indirect github.com/libp2p/go-reuseport v0.4.0 // indirect github.com/libp2p/go-yamux/v4 v4.0.1 // indirect - github.com/linxGnu/grocksdb v1.7.10 // indirect + github.com/linxGnu/grocksdb v1.9.3 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/miekg/dns v1.1.57 // indirect github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect - github.com/minio/highwayhash v1.0.2 // indirect + github.com/minio/highwayhash v1.0.3 // indirect github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -202,19 +207,21 @@ require ( github.com/multiformats/go-multihash v0.2.3 // indirect github.com/multiformats/go-multistream v0.5.0 // indirect github.com/multiformats/go-varint v0.0.7 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/onsi/ginkgo/v2 v2.13.2 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.1.0-rc5 // indirect github.com/opencontainers/runtime-spec v1.1.0 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect - github.com/pelletier/go-toml/v2 v2.0.8 // indirect - github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect + github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/polydawn/refmt v0.89.0 // indirect - github.com/prometheus/client_model v0.5.0 // indirect - github.com/prometheus/common v0.45.0 // indirect - github.com/prometheus/procfs v0.12.0 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.62.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect github.com/quic-go/qpack v0.4.0 // indirect github.com/quic-go/qtls-go1-20 v0.4.1 // indirect github.com/quic-go/quic-go v0.40.1 // indirect @@ -223,17 +230,18 @@ require ( github.com/raulk/go-watchdog v1.3.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/regen-network/cosmos-proto v0.3.1 // indirect - github.com/rogpeppe/go-internal v1.11.0 // indirect - github.com/sasha-s/go-deadlock v0.3.1 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect + github.com/sagikazarmark/locafero v0.4.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/sasha-s/go-deadlock v0.3.5 // indirect github.com/sirupsen/logrus v1.9.3 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/spf13/afero v1.9.5 // indirect - github.com/spf13/cast v1.5.1 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.6.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/subosito/gotenv v1.4.2 // indirect + github.com/subosito/gotenv v1.6.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tendermint/tm-db v0.6.7 // indirect github.com/tidwall/btree v1.5.0 // indirect @@ -241,30 +249,30 @@ require ( github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect - go.etcd.io/bbolt v1.3.7 // indirect + go.etcd.io/bbolt v1.3.11 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/otel v1.21.0 // indirect - go.opentelemetry.io/otel/metric v1.21.0 // indirect - go.opentelemetry.io/otel/trace v1.21.0 // indirect + go.opentelemetry.io/otel v1.32.0 // indirect + go.opentelemetry.io/otel/metric v1.32.0 // indirect + go.opentelemetry.io/otel/trace v1.32.0 // indirect go.uber.org/dig v1.17.1 // indirect go.uber.org/fx v1.20.1 // indirect go.uber.org/mock v0.4.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.26.0 // indirect - golang.org/x/crypto v0.23.0 // indirect - golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect - golang.org/x/mod v0.15.0 // indirect - golang.org/x/net v0.23.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/term v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect - golang.org/x/tools v0.18.0 // indirect - gonum.org/v1/gonum v0.14.0 // indirect - google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240108191215-35c7eff3a6b1 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1 // indirect - google.golang.org/protobuf v1.33.0 // indirect + golang.org/x/crypto v0.32.0 // indirect + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect + golang.org/x/mod v0.19.0 // indirect + golang.org/x/net v0.34.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/sys v0.29.0 // indirect + golang.org/x/term v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect + golang.org/x/tools v0.23.0 // indirect + gonum.org/v1/gonum v0.15.1 // indirect + google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20241202173237-19429a94021a // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect + google.golang.org/protobuf v1.36.4 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect lukechampine.com/blake3 v1.2.1 // indirect diff --git a/go.sum b/go.sum index 1031fa9..6d3f6d7 100644 --- a/go.sum +++ b/go.sum @@ -6,7 +6,6 @@ cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSR cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= @@ -20,7 +19,6 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= @@ -44,7 +42,6 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= cosmossdk.io/api v0.4.1 h1:0ikaYM6GyxTYYcfBiyR8YnLCfhNnhKpEFnaSepCTmqg= cosmossdk.io/api v0.4.1/go.mod h1:jR7k5ok90LxW2lFUXvd8Vpo/dr4PpiyVegxdm7b1ZdE= @@ -69,8 +66,8 @@ github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOv github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -123,8 +120,8 @@ github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/ github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= -github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= +github.com/adlio/schema v1.3.6 h1:k1/zc2jNfeiZBA5aFTRy37jlBIuCkXCm0XmvpzCKI9I= +github.com/adlio/schema v1.3.6/go.mod h1:qkxwLgPBd1FgLRHYVCmQT/rrBr3JH38J9LjmVzWNudg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= @@ -190,17 +187,25 @@ github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBT github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.21.0-beta.0.20201114000516-e9c7a5ac6401/go.mod h1:Sv4JPQ3/M+teHz9Bo5jBpkNcP0x6r7rdihlNL/7tTAs= +github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= -github.com/btcsuite/btcd v0.22.2 h1:vBZ+lGGd1XubpOWO67ITJpAEsICWhA0YzqkcpkgNBfo= +github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A= +github.com/btcsuite/btcd v0.24.2/go.mod h1:5C8ChTkl5ejr3WHj8tkQSCmydiMEPB0ZhQhehpq7Dgg= +github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= -github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= +github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= +github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= +github.com/btcsuite/btcd/btcutil v1.1.5/go.mod h1:PSZZ4UitpLBWzxGd5VGOrLnmOjtPP/a6HaFo12zMs00= +github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= +github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ= +github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= @@ -228,8 +233,9 @@ github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -252,18 +258,22 @@ github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaY github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.6.1/go.mod h1:tm6FTP5G81vwJ5lC0SizQo374JNCOPrHyXGitRJoDqM= github.com/cockroachdb/errors v1.8.1/go.mod h1:qGwQn6JmZ+oMjuLwjWzUNqblqk0xl4CVV3SQbGwK7Ac= -github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= +github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= +github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= +github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4= +github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811/go.mod h1:Nb5lgvnQ2+oGlE/EyZy4+2/CxRh9KfvCXnag1vtpxVM= -github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 h1:aPEJyR4rPBvDmeyi+l/FS/VtA00IWvjeFvjen1m1l1A= -github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593/go.mod h1:6hk1eMY/u5t+Cf18q5lFMUA1Rc+Sm5I6Ra1QuPyxXCo= +github.com/cockroachdb/pebble v1.1.2 h1:CUh2IPtR4swHlEj48Rhfzw6l/d0qA31fItcIszQVIsA= +github.com/cockroachdb/pebble v1.1.2/go.mod h1:4exszw1r40423ZsmkG/09AFEG83I0uDgfujJdbL6kYU= github.com/cockroachdb/redact v1.0.8/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= @@ -274,8 +284,8 @@ github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZ github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= github.com/cometbft/cometbft v0.34.27 h1:ri6BvmwjWR0gurYjywcBqRe4bbwc3QVs9KRcCzgh/J0= github.com/cometbft/cometbft v0.34.27/go.mod h1:BcCbhKv7ieM0KEddnYXvQZR+pZykTKReJJYf7YC7qhw= -github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= -github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= +github.com/cometbft/cometbft-db v1.0.1 h1:SylKuLseMLQKw3+i8y8KozZyJcQSL98qEe2CGMCGTYE= +github.com/cometbft/cometbft-db v1.0.1/go.mod h1:EBrFs1GDRiTqrWXYi4v90Awf/gcdD5ExzdPbg4X8+mk= github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= @@ -312,8 +322,8 @@ github.com/cosmos/cosmos-sdk/ics23/go v0.8.0/go.mod h1:2a4dBq88TUoqoWAU5eu0lGvpF github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= -github.com/cosmos/gogoproto v1.4.12 h1:vB6Lbe/rtnYGjQuFxkPiPYiCybqFT8QvLipDZP8JpFE= -github.com/cosmos/gogoproto v1.4.12/go.mod h1:LnZob1bXRdUoqMMtwYlcR3wjiElmlC+FkjaZRv1/eLY= +github.com/cosmos/gogoproto v1.7.0 h1:79USr0oyXAbxg3rspGh/m4SWNyoz/GLaAh0QlCe2fro= +github.com/cosmos/gogoproto v1.7.0/go.mod h1:yWChEv5IUEYURQasfyBW5ffkMHR/90hiHgbNgrtp4j0= github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= github.com/cosmos/iavl v0.19.5 h1:rGA3hOrgNxgRM5wYcSCxgQBap7fW82WZgY78V9po/iY= @@ -330,7 +340,7 @@ github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwc github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/crackcomm/go-gitignore v0.0.0-20231225121904-e25f5bc08668 h1:ZFUue+PNxmHlu7pYv+IYMtqlaO/0VwaGEqKepZf9JpA= github.com/crackcomm/go-gitignore v0.0.0-20231225121904-e25f5bc08668/go.mod h1:p1d6YEZWvFzEh4KLyvBcVSnrfNDDvK2zfK/4x2v/4pE= github.com/crate-crypto/go-ipa v0.0.0-20220523130400-f11357ae11c7/go.mod h1:gFnFS95y8HstDP6P9pPwzrxOOC5TRDkwbM+ao15ChAI= @@ -350,8 +360,9 @@ github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnG github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= @@ -360,8 +371,9 @@ github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= @@ -370,12 +382,14 @@ github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFM github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= -github.com/dgraph-io/badger/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8BzuWsEs= -github.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak= +github.com/dgraph-io/badger/v4 v4.5.1 h1:7DCIXrQjo1LKmM96YD+hLVJ2EEsyyoWxJfpdd56HLps= +github.com/dgraph-io/badger/v4 v4.5.1/go.mod h1:qn3Be0j3TfV4kPbVoK0arXCD1/nr1ftth6sbL5jxdoA= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= -github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= +github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91 h1:Pux6+xANi0I7RRo5E1gflI4EZ2yx3BGZ75JkAIvGEOA= +github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91/go.mod h1:swkazRqnUf1N62d0Nutz7KIj2UKqsm/H8tD0nBJAXqM= +github.com/dgraph-io/ristretto/v2 v2.1.0 h1:59LjpOJLNDULHh8MC4UaegN52lC4JnO2dITsie/Pa8I= +github.com/dgraph-io/ristretto/v2 v2.1.0/go.mod h1:uejeqfYXpUomfse0+lO+13ATz4TypQYLJZzBSAemuB4= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= @@ -445,8 +459,8 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= -github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= @@ -466,8 +480,9 @@ github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7z github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILDlzrGEckF6HKjXe48EgsY/l7K7vhY4MW8= github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= @@ -475,8 +490,9 @@ github.com/gballet/go-verkle v0.0.0-20220902153445-097bd83b7732/go.mod h1:o/XfIX github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= -github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0= github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ= +github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= +github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= @@ -506,11 +522,12 @@ github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBj github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= @@ -571,8 +588,6 @@ github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= -github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -620,11 +635,11 @@ github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGS github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= -github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v24.12.23+incompatible h1:ubBKR94NR4pXUCY/MUsRVzd9umNW7ht7EG9hHfS9FX8= +github.com/google/flatbuffers v24.12.23+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -665,7 +680,6 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -678,13 +692,12 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= -github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= @@ -702,8 +715,9 @@ github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY 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/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/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= @@ -937,8 +951,8 @@ github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47e github.com/klauspost/compress v1.15.10/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= -github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= -github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +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 v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= @@ -963,6 +977,7 @@ 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 v0.0.0-20170224010052-a616ab194758/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +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/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= @@ -975,8 +990,8 @@ github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2 github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= @@ -1009,8 +1024,8 @@ github.com/libp2p/go-yamux/v4 v4.0.1 h1:FfDR4S1wj6Bw2Pqbc8Uz7pCxeRBPbwsBbEdfwiCy github.com/libp2p/go-yamux/v4 v4.0.1/go.mod h1:NWjl8ZTLOGlozrXSOZ/HlfG++39iKNnM5wwmtQP1YB4= 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= -github.com/linxGnu/grocksdb v1.7.10 h1:dz7RY7GnFUA+GJO6jodyxgkUeGMEkPp3ikt9hAcNGEw= -github.com/linxGnu/grocksdb v1.7.10/go.mod h1:0hTf+iA+GOr0jDX4CgIYyJZxqOH9XlBh6KVj8+zmF34= +github.com/linxGnu/grocksdb v1.9.3 h1:s1cbPcOd0cU2SKXRG1nEqCOWYAELQjdqg3RVI2MH9ik= +github.com/linxGnu/grocksdb v1.9.3/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= @@ -1056,8 +1071,6 @@ github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpe github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg= github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ= github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= @@ -1080,8 +1093,9 @@ github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjK github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/highwayhash v1.0.3 h1:kbnuUMoHYyVl7szWjSxJnxw11k2U709jqFPPmIUyD6Q= +github.com/minio/highwayhash v1.0.3/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= @@ -1139,6 +1153,8 @@ github.com/multiformats/go-multistream v0.5.0/go.mod h1:n6tMZiwiP2wUsR8DgfDWw1dy github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -1198,10 +1214,10 @@ github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8P github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= +github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI= +github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= +github.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss= +github.com/opencontainers/runc v1.1.12/go.mod h1:S+lQwSfncpBha7XTy/5lBwWgm5+y5Ma/O44Ekby9FK8= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.1.0 h1:HHUyrt9mwHUjtasSbXSMvs4cyFxh+Bll4AjJ9odEGpg= github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= @@ -1233,14 +1249,13 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= -github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= -github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= -github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= @@ -1254,10 +1269,10 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/polydawn/refmt v0.89.0 h1:ADJTApkvkeBZsN0tBTx8QjpD9JkmxbKp0cxfr9qszm4= github.com/polydawn/refmt v0.89.0/go.mod h1:/zvteZs/GwLtCgZ4BL6CBsk9IKIlexP43ObX9AxTqTw= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= @@ -1274,8 +1289,8 @@ github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqr github.com/prometheus/client_golang v1.12.0/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= -github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= -github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= +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-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -1284,8 +1299,8 @@ github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.1-0.20210607210712-147c58e9608a/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= -github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -1300,8 +1315,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.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/common v0.39.0/go.mod h1:6XBZ7lYdLCbkAVhwRsWTZn+IN5AB9F/NXd5w0BbEX0Y= -github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= -github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= +github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= 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-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1314,8 +1329,8 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= -github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= -github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= @@ -1347,11 +1362,11 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.11.0 h1:0B9GE/r9Bc2UxRMMtymBkHTenPkHDv0CW4Y98GBY+po= -github.com/rs/cors v1.11.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= +github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= @@ -1360,9 +1375,13 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= -github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= +github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= @@ -1418,27 +1437,28 @@ github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3 github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= -github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= -github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -1447,8 +1467,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= -github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= +github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -1473,12 +1493,13 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= -github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= @@ -1489,8 +1510,6 @@ github.com/tdewolff/minify/v2 v2.12.4/go.mod h1:h+SRvSIX3kwgwTFOpSckvSxgax3uy8kZ github.com/tdewolff/parse/v2 v2.6.3/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs= github.com/tdewolff/parse/v2 v2.6.4/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs= github.com/tdewolff/test v1.0.7/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= @@ -1583,8 +1602,8 @@ github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1U go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= -go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/bbolt v1.3.11 h1:yGEzV1wPz2yVCLsD8ZAiGHhHVlczyC9d1rP43/VCRJ0= +go.etcd.io/bbolt v1.3.11/go.mod h1:dksAq7YMXoljX0xu6VF5DMZGbhYYoLUalEiSySYAS4I= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= @@ -1601,12 +1620,16 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= -go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= -go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= -go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= -go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= -go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= +go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= +go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= +go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M= +go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8= +go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4= +go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU= +go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU= +go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ= +go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM= +go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -1666,7 +1689,6 @@ golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -1678,8 +1700,8 @@ golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= 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-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1697,8 +1719,8 @@ golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8H golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= golang.org/x/exp v0.0.0-20230206171751-46f607a40771/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ= -golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= 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= @@ -1731,8 +1753,8 @@ golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= -golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= +golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= @@ -1783,7 +1805,6 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= @@ -1808,8 +1829,8 @@ golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.6.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.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= 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= @@ -1842,8 +1863,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.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1915,7 +1936,6 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1926,10 +1946,10 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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-20210616094352-59db8d763f22/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-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1956,7 +1976,6 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1964,8 +1983,9 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.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-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1973,8 +1993,8 @@ golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= +golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= 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= @@ -1988,8 +2008,8 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= 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= @@ -2061,8 +2081,8 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= @@ -2070,8 +2090,8 @@ golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlz golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= -golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= +golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= +golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= 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= @@ -2083,8 +2103,8 @@ gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJ 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= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0= -gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU= +gonum.org/v1/gonum v0.15.1 h1:FNy7N6OUZVUaWG9pTiD+jlhdQ3lMP+/LcTpJ6+a8sQ0= +gonum.org/v1/gonum v0.15.1/go.mod h1:eZTZuRFrzu5pcyjN5wJhcIhnUdNijYxX1T2IcrOGY0o= gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= @@ -2168,22 +2188,20 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917 h1:nz5NESFLZbJGPFxDT/HCn+V1mZ8JGNoY4nUpmW/Y2eg= -google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917/go.mod h1:pZqR+glSb11aJ+JQcczCvgf47+duRuzNSKqE8YAQnV0= -google.golang.org/genproto/googleapis/api v0.0.0-20240108191215-35c7eff3a6b1 h1:OPXtXn7fNMaXwO3JvOmF1QyTc00jsSFFz1vXXBOdCDo= -google.golang.org/genproto/googleapis/api v0.0.0-20240108191215-35c7eff3a6b1/go.mod h1:B5xPO//w8qmBDjGReYLpR6UJPnkldGkCSMoH/2vxJeg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1 h1:gphdwh0npgs8elJ4T6J+DQJHPVF7RsuJHCfwztUb4J4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1/go.mod h1:daQN87bsDqDoe316QbbvX60nMoJQa4r6Ds0ZuoAe5yA= +google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y= +google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s= +google.golang.org/genproto/googleapis/api v0.0.0-20241202173237-19429a94021a h1:OAiGFfOiA0v9MRYsSidp3ubZaBnteRUyn3xB2ZQ5G/E= +google.golang.org/genproto/googleapis/api v0.0.0-20241202173237-19429a94021a/go.mod h1:jehYqy3+AhJU9ve55aNOaSml7wUXjF9x6z2LcCfpAhY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1:hgh8P4EuoxpsuKMXX/To36nOFD7vixReXgn8lPGnt+o= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= @@ -2214,8 +2232,8 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.61.1 h1:kLAiWrZs7YeDM6MumDe7m3y4aM6wacLzM1Y/wiLP9XY= -google.golang.org/grpc v1.61.1/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= +google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= +google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= 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= @@ -2231,8 +2249,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/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.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= +google.golang.org/protobuf v1.36.4/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= diff --git a/network/downloads.go b/network/downloads.go index fa41944..9ad1f9f 100644 --- a/network/downloads.go +++ b/network/downloads.go @@ -28,14 +28,12 @@ import ( // DownloadFile attempts to download a file identified by its Merkle root from a network of providers, excluding the caller's own URL. // It queries the provider network, tries each available provider until the file is successfully downloaded and matches the expected size, and writes the file to the local file system. // Returns an error if the file cannot be found or downloaded from any provider. -func DownloadFile(f *file_system.FileSystem, merkle []byte, owner string, start int64, wallet *wallet.Wallet, fileSize int64, myUrl string, chunkSize int64, proofType int64, ipfsParams *ipfslite.AddParams) error { +func DownloadFile(f *file_system.FileSystem, merkle []byte, owner string, start int64, wallet *wallet.Wallet, queryClinet types.QueryClient, fileSize int64, myUrl string, chunkSize int64, proofType int64, ipfsParams *ipfslite.AddParams) error { queryParams := &types.QueryFindFile{ Merkle: merkle, } - cl := types.NewQueryClient(wallet.Client.GRPCConn) - - res, err := cl.FindFile(context.Background(), queryParams) + res, err := queryClinet.FindFile(context.Background(), queryParams) if err != nil { return err } @@ -140,6 +138,11 @@ func DownloadFileFromURL(f *file_system.FileSystem, url string, merkle []byte, o } return 0, err } + defer func() { + if err := resp.Body.Close(); err != nil { + log.Error().Err(err).Msg("error closing response body") + } + }() if resp.StatusCode != 200 { data, err := io.ReadAll(resp.Body) @@ -154,8 +157,6 @@ func DownloadFileFromURL(f *file_system.FileSystem, url string, merkle []byte, o return 0, fmt.Errorf("could not get file, code: %d | msg: %s", resp.StatusCode, e.Error) } - //nolint:errcheck - defer resp.Body.Close() var bodyReader io.Reader = resp.Body contentEncoding := resp.Header.Get("Content-Encoding") diff --git a/proofs/proofs.go b/proofs/proofs.go index f2f6ab7..e8c3132 100644 --- a/proofs/proofs.go +++ b/proofs/proofs.go @@ -6,6 +6,7 @@ import ( "encoding/hex" "errors" "fmt" + "sync/atomic" "time" "github.com/dgraph-io/badger/v4" @@ -34,7 +35,7 @@ const ( ) func GenerateMerkleProof(tree *merkletree.MerkleTree, index int, item []byte) (bool, *merkletree.Proof, error) { - log.Debug().Msg(fmt.Sprintf("Generating Merkle proof for %d", index)) + log.Debug().Msg(fmt.Sprintf("Generating Merkle proof for index: %d", index)) h := sha256.New() _, err := fmt.Fprintf(h, "%d%x", index, item) @@ -58,6 +59,8 @@ func GenerateMerkleProof(tree *merkletree.MerkleTree, index int, item []byte) (b // // returns proof, item and error func GenProof(io FileSystem, merkle []byte, owner string, start int64, block int, chunkSize int, proofType int64) ([]byte, []byte, error) { + log.Debug().Msg(fmt.Sprintf("About to generate merkle proof for file: %x", merkle)) + tree, chunk, err := io.GetFileTreeByChunk(merkle, owner, start, block, chunkSize, proofType) if err != nil { e := fmt.Errorf("cannot get chunk for %x at %d | %w", merkle, block, err) @@ -65,8 +68,6 @@ func GenProof(io FileSystem, merkle []byte, owner string, start int64, block int return nil, nil, e } - log.Debug().Msg(fmt.Sprintf("About to generate merkle proof for %x", merkle)) - valid, proof, err := GenerateMerkleProof(tree, block, chunk) if err != nil { return nil, nil, err @@ -95,9 +96,7 @@ func (p *Prover) GenerateProof(merkle []byte, owner string, start int64, blockHe Start: start, } - cl := types.NewQueryClient(p.wallet.Client.GRPCConn) - - res, err := cl.File(context.Background(), queryParams) + res, err := p.query.File(context.Background(), queryParams) if err != nil { return nil, nil, 0, err } @@ -122,7 +121,7 @@ func (p *Prover) GenerateProof(merkle []byte, owner string, start int64, blockHe if file.ContainsProver(p.wallet.AccAddress()) { // file is ours - proofRes, err := cl.Proof(context.Background(), proofQuery) + proofRes, err := p.query.Proof(context.Background(), proofQuery) if err == nil { newProof = proofRes.Proof // found the proof, we're good to go } @@ -295,7 +294,7 @@ func (p *Prover) Start() { continue } - log.Debug().Msg("Starting proof cycle...") + log.Debug().Time("start at", p.processed).Msg("Starting proof cycle...") abciInfo, err := p.wallet.Client.RPCClient.ABCIInfo(context.Background()) if err != nil { @@ -312,15 +311,16 @@ func (p *Prover) Start() { time.Sleep(time.Second * 5) } - log.Debug().Msg(fmt.Sprintf("proving: %x", merkle)) + log.Debug().Hex("merkle", merkle).Str("owner", owner).Int64("start", start).Msg("proving file") filesProving.Inc() p.Inc() go p.wrapPostProof(merkle, owner, start, height, t) }) if err != nil { - log.Error().Err(err) + log.Error().Err(err).Msg("something went wrong while processing files in this proving cycle") } + log.Debug().Time("finish at", time.Now()).TimeDiff("duration", time.Now(), p.processed).Msg("End of proof cycle") p.processed = time.Now() } log.Info().Msg("Prover module stopped") @@ -387,16 +387,18 @@ func (p *Prover) Stop() { p.running = false } -func NewProver(wallet *wallet.Wallet, q *queue.Queue, io FileSystem, interval int64, threads int16, chunkSize int) *Prover { +func NewProver(wallet *wallet.Wallet, query types.QueryClient, q queue.Queue, io FileSystem, interval int64, threads int16, chunkSize int) *Prover { p := Prover{ - running: false, - wallet: wallet, - q: q, - processed: time.Time{}, - interval: interval, - io: io, - threads: threads, - chunkSize: chunkSize, + running: false, + wallet: wallet, + query: query, + q: q, + processed: time.Time{}, + interval: interval, + io: io, + threads: int32(threads), + currentThreads: atomic.Int32{}, + chunkSize: chunkSize, } return &p diff --git a/proofs/types.go b/proofs/types.go index b001500..23d1486 100644 --- a/proofs/types.go +++ b/proofs/types.go @@ -1,24 +1,28 @@ package proofs import ( + "sync/atomic" "time" merkletree "github.com/wealdtech/go-merkletree/v2" "github.com/JackalLabs/sequoia/queue" "github.com/desmos-labs/cosmos-go-wallet/wallet" + + storageTypes "github.com/jackalLabs/canine-chain/v4/x/storage/types" ) type Prover struct { running bool wallet *wallet.Wallet - q *queue.Queue + q queue.Queue processed time.Time interval int64 io FileSystem - threads int16 - currentThreads int16 + threads int32 + currentThreads atomic.Int32 chunkSize int + query storageTypes.QueryClient } type FileSystem interface { @@ -28,13 +32,13 @@ type FileSystem interface { } func (p *Prover) Inc() { - p.currentThreads++ + p.currentThreads.Add(1) } func (p *Prover) Dec() { - p.currentThreads-- + p.currentThreads.Add(-1) } func (p *Prover) Full() bool { - return p.threads <= p.currentThreads + return p.threads <= p.currentThreads.Load() } diff --git a/queue/monitoring.go b/queue/monitoring.go index be5cd54..f4cb386 100644 --- a/queue/monitoring.go +++ b/queue/monitoring.go @@ -9,3 +9,5 @@ var queueSize = promauto.NewGauge(prometheus.GaugeOpts{ Name: "sequoia_queue_size", Help: "The number of messages currently in the queue", }) + +var _ = queueSize diff --git a/queue/pool.go b/queue/pool.go new file mode 100644 index 0000000..d439e56 --- /dev/null +++ b/queue/pool.go @@ -0,0 +1,114 @@ +package queue + +import ( + "reflect" + "sync" + + "github.com/JackalLabs/sequoia/config" + "github.com/cosmos/cosmos-sdk/types" + + "github.com/desmos-labs/cosmos-go-wallet/wallet" + + storageTypes "github.com/jackalLabs/canine-chain/v4/x/storage/types" + + "github.com/rs/zerolog/log" +) + +var _ Queue = &Pool{} + +type Pool struct { + root *worker + rootQueue chan *Message + offsets []*worker + offsetQueue []chan *Message +} + +func NewPool(main *wallet.Wallet, queryClient storageTypes.QueryClient, workerWallets []*wallet.Wallet, config config.QueueConfig) (*Pool, error) { + root, rootQueue := createWorkers([]*wallet.Wallet{main}, int(config.TxTimer), int(config.TxBatchSize), config.MaxRetryAttempt) + workers, workerChannels := createWorkers(workerWallets, int(config.TxTimer), int(config.TxBatchSize), config.MaxRetryAttempt) + + pool := &Pool{ + root: root[0], + rootQueue: rootQueue[0], + offsets: workers, + offsetQueue: workerChannels, + } + + return pool, nil +} + +func (p *Pool) Stop() { + close(p.rootQueue) + for _, c := range p.offsetQueue { + close(c) + } +} + +func (p *Pool) Listen() { + go p.root.start() + for _, w := range p.offsets { + go w.start() + } +} + +func (p *Pool) Add(msg types.Msg) (*Message, *sync.WaitGroup) { + var wg sync.WaitGroup + wg.Add(1) + m := &Message{ + msg: msg, + wg: &wg, + err: nil, + res: nil, + msgIndex: -1, // no longer relevant(?) + } + + to := p.sendToQueue(m) + log.Debug().Type("msg_type", m.msg).Str("worker_id", to).Msg("message is sent to a worker") + + return m, &wg +} + +func (p *Pool) sendToQueue(msg *Message) (workerId string) { + // Auth claimers can sign and broadcast MsgPostProof but + // other messages must be signed by main wallet + switch msg.msg.(type) { + case *storageTypes.MsgPostProof: + to := p.sendToOffsets(msg) + return p.offsets[to].Id() + + default: + p.rootQueue <- msg + return p.root.Id() // 0 is always root + } +} + +func (p *Pool) sendToOffsets(msg *Message) int { + set := make([]reflect.SelectCase, 0, len(p.offsetQueue)) + + for _, ch := range p.offsetQueue { + set = append(set, reflect.SelectCase{ + Dir: reflect.SelectSend, + Chan: reflect.ValueOf(ch), + Send: reflect.ValueOf(msg), + }) + } + + // blocks until a worker is free + to, _, _ := reflect.Select(set) + return to +} + +func createWorkers(workerWallets []*wallet.Wallet, txTimer int, batchSize int, maxRetryAttempt int8) (workers []*worker, queue []chan *Message) { + wChannels := make([]chan *Message, 0, len(workerWallets)) + for range len(workerWallets) { + wChannels = append(wChannels, make(chan *Message)) + } + + workers = make([]*worker, 0, len(workerWallets)) + for i, w := range workerWallets { + worker := newWorker(int8(i), w, txTimer, batchSize, maxRetryAttempt, wChannels[i]) + workers = append(workers, worker) + } + + return workers, wChannels +} diff --git a/queue/pool_bench_test.go b/queue/pool_bench_test.go new file mode 100644 index 0000000..36a6475 --- /dev/null +++ b/queue/pool_bench_test.go @@ -0,0 +1,77 @@ +package queue + +import ( + "context" + "testing" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/JackalLabs/sequoia/config" + "github.com/JackalLabs/sequoia/testutil" + sequoiaWallet "github.com/JackalLabs/sequoia/wallet" + + "go.uber.org/mock/gomock" + + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdkTypes "github.com/cosmos/cosmos-sdk/types" + authTypes "github.com/cosmos/cosmos-sdk/x/auth/types" + ttypes "github.com/tendermint/tendermint/types" + + "github.com/jackalLabs/canine-chain/v4/x/storage/types" +) + +var queueConfig config.QueueConfig = config.QueueConfig{ + QueueInterval: 10, + QueueThreads: 4, + MaxRetryAttempt: 100, + TxBatchSize: 45, + TxTimer: 3, +} + +// really rough estimate because it benchmarks the whole pool.Add pipeline +func BenchmarkPoolAdd(b *testing.B) { + wallet, queryClient, _, rpcClient := setupWalletClient(b) + rpcClient. + EXPECT(). + BroadcastTxCommit(gomock.Any(), gomock.Any()). + DoAndReturn(func(_ context.Context, tx ttypes.Tx) (*sdkTypes.TxResponse, error) { + return nil, status.Error(codes.OK, "no error") + }). + AnyTimes() + wallet.Client.RPCClient = rpcClient + baseAcc := authTypes.ProtoBaseAccount() + err := baseAcc.SetAddress(sdkTypes.AccAddress(wallet.AccAddress())) + if err != nil { + b.Error(err) + } + + any, err := codectypes.NewAnyWithValue(baseAcc) + if err != nil { + b.Error(err) + } + queryResp := &authTypes.QueryAccountResponse{ + Account: any, + } + queryClient.EXPECT().Account(gomock.Any(), gomock.Any()).Return(queryResp, nil).AnyTimes() + + storageQuery := testutil.NewFakeStorageQueryClient() + + offsetWallets, err := sequoiaWallet.CreateOffsetWallets(wallet, int(queueConfig.QueueThreads)) + if err != nil { + b.Error(err) + } + pool, err := NewPool(wallet, storageQuery, offsetWallets, queueConfig) + if err != nil { + b.Error(err) + } + + go pool.Listen() + defer pool.Stop() + + msg := types.NewMsgPostProof("2", []byte(""), "", 0, []byte(""), []byte(""), 0) + b.ResetTimer() + for range b.N { + pool.Add(msg) + } +} diff --git a/queue/pool_test.go b/queue/pool_test.go new file mode 100644 index 0000000..083e510 --- /dev/null +++ b/queue/pool_test.go @@ -0,0 +1,43 @@ +package queue + +import ( + "testing" + + "github.com/jackalLabs/canine-chain/v4/x/storage/types" +) + +func TestPoolAddMsg(t *testing.T) { + queue := make([]chan *Message, 0) + + for range 2 { + queue = append(queue, make(chan *Message)) + } + + wallet, _, _, _ := setupWalletClient(t) + + workers := []*worker{{wallet: wallet}, {wallet: wallet}} + + pool := Pool{ + offsets: workers, + offsetQueue: queue, + } + + go func() { + msg := <-queue[0] // worker 0 is "busy" after receiving from queue[0] + msg.wg.Done() + msg = <-queue[1] + msg.wg.Done() + }() + + msg, wg0 := pool.Add(&types.MsgPostProof{}) + if _, ok := msg.msg.(*types.MsgPostProof); !ok { + t.Errorf("expected: msg.msg as *types.MsgPostProof, got: %T", msg.msg) + } + wg0.Wait() + + msg, wg1 := pool.Add(&types.MsgPostProof{}) + if _, ok := msg.msg.(*types.MsgPostProof); !ok { + t.Errorf("expected: msg.msg as *types.MsgPostProof, got: %T", msg.msg) + } + wg1.Wait() +} diff --git a/queue/queue.go b/queue/queue.go index 3ba7c12..a63590b 100644 --- a/queue/queue.go +++ b/queue/queue.go @@ -1,156 +1,13 @@ package queue import ( - "bytes" - "errors" - "fmt" - "strings" "sync" - "time" - - storageTypes "github.com/jackalLabs/canine-chain/v4/x/storage/types" "github.com/cosmos/cosmos-sdk/types" - walletTypes "github.com/desmos-labs/cosmos-go-wallet/types" - "github.com/desmos-labs/cosmos-go-wallet/wallet" - "github.com/rs/zerolog/log" ) -func (m *Message) Done() { - m.wg.Done() -} - -func NewQueue(w *wallet.Wallet, interval int64) *Queue { - q := &Queue{ - wallet: w, - messages: make([]*Message, 0), - processed: time.Now(), - running: false, - interval: interval, - } - return q -} - -func (q *Queue) Add(msg types.Msg) (*Message, *sync.WaitGroup) { - var wg sync.WaitGroup - - m := &Message{ - msg: msg, - wg: &wg, - err: nil, - } - - proofMessage, ok := msg.(*storageTypes.MsgPostProof) - if ok { - for _, message := range q.messages { - queueMessage, ok := message.msg.(*storageTypes.MsgPostProof) - if !ok { - continue - } - if bytes.Equal( - queueMessage.Merkle, proofMessage.Merkle) && - queueMessage.Start == proofMessage.Start && - queueMessage.Owner == proofMessage.Owner { - m.msgIndex = -1 - return m, &wg - } - } - } - - wg.Add(1) - - q.messages = append(q.messages, m) // adding the message to the end of the list - - return m, &wg -} - -func (q *Queue) Stop() { - q.running = false -} - -func (q *Queue) Listen() { - q.running = true - defer log.Info().Msg("Queue module stopped") - - log.Info().Msg("Queue module started") - for q.running { - time.Sleep(time.Millisecond * 333) // pauses for one third of a second - if !q.processed.Add(time.Second * time.Duration(q.interval)).Before(time.Now()) { // check every ten seconds - continue - } - - lmsg := len(q.messages) - - if lmsg == 0 { // skipping this queue cycle if there is no messages to be pushed - continue - } - - log.Info().Msg(fmt.Sprintf("Queue: %d messages waiting to be put on-chain...", lmsg)) - - // maxSize := 1024 * 1024 // 1mb - maxSize := 45 - - total := len(q.messages) - queueSize.Set(float64(total)) - - if total > maxSize { - total = maxSize - } - - log.Info().Msg(fmt.Sprintf("Queue: Posting %d messages to chain...", total)) - - toProcess := q.messages[:total] - q.messages = q.messages[total:] - - allMsgs := make([]types.Msg, len(toProcess)) - - for i, process := range toProcess { - allMsgs[i] = process.msg - } - - data := walletTypes.NewTransactionData( - allMsgs..., - ).WithGasAuto().WithFeeAuto() - - complete := false - var res *types.TxResponse - var err error - var i int - for !complete && i < 10 { - i++ - res, err = q.wallet.BroadcastTxCommit(data) - if err != nil { - log.Warn().Err(err).Msg("tx broadcast failed from queue") - continue - } - - if res != nil { - if res.Code != 0 { - if strings.Contains(res.RawLog, "account sequence mismatch") { - if data.Sequence != nil { - data = data.WithSequence(*data.Sequence + 1) - continue - } - } - } - complete = true - } else { - log.Warn().Msg("response is nil") - continue - } - } - - if !complete { - err = errors.New("could not complete broadcast in 10 loops") - } - - for i, process := range toProcess { - process.err = err - process.res = res - process.msgIndex = i - process.Done() - } - - q.processed = time.Now() - } +type Queue interface { + Add(msg types.Msg) (*Message, *sync.WaitGroup) + Listen() + Stop() } diff --git a/queue/types.go b/queue/types.go index 0534857..8bb50f1 100644 --- a/queue/types.go +++ b/queue/types.go @@ -1,20 +1,13 @@ package queue import ( + "errors" "sync" - "time" "github.com/cosmos/cosmos-sdk/types" - "github.com/desmos-labs/cosmos-go-wallet/wallet" ) -type Queue struct { - wallet *wallet.Wallet - messages []*Message - processed time.Time - running bool - interval int64 -} +var ErrReachedMaxRetry = errors.New("send retry attempt reached max retry") type Message struct { msg types.Msg diff --git a/queue/worker.go b/queue/worker.go new file mode 100644 index 0000000..6216c6d --- /dev/null +++ b/queue/worker.go @@ -0,0 +1,134 @@ +package queue + +import ( + "errors" + "time" + + walletTypes "github.com/desmos-labs/cosmos-go-wallet/types" + "github.com/desmos-labs/cosmos-go-wallet/wallet" + + "github.com/cosmos/cosmos-sdk/types" + + storageTypes "github.com/jackalLabs/canine-chain/v4/x/storage/types" + + "github.com/rs/zerolog/log" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +type worker struct { + wallet *wallet.Wallet // offset wallet + maxRetryAttempt int8 + msgIn <-chan *Message // worker stop if this closes + batch []*Message + batchSize int + txTimer int +} + +func newWorker(id int8, wallet *wallet.Wallet, txTimer int, batchSize int, maxRetryAttempt int8, msgIn <-chan *Message) *worker { + return &worker{ + wallet: wallet, + maxRetryAttempt: int8(maxRetryAttempt), + msgIn: msgIn, + batchSize: batchSize, + txTimer: txTimer, + } +} + +func (w *worker) start() { + d := time.Duration(w.txTimer) * time.Second + timer := time.NewTimer(d) // if no msg comes for 5 seconds, broadcast tx +run: + for { + select { + case m, ok := <-w.msgIn: + if !ok { // pool closed the channel, stop worker + break run + } + + w.add(m) + if len(w.batch) >= w.batchSize { + w.send() + } + timer.Reset(d) + + case <-timer.C: + if len(w.batch) > 0 { + w.send() + } + timer.Stop() + } + } + + log.Info().Str("worker_id", w.Id()).Msg("queue worker stopped") + if len(w.batch) > 0 { + log.Info(). + Str("id", w.Id()). + Str("addr", w.wallet.AccAddress()). + Int("count", len(w.batch)). + Msg("worker discarded remaining messages in the queue") + } +} + +func (w *worker) add(msg *Message) { + // broadcast message as auth claimer + if m, ok := msg.msg.(*storageTypes.MsgPostProof); ok { + m.Creator = w.wallet.AccAddress() + msg.msg = m + } + if w.batch == nil { + w.batch = []*Message{msg} + return + } + + w.batch = append(w.batch, msg) +} + +// TODO: make this dep inject +func (w *worker) send() { + toProcess := w.batch + w.batch = nil + + msg := make([]types.Msg, 0, len(toProcess)) + for _, m := range toProcess { + msg = append(msg, m.msg) + } + + txData := walletTypes.NewTransactionData(msg...).WithFeeAuto().WithGasAuto() + + var resp *types.TxResponse + var err error + + a := 0 + +retry: + for ; a < int(w.maxRetryAttempt+1); a++ { + resp, err = w.wallet.BroadcastTxCommit(txData) + switch code := status.Code(err); code { + case codes.AlreadyExists, codes.NotFound, codes.OK: + break retry + } + time.Sleep(time.Second) // sleep for a bit before retrying + } + + if a == int(w.maxRetryAttempt+1) { + log.Error(). + Str("id", w.Id()). + Int8("max attempt", w.maxRetryAttempt). + Int("msg size", len(msg)). + Err(err). + Msg("queue worker batch msg broadcast exceeded max retry attempts") + err = errors.Join(ErrReachedMaxRetry, err) + } + + for _, m := range toProcess { + m.res = resp + m.err = err + m.wg.Done() + } +} + +func (w *worker) Id() string { + return w.wallet.AccAddress()[3:8] +} diff --git a/queue/worker_test.go b/queue/worker_test.go new file mode 100644 index 0000000..4110ae2 --- /dev/null +++ b/queue/worker_test.go @@ -0,0 +1,223 @@ +package queue + +import ( + "context" + "sync" + "testing" + + "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/p2p" + coretypes "github.com/tendermint/tendermint/rpc/core/types" + ttypes "github.com/tendermint/tendermint/types" + "go.uber.org/mock/gomock" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/JackalLabs/sequoia/config" + sequoiaWallet "github.com/JackalLabs/sequoia/wallet" + wtypes "github.com/desmos-labs/cosmos-go-wallet/types" + "github.com/desmos-labs/cosmos-go-wallet/wallet" + + "github.com/JackalLabs/sequoia/testutil/mocks" + + "github.com/jackalLabs/canine-chain/v4/x/storage/types" + + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdkTypes "github.com/cosmos/cosmos-sdk/types" + txTypes "github.com/cosmos/cosmos-sdk/types/tx" + "github.com/cosmos/cosmos-sdk/x/auth/tx" + authTypes "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +func setupWalletClient(t gomock.TestReporter) (*wallet.Wallet, *mocks.MockAuthQueryClient, *mocks.MockServiceClient, *mocks.MockRPCClient) { + chainCfg := wtypes.ChainConfig{ + RPCAddr: "http://localhost:26657", + GRPCAddr: "localhost:9090", + GasPrice: "0.02ujkl", + GasAdjustment: 1.5, + Bech32Prefix: "jkl", + } + + s := &config.Seed{ + SeedPhrase: "forward service profit benefit punch catch fan chief jealous steel harvest column spell rude warm home melody hat broccoli pulse say garlic you firm", + DerivationPath: "m/44'/118'/0'/0/0", + } + + wallet, err := sequoiaWallet.CreateWallet(s.SeedPhrase, s.DerivationPath, chainCfg) + if err != nil { + t.Errorf(err.Error()) + } + + queryClient := mocks.SetupAuthClient(t) + + baseAcc := authTypes.ProtoBaseAccount() + err = baseAcc.SetAddress(sdkTypes.AccAddress(wallet.AccAddress())) + if err != nil { + t.Errorf(err.Error()) + } + any, err := codectypes.NewAnyWithValue(baseAcc) + if err != nil { + t.Errorf(err.Error()) + } + queryResp := &authTypes.QueryAccountResponse{ + Account: any, + } + queryClient.EXPECT().Account(gomock.Any(), &authTypes.QueryAccountRequest{Address: wallet.AccAddress()}).Return(queryResp, nil).AnyTimes() + + wallet.Client.AuthClient = queryClient + + serviceClient := mocks.SetupServiceClient(t) + + // auto gas & fees + simRes := txTypes.SimulateResponse{ + GasInfo: &sdkTypes.GasInfo{GasWanted: 0, GasUsed: 0}, + Result: nil, + } + serviceClient.EXPECT().Simulate(gomock.Any(), gomock.Any()).Return(&simRes, nil).AnyTimes() + wallet.Client.TxClient = serviceClient + + rpcClient := mocks.SetupRPCClient(t) + re := coretypes.ResultStatus{ + NodeInfo: p2p.DefaultNodeInfo{Network: "jackaaaal"}, + } + rpcClient.EXPECT().Status(gomock.Any()).Return(&re, nil).AnyTimes() + wallet.Client.RPCClient = rpcClient + + return wallet, queryClient, serviceClient, rpcClient +} + +func TestWorkerSendMaxRetry(t *testing.T) { + r := require.New(t) + + wallet, _, _, rpcClient := setupWalletClient(t) + + rpcClient.EXPECT().BroadcastTxCommit(gomock.Any(), gomock.Any()).Return(nil, status.Error(codes.Aborted, "some error")).AnyTimes() + wallet.Client.RPCClient = rpcClient + + chMsg := make(chan *Message) + + w := newWorker(0, wallet, 1, 10, 3, chMsg) + + wg := sync.WaitGroup{} + wg.Add(1) + + msg := types.NewMsgPostProof(w.wallet.AccAddress(), []byte("hello"), "owner", 0, []byte("item"), []byte("list"), 0) + m := Message{ + msg: msg, + wg: &wg, + } + + w.batch = append(w.batch, &m) + + t.Log("sending msg") + w.send() + + wg.Wait() + r.ErrorIs(m.err, ErrReachedMaxRetry) + close(chMsg) +} + +func TestBatchFullSend(t *testing.T) { + r := require.New(t) + + wallet, _, _, rpcclient := setupWalletClient(t) + + wg := sync.WaitGroup{} + wg.Add(2) + + m0 := Message{ + msg: types.NewMsgPostProof(wallet.AccAddress(), []byte(""), "", 0, []byte(""), []byte(""), 0), + wg: &wg, + } + m1 := Message{ + msg: types.NewMsgPostProof(wallet.AccAddress(), []byte(""), "", 0, []byte(""), []byte(""), 0), + wg: &wg, + } + + txData := wtypes.NewTransactionData(m0.msg, m1.msg).WithFeeAuto().WithGasAuto() + + txEncoder := tx.DefaultTxEncoder() + builder, err := wallet.BuildTx(txData) + r.NoError(err) + + expectedSignedTx, err := txEncoder(builder.GetTx()) + r.NoError(err) + + var actual ttypes.Tx + + rpcclient. + EXPECT(). + BroadcastTxCommit(gomock.Any(), gomock.Any()). + DoAndReturn(func(_ context.Context, tx ttypes.Tx) (*sdkTypes.TxResponse, error) { + actual = tx + + return nil, status.Error(codes.OK, "no error") + }). + AnyTimes() + wallet.Client.RPCClient = rpcclient + + chMsg := make(chan *Message) + + w := newWorker(0, wallet, 3, 2, 2, chMsg) + go w.start() + + chMsg <- &m0 + chMsg <- &m1 + + wg.Wait() + + close(chMsg) + r.EqualValues(expectedSignedTx, actual) +} + +func TestBatchHalfFullSend(t *testing.T) { + r := require.New(t) + + wallet, _, _, rpcclient := setupWalletClient(t) + + wg := sync.WaitGroup{} + wg.Add(2) + + m0 := Message{ + msg: types.NewMsgPostProof(wallet.AccAddress(), []byte(""), "", 0, []byte(""), []byte(""), 0), + wg: &wg, + } + m1 := Message{ + msg: types.NewMsgPostProof(wallet.AccAddress(), []byte(""), "", 0, []byte(""), []byte(""), 0), + wg: &wg, + } + + txData := wtypes.NewTransactionData(m0.msg, m1.msg).WithFeeAuto().WithGasAuto() + + txEncoder := tx.DefaultTxEncoder() + builder, err := wallet.BuildTx(txData) + r.NoError(err) + + expectedSignedTx, err := txEncoder(builder.GetTx()) + r.NoError(err) + + var actual ttypes.Tx + + rpcclient. + EXPECT(). + BroadcastTxCommit(gomock.Any(), gomock.Any()). + DoAndReturn(func(_ context.Context, tx ttypes.Tx) (*sdkTypes.TxResponse, error) { + actual = tx + + return nil, status.Error(codes.OK, "no error") + }). + AnyTimes() + + chMsg := make(chan *Message) + + w := newWorker(0, wallet, 3, 5, 2, chMsg) + go w.start() + + chMsg <- &m0 + chMsg <- &m1 + + wg.Wait() + + close(chMsg) + r.EqualValues(expectedSignedTx, actual) +} diff --git a/strays/hands.go b/strays/hands.go index dd8b23d..2d0bc23 100644 --- a/strays/hands.go +++ b/strays/hands.go @@ -22,7 +22,7 @@ func (h *Hand) Stop() { h.running = false } -func (h *Hand) Start(f *file_system.FileSystem, wallet *wallet.Wallet, q *queue.Queue, myUrl string, chunkSize int64) { +func (h *Hand) Start(f *file_system.FileSystem, wallet *wallet.Wallet, queryClient types.QueryClient, q queue.Queue, myUrl string, chunkSize int64) { h.running = true defer log.Info().Msg("Hand stopped") for h.running { @@ -40,7 +40,7 @@ func (h *Hand) Start(f *file_system.FileSystem, wallet *wallet.Wallet, q *queue. start := h.stray.Start proofType := h.stray.ProofType - err := network.DownloadFile(f, merkle, signee, start, wallet, h.stray.FileSize, myUrl, chunkSize, proofType, utils.GetIPFSParams(h.stray)) + err := network.DownloadFile(f, merkle, signee, start, wallet, queryClient, h.stray.FileSize, myUrl, chunkSize, proofType, utils.GetIPFSParams(h.stray)) if err != nil { log.Error().Err(err) h.stray = nil @@ -77,19 +77,8 @@ func (h *Hand) Start(f *file_system.FileSystem, wallet *wallet.Wallet, q *queue. Start: start, } - //data := walletTypes.NewTransactionData( - // msg, - //).WithGasAuto().WithFeeAuto() - m, wg := q.Add(msg) - //res, err := h.wallet.BroadcastTxCommit(data) - //if err != nil { - // log.Error().Err(err) - // h.stray = nil - // continue - //} - if m.Res() != nil { if m.Res().Code > 0 { log.Info().Msg(m.Res().RawLog) @@ -115,14 +104,9 @@ func (h *Hand) Take(stray *types.UnifiedFile) { h.stray = stray } -func (s *StrayManager) NewHand(q *queue.Queue) (*Hand, error) { +func (s *StrayManager) NewHand(q queue.Queue, w *wallet.Wallet) (*Hand, error) { offset := byte(len(s.hands)) + 1 - w, err := s.wallet.CloneWalletOffset(offset) - if err != nil { - return nil, err - } - h := &Hand{ offset: offset, wallet: w, diff --git a/strays/manager.go b/strays/manager.go index f4c2d0f..e78bf27 100644 --- a/strays/manager.go +++ b/strays/manager.go @@ -2,23 +2,20 @@ package strays import ( "context" - "fmt" "math/rand" "time" "github.com/JackalLabs/sequoia/file_system" "github.com/JackalLabs/sequoia/queue" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" - "github.com/cosmos/cosmos-sdk/x/feegrant" "github.com/desmos-labs/cosmos-go-wallet/wallet" "github.com/jackalLabs/canine-chain/v4/x/storage/types" "github.com/rs/zerolog/log" ) // NewStrayManager creates and initializes a new StrayManager with the specified number of hands, authorizing each hand to transact on behalf of the provided wallet if not already authorized. -func NewStrayManager(w *wallet.Wallet, q *queue.Queue, interval int64, refreshInterval int64, handCount int, authList []string) *StrayManager { +func NewStrayManager(w *wallet.Wallet, queryClient types.QueryClient, q queue.Queue, interval int64, refreshInterval int64, handWallets []*wallet.Wallet) (*StrayManager, error) { s := &StrayManager{ rand: rand.New(rand.NewSource(time.Now().Unix())), wallet: w, @@ -28,73 +25,18 @@ func NewStrayManager(w *wallet.Wallet, q *queue.Queue, interval int64, refreshIn processed: time.Time{}, refreshed: time.Time{}, refreshInterval: time.Duration(refreshInterval), + queryClient: queryClient, } - for i := 0; i < handCount; i++ { - log.Info().Msg(fmt.Sprintf("Authorizing hand %d to transact on my behalf...", i)) - - h, err := s.NewHand(q) - if err != nil { - log.Error().Err(err) - continue - } - - alreadyAuth := false - for _, auth := range authList { - if auth == h.Address() { - alreadyAuth = true - break - } - } - - if alreadyAuth { - continue - } - - msg := types.NewMsgAddClaimer(w.AccAddress(), h.Address()) - - allowance := feegrant.BasicAllowance{ - SpendLimit: nil, - Expiration: nil, - } - - wadd, err := sdk.AccAddressFromBech32(w.AccAddress()) - if err != nil { - log.Error().Err(err) - continue - } - - hadd, err := sdk.AccAddressFromBech32(h.Address()) - if err != nil { - log.Error().Err(err) - continue - } - - grantMsg, nerr := feegrant.NewMsgGrantAllowance(&allowance, wadd, hadd) - if nerr != nil { - log.Error().Err(nerr) - continue - } - - m, wg := q.Add(msg) - q.Add(grantMsg) - - wg.Wait() - - if m.Error() != nil { - log.Error().Err(m.Error()) - } - } - - return s + return s, nil } -func (s *StrayManager) Start(f *file_system.FileSystem, q *queue.Queue, myUrl string, chunkSize int64) { +func (s *StrayManager) Start(f *file_system.FileSystem, queryClient types.QueryClient, q queue.Queue, myUrl string, chunkSize int64) { s.running = true defer log.Info().Msg("StrayManager stopped") for _, hand := range s.hands { - go hand.Start(f, s.wallet, q, myUrl, chunkSize) + go hand.Start(f, s.wallet, queryClient, q, myUrl, chunkSize) } for s.running { @@ -106,9 +48,7 @@ func (s *StrayManager) Start(f *file_system.FileSystem, q *queue.Queue, myUrl st if s.refreshed.Add(time.Second * s.refreshInterval).Before(time.Now()) { err := s.RefreshList() if err != nil { - log.Error().Err(err) - - log.Info().Msg("failed refresh") + log.Error().Err(err).Msg("failed refresh") } s.refreshed = time.Now() } @@ -173,9 +113,7 @@ func (s *StrayManager) RefreshList() error { Pagination: page, } - cl := types.NewQueryClient(s.wallet.Client.GRPCConn) - - res, err := cl.OpenFiles(context.Background(), queryParams) + res, err := s.queryClient.OpenFiles(context.Background(), queryParams) if err != nil { return err } diff --git a/strays/types.go b/strays/types.go index a5cebcf..0d6663f 100644 --- a/strays/types.go +++ b/strays/types.go @@ -26,4 +26,5 @@ type StrayManager struct { hands []*Hand processed time.Time refreshed time.Time + queryClient types.QueryClient } diff --git a/testutil/fake.go b/testutil/fake.go new file mode 100644 index 0000000..e673444 --- /dev/null +++ b/testutil/fake.go @@ -0,0 +1,558 @@ +package testutil + +import ( + "context" + + codec "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/tx" + auth "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/jackalLabs/canine-chain/v4/x/storage/types" + abci "github.com/tendermint/tendermint/abci/types" + bytes "github.com/tendermint/tendermint/libs/bytes" + log "github.com/tendermint/tendermint/libs/log" + "github.com/tendermint/tendermint/p2p" + rpc "github.com/tendermint/tendermint/rpc/client" + coretypes "github.com/tendermint/tendermint/rpc/core/types" + types1 "github.com/tendermint/tendermint/types" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + zlog "github.com/rs/zerolog/log" + + "github.com/desmos-labs/cosmos-go-wallet/wallet" +) + +var _ types.QueryClient = (*FakeStorageQueryClient)(nil) + +type FakeStorageQueryClient struct{} + +func NewFakeStorageQueryClient() *FakeStorageQueryClient { + return &FakeStorageQueryClient{} +} + +func (f *FakeStorageQueryClient) Params(ctx context.Context, in *types.QueryParams, opts ...grpc.CallOption) (*types.QueryParamsResponse, error) { + resp := types.QueryParamsResponse{ + Params: types.Params{ + AttestFormSize: 5, + AttestMinToPass: 3, + CheckWindow: 300, + ChunkSize: 10240, + CollateralPrice: 10000000000, + DepositAccount: "jkl1t35eusvx97953uk47r3z4ckwd2prkn3fay76r8", + MaxContractAgeInBlocks: 100, + MissesToBurn: 1, + PolRatio: 40, + PriceFeed: "jklprice", + PricePerTbPerMonth: 15, + ProofWindow: 7200, + ReferralCommission: 25, + }, + } + return &resp, nil +} + +// Queries a File by merkle, owner, and start. +// returns UnifiedFile with empty proofs +func (f *FakeStorageQueryClient) File(ctx context.Context, in *types.QueryFile, opts ...grpc.CallOption) (*types.QueryFileResponse, error) { + var file types.UnifiedFile + file.Merkle = in.Merkle + file.Owner = in.Owner + file.Start = in.Start + + resp := &types.QueryFileResponse{ + File: file, + } + + return resp, nil +} + +// Queries a list of File items. +func (f *FakeStorageQueryClient) AllFiles(ctx context.Context, in *types.QueryAllFiles, opts ...grpc.CallOption) (*types.QueryAllFilesResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a File by merkle, owner, and start. +func (f *FakeStorageQueryClient) FilesFromNote(ctx context.Context, in *types.QueryFilesFromNote, opts ...grpc.CallOption) (*types.QueryFilesFromNoteResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a list of open files by provider_address. +func (f *FakeStorageQueryClient) OpenFiles(ctx context.Context, in *types.QueryOpenFiles, opts ...grpc.CallOption) (*types.QueryAllFilesResponse, error) { + zlog.Info().Str("query", "OpenFiles").Msg("fake storage query client") + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a list of files with only 1x redundancy by provider_address. +func (f *FakeStorageQueryClient) EndangeredFiles(ctx context.Context, in *types.QueryOpenFiles, opts ...grpc.CallOption) (*types.QueryAllFilesResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a list of File items matching the merkle. +func (f *FakeStorageQueryClient) AllFilesByMerkle(ctx context.Context, in *types.QueryAllFilesByMerkle, opts ...grpc.CallOption) (*types.QueryAllFilesByMerkleResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a list of File items matching the owner. +func (f *FakeStorageQueryClient) AllFilesByOwner(ctx context.Context, in *types.QueryAllFilesByOwner, opts ...grpc.CallOption) (*types.QueryAllFilesByOwnerResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a Proof by provider_address, merkle, owner, and start. +func (f *FakeStorageQueryClient) Proof(ctx context.Context, in *types.QueryProof, opts ...grpc.CallOption) (*types.QueryProofResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a list of Proof items. +func (f *FakeStorageQueryClient) AllProofs(ctx context.Context, in *types.QueryAllProofs, opts ...grpc.CallOption) (*types.QueryAllProofsResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a list of Proof items by provider_address. +func (f *FakeStorageQueryClient) ProofsByAddress(ctx context.Context, in *types.QueryProofsByAddress, opts ...grpc.CallOption) (*types.QueryProofsByAddressResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a Provider by address. +func (f *FakeStorageQueryClient) Provider(ctx context.Context, in *types.QueryProvider, opts ...grpc.CallOption) (*types.QueryProviderResponse, error) { + resp := new(types.QueryProviderResponse) + resp.Provider.Totalspace = "100000000" + return resp, nil +} + +// Queries a list of Provider items. +func (f *FakeStorageQueryClient) AllProviders(ctx context.Context, in *types.QueryAllProviders, opts ...grpc.CallOption) (*types.QueryAllProvidersResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries an Attestation by prover, merkle, owner, and start. +func (f *FakeStorageQueryClient) Attestation(ctx context.Context, in *types.QueryAttestation, opts ...grpc.CallOption) (*types.QueryAttestationResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a list of Attestation items. +func (f *FakeStorageQueryClient) AllAttestations(ctx context.Context, in *types.QueryAllAttestations, opts ...grpc.CallOption) (*types.QueryAllAttestationsResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a Report by prover, merkle, owner, and start. +func (f *FakeStorageQueryClient) Report(ctx context.Context, in *types.QueryReport, opts ...grpc.CallOption) (*types.QueryReportResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a list of Report items. +func (f *FakeStorageQueryClient) AllReports(ctx context.Context, in *types.QueryAllReports, opts ...grpc.CallOption) (*types.QueryAllReportsResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries free space by address. +func (f *FakeStorageQueryClient) FreeSpace(ctx context.Context, in *types.QueryFreeSpace, opts ...grpc.CallOption) (*types.QueryFreeSpaceResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries how many files a provider has stored by address. +func (f *FakeStorageQueryClient) StoreCount(ctx context.Context, in *types.QueryStoreCount, opts ...grpc.CallOption) (*types.QueryStoreCountResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries where a file is located by merkle. +func (f *FakeStorageQueryClient) FindFile(ctx context.Context, in *types.QueryFindFile, opts ...grpc.CallOption) (*types.QueryFindFileResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries free space by address. +func (f *FakeStorageQueryClient) GetClientFreeSpace(ctx context.Context, in *types.QueryClientFreeSpace, opts ...grpc.CallOption) (*types.QueryClientFreeSpaceResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a PayData by address. +func (f *FakeStorageQueryClient) GetPayData(ctx context.Context, in *types.QueryPayData, opts ...grpc.CallOption) (*types.QueryPayDataResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a StoragePaymentInfo by address. +func (f *FakeStorageQueryClient) StoragePaymentInfo(ctx context.Context, in *types.QueryStoragePaymentInfo, opts ...grpc.CallOption) (*types.QueryStoragePaymentInfoResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a list of StoragePaymentInfo items. +func (f *FakeStorageQueryClient) AllStoragePaymentInfo(ctx context.Context, in *types.QueryAllStoragePaymentInfo, opts ...grpc.CallOption) (*types.QueryAllStoragePaymentInfoResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries whether user can upload a file based on size. +func (f *FakeStorageQueryClient) FileUploadCheck(ctx context.Context, in *types.QueryFileUploadCheck, opts ...grpc.CallOption) (*types.QueryFileUploadCheckResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries current price of storage. +func (f *FakeStorageQueryClient) PriceCheck(ctx context.Context, in *types.QueryPriceCheck, opts ...grpc.CallOption) (*types.QueryPriceCheckResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries a list of ActiveProviders items. +func (f *FakeStorageQueryClient) ActiveProviders(ctx context.Context, in *types.QueryActiveProviders, opts ...grpc.CallOption) (*types.QueryActiveProvidersResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries protocol storage space used and purchased. +func (f *FakeStorageQueryClient) StorageStats(ctx context.Context, in *types.QueryStorageStats, opts ...grpc.CallOption) (*types.QueryStorageStatsResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries how much storage space is being used on the network at this time. +func (f *FakeStorageQueryClient) NetworkSize(ctx context.Context, in *types.QueryNetworkSize, opts ...grpc.CallOption) (*types.QueryNetworkSizeResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries the amount of offered storage by active providers +func (f *FakeStorageQueryClient) AvailableSpace(ctx context.Context, in *types.QueryAvailableSpace, opts ...grpc.CallOption) (*types.QueryAvailableSpaceResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +// Queries protocol storage space used and purchased. +func (f *FakeStorageQueryClient) Gauges(ctx context.Context, in *types.QueryAllGauges, opts ...grpc.CallOption) (*types.QueryAllGaugesResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake storage query client") +} + +var _ auth.QueryClient = (*FakeAuthQueryClient)(nil) + +type FakeAuthQueryClient struct { + wallet *wallet.Wallet +} + +func NewFakeAuthQueryClient(w *wallet.Wallet) *FakeAuthQueryClient { + return &FakeAuthQueryClient{ + wallet: w, + } +} + +// Accounts returns all the existing accounts +// +// Since: cosmos-sdk 0.43 +func (a *FakeAuthQueryClient) Accounts(ctx context.Context, in *auth.QueryAccountsRequest, opts ...grpc.CallOption) (*auth.QueryAccountsResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake auth query client") +} + +// Account returns account details based on address. +func (a *FakeAuthQueryClient) Account(ctx context.Context, in *auth.QueryAccountRequest, opts ...grpc.CallOption) (*auth.QueryAccountResponse, error) { + baseAcc := auth.ProtoBaseAccount() + err := baseAcc.SetAddress(sdk.AccAddress(a.wallet.AccAddress())) + if err != nil { + return nil, err + } + + any, err := codec.NewAnyWithValue(baseAcc) + if err != nil { + return nil, err + } + + resp := &auth.QueryAccountResponse{ + Account: any, + } + + return resp, nil +} + +// Params queries all parameters. +func (a *FakeAuthQueryClient) Params(ctx context.Context, in *auth.QueryParamsRequest, opts ...grpc.CallOption) (*auth.QueryParamsResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake auth query client") +} + +// ModuleAccountByName returns the module account info by module name +func (a *FakeAuthQueryClient) ModuleAccountByName(ctx context.Context, in *auth.QueryModuleAccountByNameRequest, opts ...grpc.CallOption) (*auth.QueryModuleAccountByNameResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake auth query client") +} + +var _ tx.ServiceClient = (*FakeServiceClient)(nil) + +type FakeServiceClient struct{} + +func NewFakeServiceClient() *FakeServiceClient { + return &FakeServiceClient{} +} + +// Simulate simulates executing a transaction for estimating gas usage. +// returns 0 gas wanted, 0 gas used +func (s *FakeServiceClient) Simulate(ctx context.Context, in *tx.SimulateRequest, opts ...grpc.CallOption) (*tx.SimulateResponse, error) { + simRes := tx.SimulateResponse{ + GasInfo: &sdk.GasInfo{GasWanted: 0, GasUsed: 0}, + Result: nil, + } + + return &simRes, nil +} + +// GetTx fetches a tx by hash. +func (s *FakeServiceClient) GetTx(ctx context.Context, in *tx.GetTxRequest, opts ...grpc.CallOption) (*tx.GetTxResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake service client") +} + +// BroadcastTx broadcast transaction. +func (s *FakeServiceClient) BroadcastTx(ctx context.Context, in *tx.BroadcastTxRequest, opts ...grpc.CallOption) (*tx.BroadcastTxResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake service client") +} + +// GetTxsEvent fetches txs by event. +func (s *FakeServiceClient) GetTxsEvent(ctx context.Context, in *tx.GetTxsEventRequest, opts ...grpc.CallOption) (*tx.GetTxsEventResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake service client") +} + +// GetBlockWithTxs fetches a block with decoded txs. +// +// Since: cosmos-sdk 0.45.2 +func (s *FakeServiceClient) GetBlockWithTxs(ctx context.Context, in *tx.GetBlockWithTxsRequest, opts ...grpc.CallOption) (*tx.GetBlockWithTxsResponse, error) { + return nil, status.Error(codes.Unimplemented, "this is a fake service client") +} + +var _ rpc.Client = (*FakeRPCClient)(nil) + +type FakeRPCClient struct { + BlockHeight int64 +} + +func NewFakeRPCClient() *FakeRPCClient { + return &FakeRPCClient{ + BlockHeight: 0, + } +} + +// ABCIInfo mocks base method. +// Pass context with key: "blockHeight" with value: int64 to get response blockheight +// of that value otherwise client's blockheight is returned +func (m *FakeRPCClient) ABCIInfo(arg0 context.Context) (*coretypes.ResultABCIInfo, error) { + respInfo := abci.ResponseInfo{ + LastBlockHeight: m.BlockHeight, + } + if v := arg0.Value("blockHeight"); v != nil { + height, ok := v.(int64) + if ok { + respInfo.LastBlockHeight = height + } + } + return &coretypes.ResultABCIInfo{Response: respInfo}, nil +} + +// ABCIQuery mocks base method. +func (m *FakeRPCClient) ABCIQuery(ctx context.Context, path string, data bytes.HexBytes) (*coretypes.ResultABCIQuery, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// ABCIQueryWithOptions mocks base method. +func (m *FakeRPCClient) ABCIQueryWithOptions(ctx context.Context, path string, data bytes.HexBytes, opts rpc.ABCIQueryOptions) (*coretypes.ResultABCIQuery, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// Block mocks base method. +func (m *FakeRPCClient) Block(ctx context.Context, height *int64) (*coretypes.ResultBlock, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// BlockByHash mocks base method. +func (m *FakeRPCClient) BlockByHash(ctx context.Context, hash []byte) (*coretypes.ResultBlock, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// BlockResults mocks base method. +func (m *FakeRPCClient) BlockResults(ctx context.Context, height *int64) (*coretypes.ResultBlockResults, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// BlockSearch mocks base method. +func (m *FakeRPCClient) BlockSearch(ctx context.Context, query string, page, perPage *int, orderBy string) (*coretypes.ResultBlockSearch, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// BlockchainInfo mocks base method. +func (m *FakeRPCClient) BlockchainInfo(ctx context.Context, minHeight, maxHeight int64) (*coretypes.ResultBlockchainInfo, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// BroadcastEvidence mocks base method. +func (m *FakeRPCClient) BroadcastEvidence(arg0 context.Context, arg1 types1.Evidence) (*coretypes.ResultBroadcastEvidence, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// BroadcastTxAsync mocks base method. +func (m *FakeRPCClient) BroadcastTxAsync(arg0 context.Context, arg1 types1.Tx) (*coretypes.ResultBroadcastTx, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// BroadcastTxCommit mocks base method. +// returns nil, nil +func (m *FakeRPCClient) BroadcastTxCommit(arg0 context.Context, arg1 types1.Tx) (*coretypes.ResultBroadcastTxCommit, error) { + res := new(coretypes.ResultBroadcastTxCommit) + + tx, err := GetTxDecoder()(arg1) + if err != nil { + panic(err) + } + + msgs := tx.GetMsgs() + for _, m := range msgs { + if msg, ok := m.(*types.MsgAddClaimer); ok { + zlog.Info().Type("msg", msg).Str("claim address", msg.ClaimAddress).Msg("msg sent to fake rpc") + } else if msg, ok := m.(*types.MsgPostProof); ok { + zlog.Info(). + Type("msg", msg). + Str("creator", msg.Creator). + Bytes("item", msg.Item). + Hex("hash_list", msg.HashList). + Hex("merkle", msg.Merkle). + Str("owner", msg.Owner). + Int64("start", msg.Start). + Int64("to_prove", msg.ToProve). + Msg("msg sent to fake rpc") + } + } + + return res, nil +} + +// BroadcastTxSync mocks base method. +func (m *FakeRPCClient) BroadcastTxSync(arg0 context.Context, arg1 types1.Tx) (*coretypes.ResultBroadcastTx, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// CheckTx mocks base method. +func (m *FakeRPCClient) CheckTx(arg0 context.Context, arg1 types1.Tx) (*coretypes.ResultCheckTx, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// Commit mocks base method. +func (m *FakeRPCClient) Commit(ctx context.Context, height *int64) (*coretypes.ResultCommit, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// ConsensusParams mocks base method. +func (m *FakeRPCClient) ConsensusParams(ctx context.Context, height *int64) (*coretypes.ResultConsensusParams, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// ConsensusState mocks base method. +func (m *FakeRPCClient) ConsensusState(arg0 context.Context) (*coretypes.ResultConsensusState, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// DumpConsensusState mocks base method. +func (m *FakeRPCClient) DumpConsensusState(arg0 context.Context) (*coretypes.ResultDumpConsensusState, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// Genesis mocks base method. +func (m *FakeRPCClient) Genesis(arg0 context.Context) (*coretypes.ResultGenesis, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// GenesisChunked mocks base method. +func (m *FakeRPCClient) GenesisChunked(arg0 context.Context, arg1 uint) (*coretypes.ResultGenesisChunk, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// Health mocks base method. +func (m *FakeRPCClient) Health(arg0 context.Context) (*coretypes.ResultHealth, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// IsRunning mocks base method. +func (m *FakeRPCClient) IsRunning() bool { + return false +} + +// NetInfo mocks base method. +func (m *FakeRPCClient) NetInfo(arg0 context.Context) (*coretypes.ResultNetInfo, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// NumUnconfirmedTxs mocks base method. +func (m *FakeRPCClient) NumUnconfirmedTxs(arg0 context.Context) (*coretypes.ResultUnconfirmedTxs, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// OnReset mocks base method. +func (m *FakeRPCClient) OnReset() error { + return status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// OnStart mocks base method. +func (m *FakeRPCClient) OnStart() error { + return status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// OnStop mocks base method. +func (m *FakeRPCClient) OnStop() { +} + +// Quit mocks base method. +func (m *FakeRPCClient) Quit() <-chan struct{} { + return make(chan struct{}) +} + +// Reset mocks base method. +func (m *FakeRPCClient) Reset() error { + return status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// SetLogger mocks base method. +func (m *FakeRPCClient) SetLogger(arg0 log.Logger) { +} + +// Start mocks base method. +func (m *FakeRPCClient) Start() error { + return status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// Status mocks base method. +// returns Network: "jackaaaal" +func (m *FakeRPCClient) Status(arg0 context.Context) (*coretypes.ResultStatus, error) { + re := coretypes.ResultStatus{ + NodeInfo: p2p.DefaultNodeInfo{Network: "jackaaaal"}, + } + return &re, nil +} + +// Stop mocks base method. +func (m *FakeRPCClient) Stop() error { + return status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// String mocks base method. +func (m *FakeRPCClient) String() string { + return "fake RPCClient" +} + +// Subscribe mocks base method. +func (m *FakeRPCClient) Subscribe(ctx context.Context, subscriber, query string, outCapacity ...int) (<-chan coretypes.ResultEvent, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// Tx mocks base method. +func (m *FakeRPCClient) Tx(ctx context.Context, hash []byte, prove bool) (*coretypes.ResultTx, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// TxSearch mocks base method. +func (m *FakeRPCClient) TxSearch(ctx context.Context, query string, prove bool, page, perPage *int, orderBy string) (*coretypes.ResultTxSearch, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// UnconfirmedTxs mocks base method. +func (m *FakeRPCClient) UnconfirmedTxs(ctx context.Context, limit *int) (*coretypes.ResultUnconfirmedTxs, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// Unsubscribe mocks base method. +func (m *FakeRPCClient) Unsubscribe(ctx context.Context, subscriber, query string) error { + return status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// UnsubscribeAll mocks base method. +func (m *FakeRPCClient) UnsubscribeAll(ctx context.Context, subscriber string) error { + return status.Error(codes.Unimplemented, "this is fake RPCClient") +} + +// Validators mocks base method. +func (m *FakeRPCClient) Validators(ctx context.Context, height *int64, page, perPage *int) (*coretypes.ResultValidators, error) { + return nil, status.Error(codes.Unimplemented, "this is fake RPCClient") +} diff --git a/testutil/mocks/expected_mocks.go b/testutil/mocks/expected_mocks.go new file mode 100644 index 0000000..d9e612e --- /dev/null +++ b/testutil/mocks/expected_mocks.go @@ -0,0 +1,30 @@ +package mocks + +import ( + "github.com/cosmos/cosmos-sdk/types/tx" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + storage "github.com/jackalLabs/canine-chain/v4/x/storage/types" + rpcclient "github.com/tendermint/tendermint/rpc/client" + + "google.golang.org/grpc" +) + +type AuthQueryClient interface { + authtypes.QueryClient +} + +type ServiceClient interface { + tx.ServiceClient +} + +type RPCClient interface { + rpcclient.Client +} + +type GRPCConn interface { + grpc.ClientConnInterface +} + +type StorageQueryClient interface { + storage.QueryClient +} diff --git a/testutil/mocks/mocks.go b/testutil/mocks/mocks.go new file mode 100644 index 0000000..a0f6412 --- /dev/null +++ b/testutil/mocks/mocks.go @@ -0,0 +1,1554 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: expected_mocks.go +// +// Generated by this command: +// +// mockgen -source=expected_mocks.go +// + +// Package mock_mocks is a generated GoMock package. +package mocks + +import ( + context "context" + reflect "reflect" + + tx "github.com/cosmos/cosmos-sdk/types/tx" + types "github.com/cosmos/cosmos-sdk/x/auth/types" + types0 "github.com/jackalLabs/canine-chain/v4/x/storage/types" + bytes "github.com/tendermint/tendermint/libs/bytes" + log "github.com/tendermint/tendermint/libs/log" + client "github.com/tendermint/tendermint/rpc/client" + coretypes "github.com/tendermint/tendermint/rpc/core/types" + types1 "github.com/tendermint/tendermint/types" + gomock "go.uber.org/mock/gomock" + grpc "google.golang.org/grpc" +) + +// MockAuthQueryClient is a mock of AuthQueryClient interface. +type MockAuthQueryClient struct { + ctrl *gomock.Controller + recorder *MockAuthQueryClientMockRecorder + isgomock struct{} +} + +// MockAuthQueryClientMockRecorder is the mock recorder for MockAuthQueryClient. +type MockAuthQueryClientMockRecorder struct { + mock *MockAuthQueryClient +} + +// NewMockAuthQueryClient creates a new mock instance. +func NewMockAuthQueryClient(ctrl *gomock.Controller) *MockAuthQueryClient { + mock := &MockAuthQueryClient{ctrl: ctrl} + mock.recorder = &MockAuthQueryClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockAuthQueryClient) EXPECT() *MockAuthQueryClientMockRecorder { + return m.recorder +} + +// Account mocks base method. +func (m *MockAuthQueryClient) Account(ctx context.Context, in *types.QueryAccountRequest, opts ...grpc.CallOption) (*types.QueryAccountResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Account", varargs...) + ret0, _ := ret[0].(*types.QueryAccountResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Account indicates an expected call of Account. +func (mr *MockAuthQueryClientMockRecorder) Account(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Account", reflect.TypeOf((*MockAuthQueryClient)(nil).Account), varargs...) +} + +// Accounts mocks base method. +func (m *MockAuthQueryClient) Accounts(ctx context.Context, in *types.QueryAccountsRequest, opts ...grpc.CallOption) (*types.QueryAccountsResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Accounts", varargs...) + ret0, _ := ret[0].(*types.QueryAccountsResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Accounts indicates an expected call of Accounts. +func (mr *MockAuthQueryClientMockRecorder) Accounts(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Accounts", reflect.TypeOf((*MockAuthQueryClient)(nil).Accounts), varargs...) +} + +// ModuleAccountByName mocks base method. +func (m *MockAuthQueryClient) ModuleAccountByName(ctx context.Context, in *types.QueryModuleAccountByNameRequest, opts ...grpc.CallOption) (*types.QueryModuleAccountByNameResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ModuleAccountByName", varargs...) + ret0, _ := ret[0].(*types.QueryModuleAccountByNameResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ModuleAccountByName indicates an expected call of ModuleAccountByName. +func (mr *MockAuthQueryClientMockRecorder) ModuleAccountByName(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ModuleAccountByName", reflect.TypeOf((*MockAuthQueryClient)(nil).ModuleAccountByName), varargs...) +} + +// Params mocks base method. +func (m *MockAuthQueryClient) Params(ctx context.Context, in *types.QueryParamsRequest, opts ...grpc.CallOption) (*types.QueryParamsResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Params", varargs...) + ret0, _ := ret[0].(*types.QueryParamsResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Params indicates an expected call of Params. +func (mr *MockAuthQueryClientMockRecorder) Params(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Params", reflect.TypeOf((*MockAuthQueryClient)(nil).Params), varargs...) +} + +// MockServiceClient is a mock of ServiceClient interface. +type MockServiceClient struct { + ctrl *gomock.Controller + recorder *MockServiceClientMockRecorder + isgomock struct{} +} + +// MockServiceClientMockRecorder is the mock recorder for MockServiceClient. +type MockServiceClientMockRecorder struct { + mock *MockServiceClient +} + +// NewMockServiceClient creates a new mock instance. +func NewMockServiceClient(ctrl *gomock.Controller) *MockServiceClient { + mock := &MockServiceClient{ctrl: ctrl} + mock.recorder = &MockServiceClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockServiceClient) EXPECT() *MockServiceClientMockRecorder { + return m.recorder +} + +// BroadcastTx mocks base method. +func (m *MockServiceClient) BroadcastTx(ctx context.Context, in *tx.BroadcastTxRequest, opts ...grpc.CallOption) (*tx.BroadcastTxResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "BroadcastTx", varargs...) + ret0, _ := ret[0].(*tx.BroadcastTxResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// BroadcastTx indicates an expected call of BroadcastTx. +func (mr *MockServiceClientMockRecorder) BroadcastTx(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BroadcastTx", reflect.TypeOf((*MockServiceClient)(nil).BroadcastTx), varargs...) +} + +// GetBlockWithTxs mocks base method. +func (m *MockServiceClient) GetBlockWithTxs(ctx context.Context, in *tx.GetBlockWithTxsRequest, opts ...grpc.CallOption) (*tx.GetBlockWithTxsResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetBlockWithTxs", varargs...) + ret0, _ := ret[0].(*tx.GetBlockWithTxsResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetBlockWithTxs indicates an expected call of GetBlockWithTxs. +func (mr *MockServiceClientMockRecorder) GetBlockWithTxs(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBlockWithTxs", reflect.TypeOf((*MockServiceClient)(nil).GetBlockWithTxs), varargs...) +} + +// GetTx mocks base method. +func (m *MockServiceClient) GetTx(ctx context.Context, in *tx.GetTxRequest, opts ...grpc.CallOption) (*tx.GetTxResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetTx", varargs...) + ret0, _ := ret[0].(*tx.GetTxResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetTx indicates an expected call of GetTx. +func (mr *MockServiceClientMockRecorder) GetTx(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTx", reflect.TypeOf((*MockServiceClient)(nil).GetTx), varargs...) +} + +// GetTxsEvent mocks base method. +func (m *MockServiceClient) GetTxsEvent(ctx context.Context, in *tx.GetTxsEventRequest, opts ...grpc.CallOption) (*tx.GetTxsEventResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetTxsEvent", varargs...) + ret0, _ := ret[0].(*tx.GetTxsEventResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetTxsEvent indicates an expected call of GetTxsEvent. +func (mr *MockServiceClientMockRecorder) GetTxsEvent(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTxsEvent", reflect.TypeOf((*MockServiceClient)(nil).GetTxsEvent), varargs...) +} + +// Simulate mocks base method. +func (m *MockServiceClient) Simulate(ctx context.Context, in *tx.SimulateRequest, opts ...grpc.CallOption) (*tx.SimulateResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Simulate", varargs...) + ret0, _ := ret[0].(*tx.SimulateResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Simulate indicates an expected call of Simulate. +func (mr *MockServiceClientMockRecorder) Simulate(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Simulate", reflect.TypeOf((*MockServiceClient)(nil).Simulate), varargs...) +} + +// MockRPCClient is a mock of RPCClient interface. +type MockRPCClient struct { + ctrl *gomock.Controller + recorder *MockRPCClientMockRecorder + isgomock struct{} +} + +// MockRPCClientMockRecorder is the mock recorder for MockRPCClient. +type MockRPCClientMockRecorder struct { + mock *MockRPCClient +} + +// NewMockRPCClient creates a new mock instance. +func NewMockRPCClient(ctrl *gomock.Controller) *MockRPCClient { + mock := &MockRPCClient{ctrl: ctrl} + mock.recorder = &MockRPCClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockRPCClient) EXPECT() *MockRPCClientMockRecorder { + return m.recorder +} + +// ABCIInfo mocks base method. +func (m *MockRPCClient) ABCIInfo(arg0 context.Context) (*coretypes.ResultABCIInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ABCIInfo", arg0) + ret0, _ := ret[0].(*coretypes.ResultABCIInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ABCIInfo indicates an expected call of ABCIInfo. +func (mr *MockRPCClientMockRecorder) ABCIInfo(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ABCIInfo", reflect.TypeOf((*MockRPCClient)(nil).ABCIInfo), arg0) +} + +// ABCIQuery mocks base method. +func (m *MockRPCClient) ABCIQuery(ctx context.Context, path string, data bytes.HexBytes) (*coretypes.ResultABCIQuery, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ABCIQuery", ctx, path, data) + ret0, _ := ret[0].(*coretypes.ResultABCIQuery) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ABCIQuery indicates an expected call of ABCIQuery. +func (mr *MockRPCClientMockRecorder) ABCIQuery(ctx, path, data any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ABCIQuery", reflect.TypeOf((*MockRPCClient)(nil).ABCIQuery), ctx, path, data) +} + +// ABCIQueryWithOptions mocks base method. +func (m *MockRPCClient) ABCIQueryWithOptions(ctx context.Context, path string, data bytes.HexBytes, opts client.ABCIQueryOptions) (*coretypes.ResultABCIQuery, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ABCIQueryWithOptions", ctx, path, data, opts) + ret0, _ := ret[0].(*coretypes.ResultABCIQuery) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ABCIQueryWithOptions indicates an expected call of ABCIQueryWithOptions. +func (mr *MockRPCClientMockRecorder) ABCIQueryWithOptions(ctx, path, data, opts any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ABCIQueryWithOptions", reflect.TypeOf((*MockRPCClient)(nil).ABCIQueryWithOptions), ctx, path, data, opts) +} + +// Block mocks base method. +func (m *MockRPCClient) Block(ctx context.Context, height *int64) (*coretypes.ResultBlock, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Block", ctx, height) + ret0, _ := ret[0].(*coretypes.ResultBlock) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Block indicates an expected call of Block. +func (mr *MockRPCClientMockRecorder) Block(ctx, height any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Block", reflect.TypeOf((*MockRPCClient)(nil).Block), ctx, height) +} + +// BlockByHash mocks base method. +func (m *MockRPCClient) BlockByHash(ctx context.Context, hash []byte) (*coretypes.ResultBlock, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BlockByHash", ctx, hash) + ret0, _ := ret[0].(*coretypes.ResultBlock) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// BlockByHash indicates an expected call of BlockByHash. +func (mr *MockRPCClientMockRecorder) BlockByHash(ctx, hash any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BlockByHash", reflect.TypeOf((*MockRPCClient)(nil).BlockByHash), ctx, hash) +} + +// BlockResults mocks base method. +func (m *MockRPCClient) BlockResults(ctx context.Context, height *int64) (*coretypes.ResultBlockResults, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BlockResults", ctx, height) + ret0, _ := ret[0].(*coretypes.ResultBlockResults) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// BlockResults indicates an expected call of BlockResults. +func (mr *MockRPCClientMockRecorder) BlockResults(ctx, height any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BlockResults", reflect.TypeOf((*MockRPCClient)(nil).BlockResults), ctx, height) +} + +// BlockSearch mocks base method. +func (m *MockRPCClient) BlockSearch(ctx context.Context, query string, page, perPage *int, orderBy string) (*coretypes.ResultBlockSearch, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BlockSearch", ctx, query, page, perPage, orderBy) + ret0, _ := ret[0].(*coretypes.ResultBlockSearch) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// BlockSearch indicates an expected call of BlockSearch. +func (mr *MockRPCClientMockRecorder) BlockSearch(ctx, query, page, perPage, orderBy any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BlockSearch", reflect.TypeOf((*MockRPCClient)(nil).BlockSearch), ctx, query, page, perPage, orderBy) +} + +// BlockchainInfo mocks base method. +func (m *MockRPCClient) BlockchainInfo(ctx context.Context, minHeight, maxHeight int64) (*coretypes.ResultBlockchainInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BlockchainInfo", ctx, minHeight, maxHeight) + ret0, _ := ret[0].(*coretypes.ResultBlockchainInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// BlockchainInfo indicates an expected call of BlockchainInfo. +func (mr *MockRPCClientMockRecorder) BlockchainInfo(ctx, minHeight, maxHeight any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BlockchainInfo", reflect.TypeOf((*MockRPCClient)(nil).BlockchainInfo), ctx, minHeight, maxHeight) +} + +// BroadcastEvidence mocks base method. +func (m *MockRPCClient) BroadcastEvidence(arg0 context.Context, arg1 types1.Evidence) (*coretypes.ResultBroadcastEvidence, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BroadcastEvidence", arg0, arg1) + ret0, _ := ret[0].(*coretypes.ResultBroadcastEvidence) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// BroadcastEvidence indicates an expected call of BroadcastEvidence. +func (mr *MockRPCClientMockRecorder) BroadcastEvidence(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BroadcastEvidence", reflect.TypeOf((*MockRPCClient)(nil).BroadcastEvidence), arg0, arg1) +} + +// BroadcastTxAsync mocks base method. +func (m *MockRPCClient) BroadcastTxAsync(arg0 context.Context, arg1 types1.Tx) (*coretypes.ResultBroadcastTx, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BroadcastTxAsync", arg0, arg1) + ret0, _ := ret[0].(*coretypes.ResultBroadcastTx) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// BroadcastTxAsync indicates an expected call of BroadcastTxAsync. +func (mr *MockRPCClientMockRecorder) BroadcastTxAsync(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BroadcastTxAsync", reflect.TypeOf((*MockRPCClient)(nil).BroadcastTxAsync), arg0, arg1) +} + +// BroadcastTxCommit mocks base method. +func (m *MockRPCClient) BroadcastTxCommit(arg0 context.Context, arg1 types1.Tx) (*coretypes.ResultBroadcastTxCommit, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BroadcastTxCommit", arg0, arg1) + ret0, _ := ret[0].(*coretypes.ResultBroadcastTxCommit) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// BroadcastTxCommit indicates an expected call of BroadcastTxCommit. +func (mr *MockRPCClientMockRecorder) BroadcastTxCommit(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BroadcastTxCommit", reflect.TypeOf((*MockRPCClient)(nil).BroadcastTxCommit), arg0, arg1) +} + +// BroadcastTxSync mocks base method. +func (m *MockRPCClient) BroadcastTxSync(arg0 context.Context, arg1 types1.Tx) (*coretypes.ResultBroadcastTx, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BroadcastTxSync", arg0, arg1) + ret0, _ := ret[0].(*coretypes.ResultBroadcastTx) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// BroadcastTxSync indicates an expected call of BroadcastTxSync. +func (mr *MockRPCClientMockRecorder) BroadcastTxSync(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BroadcastTxSync", reflect.TypeOf((*MockRPCClient)(nil).BroadcastTxSync), arg0, arg1) +} + +// CheckTx mocks base method. +func (m *MockRPCClient) CheckTx(arg0 context.Context, arg1 types1.Tx) (*coretypes.ResultCheckTx, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CheckTx", arg0, arg1) + ret0, _ := ret[0].(*coretypes.ResultCheckTx) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CheckTx indicates an expected call of CheckTx. +func (mr *MockRPCClientMockRecorder) CheckTx(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CheckTx", reflect.TypeOf((*MockRPCClient)(nil).CheckTx), arg0, arg1) +} + +// Commit mocks base method. +func (m *MockRPCClient) Commit(ctx context.Context, height *int64) (*coretypes.ResultCommit, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Commit", ctx, height) + ret0, _ := ret[0].(*coretypes.ResultCommit) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Commit indicates an expected call of Commit. +func (mr *MockRPCClientMockRecorder) Commit(ctx, height any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Commit", reflect.TypeOf((*MockRPCClient)(nil).Commit), ctx, height) +} + +// ConsensusParams mocks base method. +func (m *MockRPCClient) ConsensusParams(ctx context.Context, height *int64) (*coretypes.ResultConsensusParams, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ConsensusParams", ctx, height) + ret0, _ := ret[0].(*coretypes.ResultConsensusParams) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ConsensusParams indicates an expected call of ConsensusParams. +func (mr *MockRPCClientMockRecorder) ConsensusParams(ctx, height any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ConsensusParams", reflect.TypeOf((*MockRPCClient)(nil).ConsensusParams), ctx, height) +} + +// ConsensusState mocks base method. +func (m *MockRPCClient) ConsensusState(arg0 context.Context) (*coretypes.ResultConsensusState, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ConsensusState", arg0) + ret0, _ := ret[0].(*coretypes.ResultConsensusState) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ConsensusState indicates an expected call of ConsensusState. +func (mr *MockRPCClientMockRecorder) ConsensusState(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ConsensusState", reflect.TypeOf((*MockRPCClient)(nil).ConsensusState), arg0) +} + +// DumpConsensusState mocks base method. +func (m *MockRPCClient) DumpConsensusState(arg0 context.Context) (*coretypes.ResultDumpConsensusState, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DumpConsensusState", arg0) + ret0, _ := ret[0].(*coretypes.ResultDumpConsensusState) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DumpConsensusState indicates an expected call of DumpConsensusState. +func (mr *MockRPCClientMockRecorder) DumpConsensusState(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DumpConsensusState", reflect.TypeOf((*MockRPCClient)(nil).DumpConsensusState), arg0) +} + +// Genesis mocks base method. +func (m *MockRPCClient) Genesis(arg0 context.Context) (*coretypes.ResultGenesis, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Genesis", arg0) + ret0, _ := ret[0].(*coretypes.ResultGenesis) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Genesis indicates an expected call of Genesis. +func (mr *MockRPCClientMockRecorder) Genesis(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Genesis", reflect.TypeOf((*MockRPCClient)(nil).Genesis), arg0) +} + +// GenesisChunked mocks base method. +func (m *MockRPCClient) GenesisChunked(arg0 context.Context, arg1 uint) (*coretypes.ResultGenesisChunk, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GenesisChunked", arg0, arg1) + ret0, _ := ret[0].(*coretypes.ResultGenesisChunk) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GenesisChunked indicates an expected call of GenesisChunked. +func (mr *MockRPCClientMockRecorder) GenesisChunked(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GenesisChunked", reflect.TypeOf((*MockRPCClient)(nil).GenesisChunked), arg0, arg1) +} + +// Health mocks base method. +func (m *MockRPCClient) Health(arg0 context.Context) (*coretypes.ResultHealth, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Health", arg0) + ret0, _ := ret[0].(*coretypes.ResultHealth) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Health indicates an expected call of Health. +func (mr *MockRPCClientMockRecorder) Health(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Health", reflect.TypeOf((*MockRPCClient)(nil).Health), arg0) +} + +// IsRunning mocks base method. +func (m *MockRPCClient) IsRunning() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "IsRunning") + ret0, _ := ret[0].(bool) + return ret0 +} + +// IsRunning indicates an expected call of IsRunning. +func (mr *MockRPCClientMockRecorder) IsRunning() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsRunning", reflect.TypeOf((*MockRPCClient)(nil).IsRunning)) +} + +// NetInfo mocks base method. +func (m *MockRPCClient) NetInfo(arg0 context.Context) (*coretypes.ResultNetInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetInfo", arg0) + ret0, _ := ret[0].(*coretypes.ResultNetInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NetInfo indicates an expected call of NetInfo. +func (mr *MockRPCClientMockRecorder) NetInfo(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetInfo", reflect.TypeOf((*MockRPCClient)(nil).NetInfo), arg0) +} + +// NumUnconfirmedTxs mocks base method. +func (m *MockRPCClient) NumUnconfirmedTxs(arg0 context.Context) (*coretypes.ResultUnconfirmedTxs, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NumUnconfirmedTxs", arg0) + ret0, _ := ret[0].(*coretypes.ResultUnconfirmedTxs) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NumUnconfirmedTxs indicates an expected call of NumUnconfirmedTxs. +func (mr *MockRPCClientMockRecorder) NumUnconfirmedTxs(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NumUnconfirmedTxs", reflect.TypeOf((*MockRPCClient)(nil).NumUnconfirmedTxs), arg0) +} + +// OnReset mocks base method. +func (m *MockRPCClient) OnReset() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnReset") + ret0, _ := ret[0].(error) + return ret0 +} + +// OnReset indicates an expected call of OnReset. +func (mr *MockRPCClientMockRecorder) OnReset() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnReset", reflect.TypeOf((*MockRPCClient)(nil).OnReset)) +} + +// OnStart mocks base method. +func (m *MockRPCClient) OnStart() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnStart") + ret0, _ := ret[0].(error) + return ret0 +} + +// OnStart indicates an expected call of OnStart. +func (mr *MockRPCClientMockRecorder) OnStart() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnStart", reflect.TypeOf((*MockRPCClient)(nil).OnStart)) +} + +// OnStop mocks base method. +func (m *MockRPCClient) OnStop() { + m.ctrl.T.Helper() + m.ctrl.Call(m, "OnStop") +} + +// OnStop indicates an expected call of OnStop. +func (mr *MockRPCClientMockRecorder) OnStop() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnStop", reflect.TypeOf((*MockRPCClient)(nil).OnStop)) +} + +// Quit mocks base method. +func (m *MockRPCClient) Quit() <-chan struct{} { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Quit") + ret0, _ := ret[0].(<-chan struct{}) + return ret0 +} + +// Quit indicates an expected call of Quit. +func (mr *MockRPCClientMockRecorder) Quit() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Quit", reflect.TypeOf((*MockRPCClient)(nil).Quit)) +} + +// Reset mocks base method. +func (m *MockRPCClient) Reset() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Reset") + ret0, _ := ret[0].(error) + return ret0 +} + +// Reset indicates an expected call of Reset. +func (mr *MockRPCClientMockRecorder) Reset() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Reset", reflect.TypeOf((*MockRPCClient)(nil).Reset)) +} + +// SetLogger mocks base method. +func (m *MockRPCClient) SetLogger(arg0 log.Logger) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "SetLogger", arg0) +} + +// SetLogger indicates an expected call of SetLogger. +func (mr *MockRPCClientMockRecorder) SetLogger(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetLogger", reflect.TypeOf((*MockRPCClient)(nil).SetLogger), arg0) +} + +// Start mocks base method. +func (m *MockRPCClient) Start() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Start") + ret0, _ := ret[0].(error) + return ret0 +} + +// Start indicates an expected call of Start. +func (mr *MockRPCClientMockRecorder) Start() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Start", reflect.TypeOf((*MockRPCClient)(nil).Start)) +} + +// Status mocks base method. +func (m *MockRPCClient) Status(arg0 context.Context) (*coretypes.ResultStatus, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Status", arg0) + ret0, _ := ret[0].(*coretypes.ResultStatus) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Status indicates an expected call of Status. +func (mr *MockRPCClientMockRecorder) Status(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Status", reflect.TypeOf((*MockRPCClient)(nil).Status), arg0) +} + +// Stop mocks base method. +func (m *MockRPCClient) Stop() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Stop") + ret0, _ := ret[0].(error) + return ret0 +} + +// Stop indicates an expected call of Stop. +func (mr *MockRPCClientMockRecorder) Stop() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Stop", reflect.TypeOf((*MockRPCClient)(nil).Stop)) +} + +// String mocks base method. +func (m *MockRPCClient) String() string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "String") + ret0, _ := ret[0].(string) + return ret0 +} + +// String indicates an expected call of String. +func (mr *MockRPCClientMockRecorder) String() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "String", reflect.TypeOf((*MockRPCClient)(nil).String)) +} + +// Subscribe mocks base method. +func (m *MockRPCClient) Subscribe(ctx context.Context, subscriber, query string, outCapacity ...int) (<-chan coretypes.ResultEvent, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, subscriber, query} + for _, a := range outCapacity { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Subscribe", varargs...) + ret0, _ := ret[0].(<-chan coretypes.ResultEvent) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Subscribe indicates an expected call of Subscribe. +func (mr *MockRPCClientMockRecorder) Subscribe(ctx, subscriber, query any, outCapacity ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, subscriber, query}, outCapacity...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Subscribe", reflect.TypeOf((*MockRPCClient)(nil).Subscribe), varargs...) +} + +// Tx mocks base method. +func (m *MockRPCClient) Tx(ctx context.Context, hash []byte, prove bool) (*coretypes.ResultTx, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Tx", ctx, hash, prove) + ret0, _ := ret[0].(*coretypes.ResultTx) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Tx indicates an expected call of Tx. +func (mr *MockRPCClientMockRecorder) Tx(ctx, hash, prove any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Tx", reflect.TypeOf((*MockRPCClient)(nil).Tx), ctx, hash, prove) +} + +// TxSearch mocks base method. +func (m *MockRPCClient) TxSearch(ctx context.Context, query string, prove bool, page, perPage *int, orderBy string) (*coretypes.ResultTxSearch, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "TxSearch", ctx, query, prove, page, perPage, orderBy) + ret0, _ := ret[0].(*coretypes.ResultTxSearch) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// TxSearch indicates an expected call of TxSearch. +func (mr *MockRPCClientMockRecorder) TxSearch(ctx, query, prove, page, perPage, orderBy any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TxSearch", reflect.TypeOf((*MockRPCClient)(nil).TxSearch), ctx, query, prove, page, perPage, orderBy) +} + +// UnconfirmedTxs mocks base method. +func (m *MockRPCClient) UnconfirmedTxs(ctx context.Context, limit *int) (*coretypes.ResultUnconfirmedTxs, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UnconfirmedTxs", ctx, limit) + ret0, _ := ret[0].(*coretypes.ResultUnconfirmedTxs) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UnconfirmedTxs indicates an expected call of UnconfirmedTxs. +func (mr *MockRPCClientMockRecorder) UnconfirmedTxs(ctx, limit any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UnconfirmedTxs", reflect.TypeOf((*MockRPCClient)(nil).UnconfirmedTxs), ctx, limit) +} + +// Unsubscribe mocks base method. +func (m *MockRPCClient) Unsubscribe(ctx context.Context, subscriber, query string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Unsubscribe", ctx, subscriber, query) + ret0, _ := ret[0].(error) + return ret0 +} + +// Unsubscribe indicates an expected call of Unsubscribe. +func (mr *MockRPCClientMockRecorder) Unsubscribe(ctx, subscriber, query any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Unsubscribe", reflect.TypeOf((*MockRPCClient)(nil).Unsubscribe), ctx, subscriber, query) +} + +// UnsubscribeAll mocks base method. +func (m *MockRPCClient) UnsubscribeAll(ctx context.Context, subscriber string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UnsubscribeAll", ctx, subscriber) + ret0, _ := ret[0].(error) + return ret0 +} + +// UnsubscribeAll indicates an expected call of UnsubscribeAll. +func (mr *MockRPCClientMockRecorder) UnsubscribeAll(ctx, subscriber any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UnsubscribeAll", reflect.TypeOf((*MockRPCClient)(nil).UnsubscribeAll), ctx, subscriber) +} + +// Validators mocks base method. +func (m *MockRPCClient) Validators(ctx context.Context, height *int64, page, perPage *int) (*coretypes.ResultValidators, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Validators", ctx, height, page, perPage) + ret0, _ := ret[0].(*coretypes.ResultValidators) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Validators indicates an expected call of Validators. +func (mr *MockRPCClientMockRecorder) Validators(ctx, height, page, perPage any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Validators", reflect.TypeOf((*MockRPCClient)(nil).Validators), ctx, height, page, perPage) +} + +// MockGRPCConn is a mock of GRPCConn interface. +type MockGRPCConn struct { + ctrl *gomock.Controller + recorder *MockGRPCConnMockRecorder + isgomock struct{} +} + +// MockGRPCConnMockRecorder is the mock recorder for MockGRPCConn. +type MockGRPCConnMockRecorder struct { + mock *MockGRPCConn +} + +// NewMockGRPCConn creates a new mock instance. +func NewMockGRPCConn(ctrl *gomock.Controller) *MockGRPCConn { + mock := &MockGRPCConn{ctrl: ctrl} + mock.recorder = &MockGRPCConnMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockGRPCConn) EXPECT() *MockGRPCConnMockRecorder { + return m.recorder +} + +// Invoke mocks base method. +func (m *MockGRPCConn) Invoke(ctx context.Context, method string, args, reply any, opts ...grpc.CallOption) error { + m.ctrl.T.Helper() + varargs := []any{ctx, method, args, reply} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Invoke", varargs...) + ret0, _ := ret[0].(error) + return ret0 +} + +// Invoke indicates an expected call of Invoke. +func (mr *MockGRPCConnMockRecorder) Invoke(ctx, method, args, reply any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, method, args, reply}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Invoke", reflect.TypeOf((*MockGRPCConn)(nil).Invoke), varargs...) +} + +// NewStream mocks base method. +func (m *MockGRPCConn) NewStream(ctx context.Context, desc *grpc.StreamDesc, method string, opts ...grpc.CallOption) (grpc.ClientStream, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, desc, method} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "NewStream", varargs...) + ret0, _ := ret[0].(grpc.ClientStream) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NewStream indicates an expected call of NewStream. +func (mr *MockGRPCConnMockRecorder) NewStream(ctx, desc, method any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, desc, method}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewStream", reflect.TypeOf((*MockGRPCConn)(nil).NewStream), varargs...) +} + +// MockStorageQueryClient is a mock of StorageQueryClient interface. +type MockStorageQueryClient struct { + ctrl *gomock.Controller + recorder *MockStorageQueryClientMockRecorder + isgomock struct{} +} + +// MockStorageQueryClientMockRecorder is the mock recorder for MockStorageQueryClient. +type MockStorageQueryClientMockRecorder struct { + mock *MockStorageQueryClient +} + +// NewMockStorageQueryClient creates a new mock instance. +func NewMockStorageQueryClient(ctrl *gomock.Controller) *MockStorageQueryClient { + mock := &MockStorageQueryClient{ctrl: ctrl} + mock.recorder = &MockStorageQueryClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockStorageQueryClient) EXPECT() *MockStorageQueryClientMockRecorder { + return m.recorder +} + +// ActiveProviders mocks base method. +func (m *MockStorageQueryClient) ActiveProviders(ctx context.Context, in *types0.QueryActiveProviders, opts ...grpc.CallOption) (*types0.QueryActiveProvidersResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ActiveProviders", varargs...) + ret0, _ := ret[0].(*types0.QueryActiveProvidersResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ActiveProviders indicates an expected call of ActiveProviders. +func (mr *MockStorageQueryClientMockRecorder) ActiveProviders(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ActiveProviders", reflect.TypeOf((*MockStorageQueryClient)(nil).ActiveProviders), varargs...) +} + +// AllAttestations mocks base method. +func (m *MockStorageQueryClient) AllAttestations(ctx context.Context, in *types0.QueryAllAttestations, opts ...grpc.CallOption) (*types0.QueryAllAttestationsResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "AllAttestations", varargs...) + ret0, _ := ret[0].(*types0.QueryAllAttestationsResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AllAttestations indicates an expected call of AllAttestations. +func (mr *MockStorageQueryClientMockRecorder) AllAttestations(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AllAttestations", reflect.TypeOf((*MockStorageQueryClient)(nil).AllAttestations), varargs...) +} + +// AllFiles mocks base method. +func (m *MockStorageQueryClient) AllFiles(ctx context.Context, in *types0.QueryAllFiles, opts ...grpc.CallOption) (*types0.QueryAllFilesResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "AllFiles", varargs...) + ret0, _ := ret[0].(*types0.QueryAllFilesResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AllFiles indicates an expected call of AllFiles. +func (mr *MockStorageQueryClientMockRecorder) AllFiles(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AllFiles", reflect.TypeOf((*MockStorageQueryClient)(nil).AllFiles), varargs...) +} + +// AllFilesByMerkle mocks base method. +func (m *MockStorageQueryClient) AllFilesByMerkle(ctx context.Context, in *types0.QueryAllFilesByMerkle, opts ...grpc.CallOption) (*types0.QueryAllFilesByMerkleResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "AllFilesByMerkle", varargs...) + ret0, _ := ret[0].(*types0.QueryAllFilesByMerkleResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AllFilesByMerkle indicates an expected call of AllFilesByMerkle. +func (mr *MockStorageQueryClientMockRecorder) AllFilesByMerkle(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AllFilesByMerkle", reflect.TypeOf((*MockStorageQueryClient)(nil).AllFilesByMerkle), varargs...) +} + +// AllFilesByOwner mocks base method. +func (m *MockStorageQueryClient) AllFilesByOwner(ctx context.Context, in *types0.QueryAllFilesByOwner, opts ...grpc.CallOption) (*types0.QueryAllFilesByOwnerResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "AllFilesByOwner", varargs...) + ret0, _ := ret[0].(*types0.QueryAllFilesByOwnerResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AllFilesByOwner indicates an expected call of AllFilesByOwner. +func (mr *MockStorageQueryClientMockRecorder) AllFilesByOwner(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AllFilesByOwner", reflect.TypeOf((*MockStorageQueryClient)(nil).AllFilesByOwner), varargs...) +} + +// AllProofs mocks base method. +func (m *MockStorageQueryClient) AllProofs(ctx context.Context, in *types0.QueryAllProofs, opts ...grpc.CallOption) (*types0.QueryAllProofsResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "AllProofs", varargs...) + ret0, _ := ret[0].(*types0.QueryAllProofsResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AllProofs indicates an expected call of AllProofs. +func (mr *MockStorageQueryClientMockRecorder) AllProofs(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AllProofs", reflect.TypeOf((*MockStorageQueryClient)(nil).AllProofs), varargs...) +} + +// AllProviders mocks base method. +func (m *MockStorageQueryClient) AllProviders(ctx context.Context, in *types0.QueryAllProviders, opts ...grpc.CallOption) (*types0.QueryAllProvidersResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "AllProviders", varargs...) + ret0, _ := ret[0].(*types0.QueryAllProvidersResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AllProviders indicates an expected call of AllProviders. +func (mr *MockStorageQueryClientMockRecorder) AllProviders(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AllProviders", reflect.TypeOf((*MockStorageQueryClient)(nil).AllProviders), varargs...) +} + +// AllReports mocks base method. +func (m *MockStorageQueryClient) AllReports(ctx context.Context, in *types0.QueryAllReports, opts ...grpc.CallOption) (*types0.QueryAllReportsResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "AllReports", varargs...) + ret0, _ := ret[0].(*types0.QueryAllReportsResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AllReports indicates an expected call of AllReports. +func (mr *MockStorageQueryClientMockRecorder) AllReports(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AllReports", reflect.TypeOf((*MockStorageQueryClient)(nil).AllReports), varargs...) +} + +// AllStoragePaymentInfo mocks base method. +func (m *MockStorageQueryClient) AllStoragePaymentInfo(ctx context.Context, in *types0.QueryAllStoragePaymentInfo, opts ...grpc.CallOption) (*types0.QueryAllStoragePaymentInfoResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "AllStoragePaymentInfo", varargs...) + ret0, _ := ret[0].(*types0.QueryAllStoragePaymentInfoResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AllStoragePaymentInfo indicates an expected call of AllStoragePaymentInfo. +func (mr *MockStorageQueryClientMockRecorder) AllStoragePaymentInfo(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AllStoragePaymentInfo", reflect.TypeOf((*MockStorageQueryClient)(nil).AllStoragePaymentInfo), varargs...) +} + +// Attestation mocks base method. +func (m *MockStorageQueryClient) Attestation(ctx context.Context, in *types0.QueryAttestation, opts ...grpc.CallOption) (*types0.QueryAttestationResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Attestation", varargs...) + ret0, _ := ret[0].(*types0.QueryAttestationResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Attestation indicates an expected call of Attestation. +func (mr *MockStorageQueryClientMockRecorder) Attestation(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Attestation", reflect.TypeOf((*MockStorageQueryClient)(nil).Attestation), varargs...) +} + +// AvailableSpace mocks base method. +func (m *MockStorageQueryClient) AvailableSpace(ctx context.Context, in *types0.QueryAvailableSpace, opts ...grpc.CallOption) (*types0.QueryAvailableSpaceResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "AvailableSpace", varargs...) + ret0, _ := ret[0].(*types0.QueryAvailableSpaceResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AvailableSpace indicates an expected call of AvailableSpace. +func (mr *MockStorageQueryClientMockRecorder) AvailableSpace(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AvailableSpace", reflect.TypeOf((*MockStorageQueryClient)(nil).AvailableSpace), varargs...) +} + +// File mocks base method. +func (m *MockStorageQueryClient) File(ctx context.Context, in *types0.QueryFile, opts ...grpc.CallOption) (*types0.QueryFileResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "File", varargs...) + ret0, _ := ret[0].(*types0.QueryFileResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// File indicates an expected call of File. +func (mr *MockStorageQueryClientMockRecorder) File(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "File", reflect.TypeOf((*MockStorageQueryClient)(nil).File), varargs...) +} + +// FileUploadCheck mocks base method. +func (m *MockStorageQueryClient) FileUploadCheck(ctx context.Context, in *types0.QueryFileUploadCheck, opts ...grpc.CallOption) (*types0.QueryFileUploadCheckResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "FileUploadCheck", varargs...) + ret0, _ := ret[0].(*types0.QueryFileUploadCheckResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FileUploadCheck indicates an expected call of FileUploadCheck. +func (mr *MockStorageQueryClientMockRecorder) FileUploadCheck(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FileUploadCheck", reflect.TypeOf((*MockStorageQueryClient)(nil).FileUploadCheck), varargs...) +} + +// FilesFromNote mocks base method. +func (m *MockStorageQueryClient) FilesFromNote(ctx context.Context, in *types0.QueryFilesFromNote, opts ...grpc.CallOption) (*types0.QueryFilesFromNoteResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "FilesFromNote", varargs...) + ret0, _ := ret[0].(*types0.QueryFilesFromNoteResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FilesFromNote indicates an expected call of FilesFromNote. +func (mr *MockStorageQueryClientMockRecorder) FilesFromNote(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FilesFromNote", reflect.TypeOf((*MockStorageQueryClient)(nil).FilesFromNote), varargs...) +} + +// FindFile mocks base method. +func (m *MockStorageQueryClient) FindFile(ctx context.Context, in *types0.QueryFindFile, opts ...grpc.CallOption) (*types0.QueryFindFileResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "FindFile", varargs...) + ret0, _ := ret[0].(*types0.QueryFindFileResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FindFile indicates an expected call of FindFile. +func (mr *MockStorageQueryClientMockRecorder) FindFile(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindFile", reflect.TypeOf((*MockStorageQueryClient)(nil).FindFile), varargs...) +} + +// FreeSpace mocks base method. +func (m *MockStorageQueryClient) FreeSpace(ctx context.Context, in *types0.QueryFreeSpace, opts ...grpc.CallOption) (*types0.QueryFreeSpaceResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "FreeSpace", varargs...) + ret0, _ := ret[0].(*types0.QueryFreeSpaceResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FreeSpace indicates an expected call of FreeSpace. +func (mr *MockStorageQueryClientMockRecorder) FreeSpace(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FreeSpace", reflect.TypeOf((*MockStorageQueryClient)(nil).FreeSpace), varargs...) +} + +// Gauges mocks base method. +func (m *MockStorageQueryClient) Gauges(ctx context.Context, in *types0.QueryAllGauges, opts ...grpc.CallOption) (*types0.QueryAllGaugesResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Gauges", varargs...) + ret0, _ := ret[0].(*types0.QueryAllGaugesResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Gauges indicates an expected call of Gauges. +func (mr *MockStorageQueryClientMockRecorder) Gauges(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Gauges", reflect.TypeOf((*MockStorageQueryClient)(nil).Gauges), varargs...) +} + +// GetClientFreeSpace mocks base method. +func (m *MockStorageQueryClient) GetClientFreeSpace(ctx context.Context, in *types0.QueryClientFreeSpace, opts ...grpc.CallOption) (*types0.QueryClientFreeSpaceResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetClientFreeSpace", varargs...) + ret0, _ := ret[0].(*types0.QueryClientFreeSpaceResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetClientFreeSpace indicates an expected call of GetClientFreeSpace. +func (mr *MockStorageQueryClientMockRecorder) GetClientFreeSpace(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetClientFreeSpace", reflect.TypeOf((*MockStorageQueryClient)(nil).GetClientFreeSpace), varargs...) +} + +// GetPayData mocks base method. +func (m *MockStorageQueryClient) GetPayData(ctx context.Context, in *types0.QueryPayData, opts ...grpc.CallOption) (*types0.QueryPayDataResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetPayData", varargs...) + ret0, _ := ret[0].(*types0.QueryPayDataResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetPayData indicates an expected call of GetPayData. +func (mr *MockStorageQueryClientMockRecorder) GetPayData(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPayData", reflect.TypeOf((*MockStorageQueryClient)(nil).GetPayData), varargs...) +} + +// NetworkSize mocks base method. +func (m *MockStorageQueryClient) NetworkSize(ctx context.Context, in *types0.QueryNetworkSize, opts ...grpc.CallOption) (*types0.QueryNetworkSizeResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "NetworkSize", varargs...) + ret0, _ := ret[0].(*types0.QueryNetworkSizeResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NetworkSize indicates an expected call of NetworkSize. +func (mr *MockStorageQueryClientMockRecorder) NetworkSize(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkSize", reflect.TypeOf((*MockStorageQueryClient)(nil).NetworkSize), varargs...) +} + +// OpenFiles mocks base method. +func (m *MockStorageQueryClient) OpenFiles(ctx context.Context, in *types0.QueryOpenFiles, opts ...grpc.CallOption) (*types0.QueryAllFilesResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "OpenFiles", varargs...) + ret0, _ := ret[0].(*types0.QueryAllFilesResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// OpenFiles indicates an expected call of OpenFiles. +func (mr *MockStorageQueryClientMockRecorder) OpenFiles(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OpenFiles", reflect.TypeOf((*MockStorageQueryClient)(nil).OpenFiles), varargs...) +} + +// Params mocks base method. +func (m *MockStorageQueryClient) Params(ctx context.Context, in *types0.QueryParams, opts ...grpc.CallOption) (*types0.QueryParamsResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Params", varargs...) + ret0, _ := ret[0].(*types0.QueryParamsResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Params indicates an expected call of Params. +func (mr *MockStorageQueryClientMockRecorder) Params(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Params", reflect.TypeOf((*MockStorageQueryClient)(nil).Params), varargs...) +} + +// PriceCheck mocks base method. +func (m *MockStorageQueryClient) PriceCheck(ctx context.Context, in *types0.QueryPriceCheck, opts ...grpc.CallOption) (*types0.QueryPriceCheckResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "PriceCheck", varargs...) + ret0, _ := ret[0].(*types0.QueryPriceCheckResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PriceCheck indicates an expected call of PriceCheck. +func (mr *MockStorageQueryClientMockRecorder) PriceCheck(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PriceCheck", reflect.TypeOf((*MockStorageQueryClient)(nil).PriceCheck), varargs...) +} + +// Proof mocks base method. +func (m *MockStorageQueryClient) Proof(ctx context.Context, in *types0.QueryProof, opts ...grpc.CallOption) (*types0.QueryProofResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Proof", varargs...) + ret0, _ := ret[0].(*types0.QueryProofResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Proof indicates an expected call of Proof. +func (mr *MockStorageQueryClientMockRecorder) Proof(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Proof", reflect.TypeOf((*MockStorageQueryClient)(nil).Proof), varargs...) +} + +// ProofsByAddress mocks base method. +func (m *MockStorageQueryClient) ProofsByAddress(ctx context.Context, in *types0.QueryProofsByAddress, opts ...grpc.CallOption) (*types0.QueryProofsByAddressResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ProofsByAddress", varargs...) + ret0, _ := ret[0].(*types0.QueryProofsByAddressResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ProofsByAddress indicates an expected call of ProofsByAddress. +func (mr *MockStorageQueryClientMockRecorder) ProofsByAddress(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProofsByAddress", reflect.TypeOf((*MockStorageQueryClient)(nil).ProofsByAddress), varargs...) +} + +// Provider mocks base method. +func (m *MockStorageQueryClient) Provider(ctx context.Context, in *types0.QueryProvider, opts ...grpc.CallOption) (*types0.QueryProviderResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Provider", varargs...) + ret0, _ := ret[0].(*types0.QueryProviderResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Provider indicates an expected call of Provider. +func (mr *MockStorageQueryClientMockRecorder) Provider(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Provider", reflect.TypeOf((*MockStorageQueryClient)(nil).Provider), varargs...) +} + +// Report mocks base method. +func (m *MockStorageQueryClient) Report(ctx context.Context, in *types0.QueryReport, opts ...grpc.CallOption) (*types0.QueryReportResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Report", varargs...) + ret0, _ := ret[0].(*types0.QueryReportResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Report indicates an expected call of Report. +func (mr *MockStorageQueryClientMockRecorder) Report(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Report", reflect.TypeOf((*MockStorageQueryClient)(nil).Report), varargs...) +} + +// StoragePaymentInfo mocks base method. +func (m *MockStorageQueryClient) StoragePaymentInfo(ctx context.Context, in *types0.QueryStoragePaymentInfo, opts ...grpc.CallOption) (*types0.QueryStoragePaymentInfoResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "StoragePaymentInfo", varargs...) + ret0, _ := ret[0].(*types0.QueryStoragePaymentInfoResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StoragePaymentInfo indicates an expected call of StoragePaymentInfo. +func (mr *MockStorageQueryClientMockRecorder) StoragePaymentInfo(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StoragePaymentInfo", reflect.TypeOf((*MockStorageQueryClient)(nil).StoragePaymentInfo), varargs...) +} + +// StorageStats mocks base method. +func (m *MockStorageQueryClient) StorageStats(ctx context.Context, in *types0.QueryStorageStats, opts ...grpc.CallOption) (*types0.QueryStorageStatsResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "StorageStats", varargs...) + ret0, _ := ret[0].(*types0.QueryStorageStatsResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StorageStats indicates an expected call of StorageStats. +func (mr *MockStorageQueryClientMockRecorder) StorageStats(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StorageStats", reflect.TypeOf((*MockStorageQueryClient)(nil).StorageStats), varargs...) +} + +// StoreCount mocks base method. +func (m *MockStorageQueryClient) StoreCount(ctx context.Context, in *types0.QueryStoreCount, opts ...grpc.CallOption) (*types0.QueryStoreCountResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "StoreCount", varargs...) + ret0, _ := ret[0].(*types0.QueryStoreCountResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StoreCount indicates an expected call of StoreCount. +func (mr *MockStorageQueryClientMockRecorder) StoreCount(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StoreCount", reflect.TypeOf((*MockStorageQueryClient)(nil).StoreCount), varargs...) +} diff --git a/testutil/mocks/setup.go b/testutil/mocks/setup.go new file mode 100644 index 0000000..d1083f3 --- /dev/null +++ b/testutil/mocks/setup.go @@ -0,0 +1,33 @@ +package mocks + +import ( + "go.uber.org/mock/gomock" +) + +func SetupAuthClient(t gomock.TestReporter) *MockAuthQueryClient { + ctrl := gomock.NewController(t) + return NewMockAuthQueryClient(ctrl) +} + +func SetupServiceClient(t gomock.TestReporter) *MockServiceClient { + ctrl := gomock.NewController(t) + return NewMockServiceClient(ctrl) +} + +func SetupRPCClient(t gomock.TestReporter) *MockRPCClient { + ctrl := gomock.NewController(t) + return NewMockRPCClient(ctrl) +} + +func SetupGRPCConn(t gomock.TestReporter) *MockGRPCConn { + ctrl := gomock.NewController(t) + grpc := NewMockGRPCConn(ctrl) + + return grpc +} + +func SetupStorageQueryClient(t gomock.TestReporter) StorageQueryClient { + ctrl := gomock.NewController(t) + + return NewMockStorageQueryClient(ctrl) +} diff --git a/testutil/txBuilder.go b/testutil/txBuilder.go new file mode 100644 index 0000000..bce2cb7 --- /dev/null +++ b/testutil/txBuilder.go @@ -0,0 +1,26 @@ +package testutil + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/cosmos/cosmos-sdk/x/feegrant" + "github.com/jackalLabs/canine-chain/v4/types/module/testutil" + storageTypes "github.com/jackalLabs/canine-chain/v4/x/storage/types" +) + +func GetTxDecoder() sdk.TxDecoder { + cfg := MakeTestEncodingConfig() + + return cfg.TxConfig.TxDecoder() +} + +func MakeTestEncodingConfig() testutil.TestEncodingConfig { + cfg := testutil.MakeTestEncodingConfig() + + storageTypes.RegisterInterfaces(cfg.InterfaceRegistry) + banktypes.RegisterInterfaces(cfg.InterfaceRegistry) + authtypes.RegisterInterfaces(cfg.InterfaceRegistry) + feegrant.RegisterInterfaces(cfg.InterfaceRegistry) + return cfg +} diff --git a/wallet/wallet.go b/wallet/wallet.go index bcdb23b..52f6db2 100644 --- a/wallet/wallet.go +++ b/wallet/wallet.go @@ -11,6 +11,19 @@ import ( canine "github.com/jackalLabs/canine-chain/v4/app" ) +// creates count wallets from main wallet +func CreateOffsetWallets(main *wallet.Wallet, count int) (offsetWallets []*wallet.Wallet, err error) { + for i := range count { + w, err := main.CloneWalletOffset(byte(i + 1)) + if err != nil { + return nil, err + } + offsetWallets = append(offsetWallets, w) + } + + return offsetWallets, nil +} + func CreateWallet(seed string, derivation string, chainCfg types.ChainConfig) (*wallet.Wallet, error) { accountCfg := types.AccountConfig{ Mnemonic: seed, // forward service profit benefit punch catch fan chief jealous steel harvest column spell rude warm home melody hat broccoli pulse say garlic you firm