From d96b6c5163e3b61c42bfd1d36d964c47cbaf0efd Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Wed, 20 Nov 2024 19:12:58 +0000 Subject: [PATCH 01/19] bump math v1.3.0 -> v1.4.0 --- go.mod | 6 ++---- go.sum | 4 ++-- go.work.sum | 2 ++ 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index cade0590d..b769c3cf7 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.23.3 require ( cosmossdk.io/errors v1.0.1 - cosmossdk.io/math v1.3.0 + cosmossdk.io/math v1.4.0 github.com/armon/go-metrics v0.4.1 github.com/celestiaorg/go-square/v2 v2.0.0 github.com/celestiaorg/nmt v0.22.2 @@ -359,6 +359,4 @@ replace ( github.com/tendermint/tm-db => github.com/notional-labs/tm-db v0.11.0 ) -retract ( - v1.7.0 // safety bug -) +retract v1.7.0 // safety bug diff --git a/go.sum b/go.sum index 7f7436d1e..e61439eb0 100644 --- a/go.sum +++ b/go.sum @@ -194,8 +194,8 @@ cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1V cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= -cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= +cosmossdk.io/math v1.4.0 h1:XbgExXFnXmF/CccPPEto40gOO7FpWu9yWNAZPN3nkNQ= +cosmossdk.io/math v1.4.0/go.mod h1:O5PkD4apz2jZs4zqFdTr16e1dcaQCc5z6lkEnrrppuk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= diff --git a/go.work.sum b/go.work.sum index e72f4eadc..e6c3a5f67 100644 --- a/go.work.sum +++ b/go.work.sum @@ -493,6 +493,8 @@ cloud.google.com/go/workflows v1.12.6 h1:2bE69mh68law1UZWPjgmvOQsjsGSppRudABAXwN cloud.google.com/go/workflows v1.12.6/go.mod h1:oDbEHKa4otYg4abwdw2Z094jB0TLLiFGAPA78EDAKag= cloud.google.com/go/workflows v1.13.0 h1:LHZQw+fkCWN/zRSHEWcwEnh8xHGt76yd/4Gf6Pt0zbU= cloud.google.com/go/workflows v1.13.0/go.mod h1:StCuY3jhBj1HYMjCPqZs7J0deQLHPhF6hDtzWJaVF+Y= +cosmossdk.io/math v1.4.0 h1:XbgExXFnXmF/CccPPEto40gOO7FpWu9yWNAZPN3nkNQ= +cosmossdk.io/math v1.4.0/go.mod h1:O5PkD4apz2jZs4zqFdTr16e1dcaQCc5z6lkEnrrppuk= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= From f0bfd406452609084cbcc3af711cabb4590d0d34 Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Thu, 4 Apr 2024 20:09:51 +0100 Subject: [PATCH 02/19] event manager initial implementation --- app/keepers/keepers.go | 11 +- app/keepers/keys.go | 2 + app/upgrades.go | 5 + app/upgrades/types.go | 1 + app/upgrades/v1_9.go | 18 + go.work.sum | 7 +- x/eventmanager/keeper/conditions.go | 60 ++ x/eventmanager/keeper/events.go | 94 +++ x/eventmanager/keeper/grpc_query.go | 50 ++ x/eventmanager/keeper/grpc_query_test.go | 39 ++ x/eventmanager/keeper/keeper.go | 58 ++ x/eventmanager/keeper/keeper_test.go | 208 ++++++ x/eventmanager/module.go | 178 +++++ x/eventmanager/types/callbacks.go | 12 + x/eventmanager/types/codec.go | 25 + x/eventmanager/types/fields.go | 67 ++ x/eventmanager/types/genesis.go | 12 + x/eventmanager/types/genesis.pb.go | 818 +++++++++++++++++++++++ x/eventmanager/types/keys.go | 36 + x/eventmanager/types/query.pb.go | 723 ++++++++++++++++++++ x/eventmanager/types/query.pb.gw.go | 207 ++++++ x/interchainstaking/keeper/events.go | 59 ++ 22 files changed, 2685 insertions(+), 5 deletions(-) create mode 100644 app/upgrades/v1_9.go create mode 100644 x/eventmanager/keeper/conditions.go create mode 100644 x/eventmanager/keeper/events.go create mode 100644 x/eventmanager/keeper/grpc_query.go create mode 100644 x/eventmanager/keeper/grpc_query_test.go create mode 100644 x/eventmanager/keeper/keeper.go create mode 100644 x/eventmanager/keeper/keeper_test.go create mode 100644 x/eventmanager/module.go create mode 100644 x/eventmanager/types/callbacks.go create mode 100644 x/eventmanager/types/codec.go create mode 100644 x/eventmanager/types/fields.go create mode 100644 x/eventmanager/types/genesis.go create mode 100644 x/eventmanager/types/genesis.pb.go create mode 100644 x/eventmanager/types/keys.go create mode 100644 x/eventmanager/types/query.pb.go create mode 100644 x/eventmanager/types/query.pb.gw.go create mode 100644 x/interchainstaking/keeper/events.go diff --git a/app/keepers/keepers.go b/app/keepers/keepers.go index f4338c7d3..ed39686e3 100644 --- a/app/keepers/keepers.go +++ b/app/keepers/keepers.go @@ -67,6 +67,8 @@ import ( claimsmanagertypes "github.com/quicksilver-zone/quicksilver/x/claimsmanager/types" epochskeeper "github.com/quicksilver-zone/quicksilver/x/epochs/keeper" epochstypes "github.com/quicksilver-zone/quicksilver/x/epochs/types" + emkeeper "github.com/quicksilver-zone/quicksilver/x/eventmanager/keeper" + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" interchainquerykeeper "github.com/quicksilver-zone/quicksilver/x/interchainquery/keeper" interchainquerytypes "github.com/quicksilver-zone/quicksilver/x/interchainquery/types" "github.com/quicksilver-zone/quicksilver/x/interchainstaking" @@ -110,6 +112,7 @@ type AppKeepers struct { ClaimsManagerKeeper claimsmanagerkeeper.Keeper InterchainstakingKeeper *interchainstakingkeeper.Keeper InterchainQueryKeeper interchainquerykeeper.Keeper + EventManagerKeeper emkeeper.Keeper ParticipationRewardsKeeper *participationrewardskeeper.Keeper AirdropKeeper *airdropkeeper.Keeper SupplyKeeper supplykeeper.Keeper @@ -376,8 +379,7 @@ func (appKeepers *AppKeepers) InitKeepers( // claimsmanagerModule := claimsmanager.NewAppModule(appCodec, appKeepers.ClaimsManagerKeeper) appKeepers.InterchainQueryKeeper = interchainquerykeeper.NewKeeper(appCodec, appKeepers.keys[interchainquerytypes.StoreKey], appKeepers.IBCKeeper) - - // interchainQueryModule := interchainquery.NewAppModule(appCodec, appKeepers.InterchainQueryKeeper) + appKeepers.EventManagerKeeper = emkeeper.NewKeeper(appCodec, appKeepers.keys[emtypes.StoreKey]) appKeepers.InterchainstakingKeeper = interchainstakingkeeper.NewKeeper( appCodec, @@ -418,7 +420,9 @@ func (appKeepers *AppKeepers) InitKeepers( panic(err) } - // participationrewardsModule := participationrewards.NewAppModule(appCodec, appKeepers.ParticipationRewardsKeeper) + if err := appKeepers.EventManagerKeeper.SetCallbackHandler(interchainstakingtypes.ModuleName, appKeepers.InterchainstakingKeeper.EventCallbackHandler()); err != nil { + panic(err) + } if err := appKeepers.InterchainQueryKeeper.SetCallbackHandler(participationrewardstypes.ModuleName, appKeepers.ParticipationRewardsKeeper.CallbackHandler()); err != nil { panic(err) @@ -535,6 +539,7 @@ func (*AppKeepers) initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *cod paramsKeeper.Subspace(minttypes.ModuleName) paramsKeeper.Subspace(interchainstakingtypes.ModuleName) paramsKeeper.Subspace(interchainquerytypes.ModuleName) + paramsKeeper.Subspace(emtypes.ModuleName) paramsKeeper.Subspace(participationrewardstypes.ModuleName) paramsKeeper.Subspace(airdroptypes.ModuleName) diff --git a/app/keepers/keys.go b/app/keepers/keys.go index 56d3e5a70..ba3240dfd 100644 --- a/app/keepers/keys.go +++ b/app/keepers/keys.go @@ -26,6 +26,7 @@ import ( airdroptypes "github.com/quicksilver-zone/quicksilver/x/airdrop/types" claimsmanagertypes "github.com/quicksilver-zone/quicksilver/x/claimsmanager/types" epochstypes "github.com/quicksilver-zone/quicksilver/x/epochs/types" + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" interchainquerytypes "github.com/quicksilver-zone/quicksilver/x/interchainquery/types" interchainstakingtypes "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types" minttypes "github.com/quicksilver-zone/quicksilver/x/mint/types" @@ -61,6 +62,7 @@ func KVStoreKeys() []string { epochstypes.StoreKey, interchainstakingtypes.StoreKey, interchainquerytypes.StoreKey, + emtypes.StoreKey, participationrewardstypes.StoreKey, airdroptypes.StoreKey, supplytypes.StoreKey, diff --git a/app/upgrades.go b/app/upgrades.go index ebff9126d..ce94f142a 100644 --- a/app/upgrades.go +++ b/app/upgrades.go @@ -13,6 +13,7 @@ import ( v6 "github.com/cosmos/ibc-go/v6/testing/simapp/upgrades/v6" // nolint:revive "github.com/quicksilver-zone/quicksilver/app/upgrades" + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" supplytypes "github.com/quicksilver-zone/quicksilver/x/supply/types" ) @@ -76,6 +77,10 @@ func (app *Quicksilver) setUpgradeStoreLoaders() { storeUpgrades = &storetypes.StoreUpgrades{ Deleted: []string{wasmModuleName, tfModuleName}, } + case upgrades.V010900UpgradeName: + storeUpgrades = &storetypes.StoreUpgrades{ + Added: []string{emtypes.ModuleName}, + } default: // no-op } diff --git a/app/upgrades/types.go b/app/upgrades/types.go index cc3e72469..68b98741d 100644 --- a/app/upgrades/types.go +++ b/app/upgrades/types.go @@ -51,6 +51,7 @@ const ( V010700UpgradeName = "v1.7.0" V010702UpgradeName = "v1.7.2" + V010900UpgradeName = "v1.9.0" ) // Upgrade defines a struct containing necessary fields that a SoftwareUpgradeProposal diff --git a/app/upgrades/v1_9.go b/app/upgrades/v1_9.go new file mode 100644 index 000000000..b8cd6e9cc --- /dev/null +++ b/app/upgrades/v1_9.go @@ -0,0 +1,18 @@ +package upgrades + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + "github.com/quicksilver-zone/quicksilver/app/keepers" +) + +func V010900UpgradeHandler( + mm *module.Manager, + configurator module.Configurator, + appKeepers *keepers.AppKeepers, +) upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + return mm.RunMigrations(ctx, configurator, fromVM) + } +} diff --git a/go.work.sum b/go.work.sum index e6c3a5f67..a074ecc83 100644 --- a/go.work.sum +++ b/go.work.sum @@ -493,8 +493,6 @@ cloud.google.com/go/workflows v1.12.6 h1:2bE69mh68law1UZWPjgmvOQsjsGSppRudABAXwN cloud.google.com/go/workflows v1.12.6/go.mod h1:oDbEHKa4otYg4abwdw2Z094jB0TLLiFGAPA78EDAKag= cloud.google.com/go/workflows v1.13.0 h1:LHZQw+fkCWN/zRSHEWcwEnh8xHGt76yd/4Gf6Pt0zbU= cloud.google.com/go/workflows v1.13.0/go.mod h1:StCuY3jhBj1HYMjCPqZs7J0deQLHPhF6hDtzWJaVF+Y= -cosmossdk.io/math v1.4.0 h1:XbgExXFnXmF/CccPPEto40gOO7FpWu9yWNAZPN3nkNQ= -cosmossdk.io/math v1.4.0/go.mod h1:O5PkD4apz2jZs4zqFdTr16e1dcaQCc5z6lkEnrrppuk= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= @@ -1127,6 +1125,7 @@ github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFH github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267 h1:TMtDYDHKYY15rFihtRfck/bfFqNfvcabqvXAFQfAUpY= github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267/go.mod h1:h1nSAbGFqGVzn6Jyl1R/iCcBUHN4g+gW1u9CoBTrb9E= github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= @@ -1258,6 +1257,7 @@ github.com/linxGnu/grocksdb v1.8.14/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3P github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77 h1:6xiz3+ZczT3M4+I+JLpcPGG1bQKm8067HktB17EDWEE= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= +github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lyft/protoc-gen-star/v2 v2.0.4-0.20230330145011-496ad1ac90a4 h1:sIXJOMrYnQZJu7OB7ANSF4MYri2fTEGIsRLz6LwI4xE= @@ -1384,6 +1384,8 @@ github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJ github.com/neilotoole/errgroup v0.1.6 h1:PODGqPXdT5BC/zCYIMoTrwV+ujKcW+gBXM6Ye9Ve3R8= github.com/neilotoole/errgroup v0.1.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= +github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= github.com/notional-labs/wasmd v0.29.0-sdk46.0.20221114145317-d6e67fd50956 h1:gT+v1UFkZAL9GK5paedZPxL8Venc7SqbrAuKBh1q5Jk= github.com/notional-labs/wasmd v0.29.0-sdk46.0.20221114145317-d6e67fd50956/go.mod h1:n0HuoJR2cMpg9jKqR+x+KGO/rQsrzsDPEsgwHHs70dM= github.com/oasisprotocol/curve25519-voi v0.0.0-20220708102147-0a8a51822cae/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= @@ -1542,6 +1544,7 @@ github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNG github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= +github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c/go.mod h1:SbErYREK7xXdsRiigaQiQkI9McGRzYMvlKYaP3Nimdk= github.com/tailscale/depaware v0.0.0-20210622194025-720c4b409502 h1:34icjjmqJ2HPjrSuJYEkdZ+0ItmGQAQ75cRHIiftIyE= github.com/tailscale/depaware v0.0.0-20210622194025-720c4b409502/go.mod h1:p9lPsd+cx33L3H9nNoecRRxPssFKUwwI50I3pZ0yT+8= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= diff --git a/x/eventmanager/keeper/conditions.go b/x/eventmanager/keeper/conditions.go new file mode 100644 index 000000000..f618ab589 --- /dev/null +++ b/x/eventmanager/keeper/conditions.go @@ -0,0 +1,60 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" +) + +type ConditionI interface { + Resolve(ctx sdk.Context, k *Keeper) bool +} + +// type ConditionExistsAny struct { +// Fields []types.KV +// negate bool +// } + +// func (c ConditionExistsAny) Resolve(ctx sdk.Context, k *Keeper) bool { +// out := false +// k.IterateEvents(ctx, func(index int64, event types.Event) (stop bool) { +// if event.ResolveAnyFieldValues(c.Fields) { +// out := +// } +// } +// return negate ^ out +// } + +type ConditionExistsAll struct { + Fields []types.FieldValue + Negate bool +} + +func (c ConditionExistsAll) Resolve(ctx sdk.Context, k *Keeper) bool { + out := false + k.IteratePrefixedEvents(ctx, nil, func(index int64, event types.Event) (stop bool) { + if event.ResolveAllFieldValues(c.Fields) { + out = true + return true + } + return false + }) + return c.Negate != out +} + +type ConditionAnd struct { + Condition1 ConditionI + Condition2 ConditionI +} + +func (c ConditionAnd) Resolve(ctx sdk.Context, k *Keeper) bool { + return c.Condition1.Resolve(ctx, k) && c.Condition2.Resolve(ctx, k) +} + +type ConditionOr struct { + Condition1 ConditionI + Condition2 ConditionI +} + +func (c ConditionOr) Resolve(ctx sdk.Context, k *Keeper) bool { + return c.Condition1.Resolve(ctx, k) || c.Condition2.Resolve(ctx, k) +} diff --git a/x/eventmanager/keeper/events.go b/x/eventmanager/keeper/events.go new file mode 100644 index 000000000..615bcff18 --- /dev/null +++ b/x/eventmanager/keeper/events.go @@ -0,0 +1,94 @@ +package keeper + +import ( + "github.com/cosmos/cosmos-sdk/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" +) + +// ---------------------------------------------------------------- + +func GenerateEventKey(module, chainId, id string) []byte { + return []byte(module + chainId + id) +} + +// GetEvent returns event. +func (k Keeper) GetEvent(ctx sdk.Context, module, chainId, id string) (types.Event, bool) { + event := types.Event{} + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixEvent) + bz := store.Get(GenerateEventKey(module, chainId, id)) + if len(bz) == 0 { + return event, false + } + k.cdc.MustUnmarshal(bz, &event) + return event, true +} + +// SetEvent set event. +func (k Keeper) SetEvent(ctx sdk.Context, event types.Event) { + key := GenerateEventKey(event.Module, event.ChainId, event.Identifier) + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixEvent) + bz := k.cdc.MustMarshal(&event) + store.Set(key, bz) +} + +// DeleteEvent delete event. +func (k Keeper) DeleteEvent(ctx sdk.Context, module, chainId, id string) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixEvent) + store.Delete(GenerateEventKey(module, chainId, id)) +} + +// IterateEvents iterate through queries. +func (k Keeper) IteratePrefixedEvents(ctx sdk.Context, prefixBytes []byte, fn func(index int64, event types.Event) (stop bool)) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixEvent) + iterator := sdk.KVStorePrefixIterator(store, prefixBytes) + defer iterator.Close() + + i := int64(0) + for ; iterator.Valid(); iterator.Next() { + event := types.Event{} + k.cdc.MustUnmarshal(iterator.Value(), &event) + stop := fn(i, event) + + if stop { + break + } + i++ + } +} + +func (k Keeper) IterateModuleEvents(ctx sdk.Context, module string, fn func(index int64, event types.Event) (stop bool)) { + k.IteratePrefixedEvents(ctx, []byte(module), fn) +} + +func (k Keeper) IterateModuleChainEvents(ctx sdk.Context, module string, chainId string, fn func(index int64, event types.Event) (stop bool)) { + k.IteratePrefixedEvents(ctx, []byte(module+chainId), fn) +} + +// AllEvents returns every eventInfo in the store. +func (k Keeper) AllEvents(ctx sdk.Context) []types.Event { + queries := []types.Event{} + k.IteratePrefixedEvents(ctx, nil, func(_ int64, eventInfo types.Event) (stop bool) { + queries = append(queries, eventInfo) + return false + }) + return queries +} + +func (k Keeper) MarkCompleted(ctx sdk.Context, module string, chainID string, identifier string) { + k.DeleteEvent(ctx, module, chainID, identifier) + k.Trigger(ctx, module, chainID) +} + +func (k Keeper) Trigger(ctx sdk.Context, module string, chainID string) { + k.IterateModuleChainEvents(ctx, module, chainID, func(_ int64, e types.Event) (stop bool) { + if e.EventStatus == types.EventStatusPending { + err := k.Call(ctx, e.Module, e.Callback, e.Payload) + if err != nil { + k.Logger(ctx).Error("unable to execute callback", "module", e.Module, "id", e.Identifier, "callback", e.Callback, "error", err) + } + } + return false + }) +} diff --git a/x/eventmanager/keeper/grpc_query.go b/x/eventmanager/keeper/grpc_query.go new file mode 100644 index 000000000..efe70b178 --- /dev/null +++ b/x/eventmanager/keeper/grpc_query.go @@ -0,0 +1,50 @@ +package keeper + +import ( + "context" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/cosmos/cosmos-sdk/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" + + "github.com/quicksilver-zone/quicksilver/x/interchainquery/types" +) + +var _ types.QuerySrvrServer = Keeper{} + +// Queries returns information about registered zones. +func (k Keeper) Queries(c context.Context, req *types.QueryRequestsRequest) (*types.QueryRequestsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(c) + + var queries []types.Query + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixQuery) + + pageRes, err := query.FilteredPaginate(store, req.Pagination, func(_, value []byte, accumulate bool) (bool, error) { + var query types.Query + if err := k.cdc.Unmarshal(value, &query); err != nil { + return false, err + } + + if query.ChainId == req.ChainId && (query.LastEmission.IsNil() || query.LastEmission.IsZero() || query.LastEmission.GTE(query.LastHeight)) { + queries = append(queries, query) + return true, nil + } + + return false, nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryRequestsResponse{ + Queries: queries, + Pagination: pageRes, + }, nil +} diff --git a/x/eventmanager/keeper/grpc_query_test.go b/x/eventmanager/keeper/grpc_query_test.go new file mode 100644 index 000000000..2261da547 --- /dev/null +++ b/x/eventmanager/keeper/grpc_query_test.go @@ -0,0 +1,39 @@ +package keeper_test + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + + icqtypes "github.com/quicksilver-zone/quicksilver/x/interchainquery/types" +) + +func (suite *KeeperTestSuite) TestQueries() { + bondedQuery := stakingtypes.QueryValidatorsRequest{Status: stakingtypes.BondStatusBonded} + bz, err := bondedQuery.Marshal() + suite.NoError(err) + + query := suite.GetSimApp(suite.chainA).InterchainQueryKeeper.NewQuery( + "", + suite.path.EndpointB.ConnectionID, + suite.chainB.ChainID, + "cosmos.staking.v1beta1.Query/Validators", + bz, + sdk.NewInt(200), + "", + 0, + ) + + // set the query + suite.GetSimApp(suite.chainA).InterchainQueryKeeper.SetQuery(suite.chainA.GetContext(), *query) + + icqsrvSrv := icqtypes.QuerySrvrServer(suite.GetSimApp(suite.chainA).InterchainQueryKeeper) + + res, err := icqsrvSrv.Queries(sdk.WrapSDKContext(suite.chainA.GetContext()), &icqtypes.QueryRequestsRequest{ChainId: suite.chainB.ChainID}) + suite.NoError(err) + suite.Len(res.Queries, 1) + suite.Equal(suite.path.EndpointB.ConnectionID, res.Queries[0].ConnectionId) + suite.Equal(suite.chainB.ChainID, res.Queries[0].ChainId) + suite.Equal("cosmos.staking.v1beta1.Query/Validators", res.Queries[0].QueryType) + suite.Equal(sdk.NewInt(200), res.Queries[0].Period) + suite.Equal("", res.Queries[0].CallbackId) +} diff --git a/x/eventmanager/keeper/keeper.go b/x/eventmanager/keeper/keeper.go new file mode 100644 index 000000000..3f93872a6 --- /dev/null +++ b/x/eventmanager/keeper/keeper.go @@ -0,0 +1,58 @@ +package keeper + +import ( + "fmt" + + "github.com/tendermint/tendermint/libs/log" + + "github.com/cosmos/cosmos-sdk/codec" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" +) + +// Keeper of this module maintains collections of registered zones. +type Keeper struct { + cdc codec.Codec + storeKey storetypes.StoreKey + callbacks map[string]types.EventCallbacks +} + +// NewKeeper returns a new instance of zones Keeper. +func NewKeeper(cdc codec.Codec, storeKey storetypes.StoreKey) Keeper { + + return Keeper{ + cdc: cdc, + storeKey: storeKey, + callbacks: make(map[string]types.EventCallbacks), + } +} + +func (k *Keeper) SetCallbackHandler(module string, handler types.EventCallbacks) error { + _, found := k.callbacks[module] + if found { + return fmt.Errorf("callback handler already set for %s", module) + } + k.callbacks[module] = handler.RegisterCallbacks() + return nil +} + +// Logger returns a module-specific logger. +func (k Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} + +func (k Keeper) Call(ctx sdk.Context, moduleName string, callbackID string, payload []byte) error { + + module, found := k.callbacks[moduleName] + if !found { + return fmt.Errorf("bad module %s", moduleName) + } + if module.Has(callbackID) { + // we have executed a callback; only a single callback is expected per request, so break here. + return module.Call(ctx, callbackID, payload) + } + + return fmt.Errorf("callback %s not found for module %s", callbackID, moduleName) +} diff --git a/x/eventmanager/keeper/keeper_test.go b/x/eventmanager/keeper/keeper_test.go new file mode 100644 index 000000000..cf4e40bbe --- /dev/null +++ b/x/eventmanager/keeper/keeper_test.go @@ -0,0 +1,208 @@ +package keeper_test + +import ( + "math/rand" + "testing" + + "github.com/stretchr/testify/suite" + + sdk "github.com/cosmos/cosmos-sdk/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + + ibctesting "github.com/cosmos/ibc-go/v5/testing" + + "github.com/quicksilver-zone/quicksilver/app" + "github.com/quicksilver-zone/quicksilver/x/interchainquery/keeper" + icqtypes "github.com/quicksilver-zone/quicksilver/x/interchainquery/types" +) + +const TestOwnerAddress = "cosmos17dtl0mjt3t77kpuhg2edqzjpszulwhgzuj9ljs" + +func init() { + ibctesting.DefaultTestingAppInit = app.SetupTestingApp +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(KeeperTestSuite)) +} + +type KeeperTestSuite struct { + suite.Suite + + coordinator *ibctesting.Coordinator + + chainA *ibctesting.TestChain + chainB *ibctesting.TestChain + path *ibctesting.Path +} + +func (suite *KeeperTestSuite) GetSimApp(chain *ibctesting.TestChain) *app.Quicksilver { + quicksilver, ok := chain.App.(*app.Quicksilver) + if !ok { + panic("not quicksilver app") + } + + return quicksilver +} + +func (suite *KeeperTestSuite) SetupTest() { + suite.coordinator = ibctesting.NewCoordinator(suite.T(), 2) + suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(1)) + suite.chainB = suite.coordinator.GetChain(ibctesting.GetChainID(2)) + + suite.path = newSimAppPath(suite.chainA, suite.chainB) + suite.coordinator.SetupConnections(suite.path) +} + +func (suite *KeeperTestSuite) TestMakeRequest() { + bondedQuery := stakingtypes.QueryValidatorsRequest{Status: stakingtypes.BondStatusBonded} + bz, err := bondedQuery.Marshal() + suite.NoError(err) + + suite.GetSimApp(suite.chainA).InterchainQueryKeeper.MakeRequest( + suite.chainA.GetContext(), + suite.path.EndpointB.ConnectionID, + suite.chainB.ChainID, + "cosmos.staking.v1beta1.Query/Validators", + bz, + sdk.NewInt(200), + "", + "", + 0, + ) + + id := keeper.GenerateQueryHash(suite.path.EndpointB.ConnectionID, suite.chainB.ChainID, "cosmos.staking.v1beta1.Query/Validators", bz, "", "") + query, found := suite.GetSimApp(suite.chainA).InterchainQueryKeeper.GetQuery(suite.chainA.GetContext(), id) + suite.True(found) + suite.Equal(suite.path.EndpointB.ConnectionID, query.ConnectionId) + suite.Equal(suite.chainB.ChainID, query.ChainId) + suite.Equal("cosmos.staking.v1beta1.Query/Validators", query.QueryType) + suite.Equal(sdk.NewInt(200), query.Period) + suite.Equal("", query.CallbackId) + + suite.GetSimApp(suite.chainA).InterchainQueryKeeper.MakeRequest( + suite.chainA.GetContext(), + suite.path.EndpointB.ConnectionID, + suite.chainB.ChainID, + "cosmos.staking.v1beta1.Query/Validators", + bz, + sdk.NewInt(200), + "", + "", + 0, + ) +} + +func (suite *KeeperTestSuite) TestSubmitQueryResponse() { + bondedQuery := stakingtypes.QueryValidatorsRequest{Status: stakingtypes.BondStatusBonded} + bz, err := bondedQuery.Marshal() + suite.NoError(err) + + qvr := stakingtypes.QueryValidatorsResponse{ + Validators: suite.GetSimApp(suite.chainB).StakingKeeper.GetBondedValidatorsByPower(suite.chainB.GetContext()), + } + + tests := []struct { + query *icqtypes.Query + setQuery bool + expectError error + }{ + { + suite.GetSimApp(suite.chainA).InterchainQueryKeeper. + NewQuery( + "", + suite.path.EndpointB.ConnectionID, + suite.chainB.ChainID, + "cosmos.staking.v1beta1.Query/Validators", + bz, + sdk.NewInt(200), + "", + 0, + ), + true, + nil, + }, + { + suite.GetSimApp(suite.chainA).InterchainQueryKeeper. + NewQuery( + "", + suite.path.EndpointB.ConnectionID, + suite.chainB.ChainID, + "cosmos.staking.v1beta1.Query/Validators", + bz, + sdk.NewInt(200), + "", + 10, + ), + true, + nil, + }, + { + suite.GetSimApp(suite.chainA).InterchainQueryKeeper. + NewQuery( + "", + suite.path.EndpointB.ConnectionID, + suite.chainB.ChainID, + "cosmos.staking.v1beta1.Query/Validators", + bz, + sdk.NewInt(-200), + "", + 0, + ), + true, + nil, + }, + { + suite.GetSimApp(suite.chainA).InterchainQueryKeeper. + NewQuery( + "", + suite.path.EndpointB.ConnectionID, + suite.chainB.ChainID, + "cosmos.staking.v1beta1.Query/Validators", + bz, + sdk.NewInt(100), + "", + 0, + ), + false, + nil, + }, + } + + for _, tc := range tests { + // set the query + if tc.setQuery { + suite.GetSimApp(suite.chainA).InterchainQueryKeeper.SetQuery(suite.chainA.GetContext(), *tc.query) + } + + icqmsgSrv := keeper.NewMsgServerImpl(suite.GetSimApp(suite.chainA).InterchainQueryKeeper) + + qmsg := icqtypes.MsgSubmitQueryResponse{ + ChainId: suite.chainB.ChainID, + QueryId: keeper.GenerateQueryHash(tc.query.ConnectionId, tc.query.ChainId, tc.query.QueryType, bz, "", ""), + Result: suite.GetSimApp(suite.chainB).AppCodec().MustMarshalJSON(&qvr), + Height: suite.chainB.CurrentHeader.Height, + FromAddress: TestOwnerAddress, + } + + _, err = icqmsgSrv.SubmitQueryResponse(sdk.WrapSDKContext(suite.chainA.GetContext()), &qmsg) + suite.Equal(tc.expectError, err) + } +} + +func newSimAppPath(chainA, chainB *ibctesting.TestChain) *ibctesting.Path { + path := ibctesting.NewPath(chainA, chainB) + path.EndpointA.ChannelConfig.PortID = ibctesting.TransferPort + path.EndpointB.ChannelConfig.PortID = ibctesting.TransferPort + + return path +} + +func (suite *KeeperTestSuite) TestLatestHeight() { + height := rand.Uint64() + chainID := "test" + + suite.GetSimApp(suite.chainA).InterchainQueryKeeper.SetLatestHeight(suite.chainA.GetContext(), chainID, height) + got := suite.GetSimApp(suite.chainA).InterchainQueryKeeper.GetLatestHeight(suite.chainA.GetContext(), chainID) + suite.Require().Equal(height, got) +} diff --git a/x/eventmanager/module.go b/x/eventmanager/module.go new file mode 100644 index 000000000..ed6fb6262 --- /dev/null +++ b/x/eventmanager/module.go @@ -0,0 +1,178 @@ +package interchainquery + +import ( + "context" + "encoding/json" + "math/rand" + + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + abci "github.com/tendermint/tendermint/abci/types" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + + "github.com/quicksilver-zone/quicksilver/x/interchainquery/keeper" + "github.com/quicksilver-zone/quicksilver/x/interchainquery/types" +) + +var ( + _ module.AppModuleBasic = AppModuleBasic{} + _ module.AppModule = AppModule{} + _ module.AppModuleSimulation = AppModule{} +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface for the capability module. +type AppModuleBasic struct { + cdc codec.Codec +} + +// NewAppModuleBasic return a new AppModuleBasic. +func NewAppModuleBasic(cdc codec.Codec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the capability module's name. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterLegacyAminoCodec registers a legacy amino codec. +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { +} + +// RegisterInterfaces registers the module's interface types. +func (AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { +} + +// DefaultGenesis returns the capability module's default genesis state. +func (AppModuleBasic) DefaultGenesis(_ codec.JSONCodec) json.RawMessage { + return nil +} + +// ValidateGenesis performs genesis state validation for the capability module. +func (AppModuleBasic) ValidateGenesis(_ codec.JSONCodec, _ client.TxEncodingConfig, _ json.RawMessage) error { + return nil +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + err := types.RegisterQuerySrvrHandlerClient(context.Background(), mux, types.NewQuerySrvrClient(clientCtx)) + if err != nil { + panic(err) + } +} + +// GetTxCmd returns the capability module's root tx command. +func (AppModuleBasic) GetTxCmd() *cobra.Command { + return nil +} + +// GetQueryCmd returns the capability module's root query command. +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return nil +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface for the capability module. +type AppModule struct { + AppModuleBasic + keeper keeper.Keeper +} + +// NewAppModule return a new AppModule. +func NewAppModule(cdc codec.Codec, k keeper.Keeper) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: k, + } +} + +// Name returns the capability module's name. +func (am AppModule) Name() string { + return am.AppModuleBasic.Name() +} + +// Route returns the capability module's message routing key. +func (AppModule) Route() sdk.Route { + return sdk.Route{} +} + +// QuerierRoute returns the capability module's query routing key. +func (AppModule) QuerierRoute() string { return types.QuerierRoute } + +// LegacyQuerierHandler returns the capability module's Querier. +func (AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { + return nil +} + +// RegisterServices registers a GRPC query service to respond to the +// module-specific GRPC queries. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterQuerySrvrServer(cfg.QueryServer(), am.keeper) +} + +// RegisterInvariants registers the capability module's invariants. +func (AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +// InitGenesis performs the capability module's genesis initialization It returns +// no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) []abci.ValidatorUpdate { + return []abci.ValidatorUpdate{} +} + +// ExportGenesis returns the capability module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + return nil +} + +// BeginBlock executes all ABCI BeginBlock logic respective to the capability module. +func (AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) { +} + +// EndBlock executes all ABCI EndBlock logic respective to the capability module. It +// returns no validator updates. +func (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { + return []abci.ValidatorUpdate{} +} + +// ConsensusVersion implements AppModule/ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// ___________________________________________________________________________ + +// AppModuleSimulation functions + +// GenerateGenesisState creates a randomized GenState of the pool-incentives module. +func (AppModule) GenerateGenesisState(_ *module.SimulationState) { +} + +// ProposalContents doesn't return any content functions for governance proposals. +func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedProposalContent { + return nil +} + +// RandomizedParams creates randomized pool-incentives param changes for the simulator. +func (AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { + return nil +} + +// RegisterStoreDecoder registers a decoder for supply module's types. +func (AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) { +} + +// WeightedOperations returns the all the gov module operations with their respective weights. +func (AppModule) WeightedOperations(_ module.SimulationState) []simtypes.WeightedOperation { + return nil // TODO add operations +} diff --git a/x/eventmanager/types/callbacks.go b/x/eventmanager/types/callbacks.go new file mode 100644 index 000000000..df8b15b44 --- /dev/null +++ b/x/eventmanager/types/callbacks.go @@ -0,0 +1,12 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" +) + +type EventCallbacks interface { + AddCallback(id string, fn interface{}) EventCallbacks + RegisterCallbacks() EventCallbacks + Call(ctx sdk.Context, id string, args []byte) error + Has(id string) bool +} diff --git a/x/eventmanager/types/codec.go b/x/eventmanager/types/codec.go new file mode 100644 index 000000000..0836bbdad --- /dev/null +++ b/x/eventmanager/types/codec.go @@ -0,0 +1,25 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/types" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +var ( + amino = codec.NewLegacyAmino() + ModuleCdc = codec.NewAminoCodec(amino) +) + +func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { +} + +func RegisterInterfaces(registry types.InterfaceRegistry) { +} + +func init() { + RegisterLegacyAminoCodec(amino) + cryptocodec.RegisterCrypto(amino) + sdk.RegisterLegacyAminoCodec(amino) +} diff --git a/x/eventmanager/types/fields.go b/x/eventmanager/types/fields.go new file mode 100644 index 000000000..322fdd1f0 --- /dev/null +++ b/x/eventmanager/types/fields.go @@ -0,0 +1,67 @@ +package types + +import ( + "strconv" + "strings" +) + +type FieldValue struct { + Field string + Value string + Negate bool +} + +func (e Event) ResolveAllFieldValues(fvs []FieldValue) bool { + for _, fv := range fvs { + if !e.resolveFieldValue(fv) { + return false + } + } + return true +} + +func (e Event) ResolveAnyFieldValues(fvs []FieldValue) bool { + for _, fv := range fvs { + if e.resolveFieldValue(fv) { + return true + } + } + return false +} + +func (e Event) resolveFieldValue(fv FieldValue) bool { + + if strings.ToLower(fv.Field) == "eventtype" { + v, err := strconv.ParseInt(fv.Value, 10, 32) + if err != nil { + return fv.Negate + } + if v == int64(e.EventType) { + return !fv.Negate + } + return fv.Negate + } + + if strings.ToLower(fv.Field) == "eventstatus" { + v, err := strconv.ParseInt(fv.Value, 10, 32) + if err != nil { + return fv.Negate + } + if v == int64(e.EventType) { + return !fv.Negate + } + return fv.Negate + } + + if strings.ToLower(fv.Field) == "module" && fv.Value == e.Module { + return !fv.Negate + } + if strings.ToLower(fv.Field) == "identifier" && fv.Value == e.Identifier { + return !fv.Negate + } + if strings.ToLower(fv.Field) == "chainid" && fv.Value == e.ChainId { + return !fv.Negate + } + + return fv.Negate +} diff --git a/x/eventmanager/types/genesis.go b/x/eventmanager/types/genesis.go new file mode 100644 index 000000000..15e83fd5d --- /dev/null +++ b/x/eventmanager/types/genesis.go @@ -0,0 +1,12 @@ +package types + +// DefaultGenesisState returns the default Capability genesis state. +func DefaultGenesisState() *GenesisState { + return &GenesisState{} +} + +// Validate performs basic genesis state validation returning an error upon any +// failure. +func (GenesisState) Validate() error { + return nil +} diff --git a/x/eventmanager/types/genesis.pb.go b/x/eventmanager/types/genesis.pb.go new file mode 100644 index 000000000..8f5b71584 --- /dev/null +++ b/x/eventmanager/types/genesis.pb.go @@ -0,0 +1,818 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: quicksilver/eventmanager/v1/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/gogo/protobuf/proto" + _ "google.golang.org/protobuf/types/known/durationpb" + _ "google.golang.org/protobuf/types/known/timestamppb" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type Event struct { + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + EventType int32 `protobuf:"varint,2,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` + Identifier string `protobuf:"bytes,3,opt,name=identifier,proto3" json:"identifier,omitempty"` + EventStatus int32 `protobuf:"varint,4,opt,name=event_status,json=eventStatus,proto3" json:"event_status,omitempty"` + Module string `protobuf:"bytes,5,opt,name=module,proto3" json:"module,omitempty"` + Callback string `protobuf:"bytes,6,opt,name=callback,proto3" json:"callback,omitempty"` + Payload []byte `protobuf:"bytes,7,opt,name=payload,proto3" json:"payload,omitempty"` + ExecuteCondition []byte `protobuf:"bytes,8,opt,name=execute_condition,json=executeCondition,proto3" json:"execute_condition,omitempty"` + EmittedHeight int64 `protobuf:"varint,9,opt,name=emitted_height,json=emittedHeight,proto3" json:"emitted_height,omitempty"` +} + +func (m *Event) Reset() { *m = Event{} } +func (m *Event) String() string { return proto.CompactTextString(m) } +func (*Event) ProtoMessage() {} +func (*Event) Descriptor() ([]byte, []int) { + return fileDescriptor_74127b30ab787dbd, []int{0} +} +func (m *Event) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Event) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Event.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Event) XXX_Merge(src proto.Message) { + xxx_messageInfo_Event.Merge(m, src) +} +func (m *Event) XXX_Size() int { + return m.Size() +} +func (m *Event) XXX_DiscardUnknown() { + xxx_messageInfo_Event.DiscardUnknown(m) +} + +var xxx_messageInfo_Event proto.InternalMessageInfo + +func (m *Event) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *Event) GetEventType() int32 { + if m != nil { + return m.EventType + } + return 0 +} + +func (m *Event) GetIdentifier() string { + if m != nil { + return m.Identifier + } + return "" +} + +func (m *Event) GetEventStatus() int32 { + if m != nil { + return m.EventStatus + } + return 0 +} + +func (m *Event) GetModule() string { + if m != nil { + return m.Module + } + return "" +} + +func (m *Event) GetCallback() string { + if m != nil { + return m.Callback + } + return "" +} + +func (m *Event) GetPayload() []byte { + if m != nil { + return m.Payload + } + return nil +} + +func (m *Event) GetExecuteCondition() []byte { + if m != nil { + return m.ExecuteCondition + } + return nil +} + +func (m *Event) GetEmittedHeight() int64 { + if m != nil { + return m.EmittedHeight + } + return 0 +} + +// GenesisState defines the eventmanager module's genesis state. +type GenesisState struct { +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_74127b30ab787dbd, []int{1} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Event)(nil), "quicksilver.eventmanager.v1.Event") + proto.RegisterType((*GenesisState)(nil), "quicksilver.eventmanager.v1.GenesisState") +} + +func init() { + proto.RegisterFile("quicksilver/eventmanager/v1/genesis.proto", fileDescriptor_74127b30ab787dbd) +} + +var fileDescriptor_74127b30ab787dbd = []byte{ + // 390 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x92, 0xcd, 0x6e, 0xd4, 0x30, + 0x14, 0x85, 0xc7, 0x2d, 0xf3, 0x67, 0x86, 0x0a, 0x2c, 0x84, 0xcc, 0x20, 0x4c, 0xa8, 0x84, 0x14, + 0x84, 0x88, 0x55, 0xb1, 0x65, 0x05, 0x42, 0xc0, 0x36, 0x20, 0x16, 0x6c, 0x22, 0x27, 0xbe, 0x75, + 0xac, 0x26, 0x76, 0x48, 0x9c, 0xa8, 0xc3, 0x53, 0xf0, 0x14, 0x3c, 0x0b, 0xcb, 0x2e, 0x59, 0xa2, + 0x99, 0x17, 0x41, 0x71, 0x52, 0x14, 0xba, 0xcb, 0xf9, 0xce, 0x39, 0xc9, 0xd5, 0xbd, 0xc1, 0xcf, + 0xbf, 0xb5, 0x3a, 0xbb, 0x68, 0x74, 0xd1, 0x41, 0xcd, 0xa1, 0x03, 0xe3, 0x4a, 0x61, 0x84, 0x82, + 0x9a, 0x77, 0x67, 0x5c, 0x81, 0x81, 0x46, 0x37, 0x51, 0x55, 0x5b, 0x67, 0xc9, 0xa3, 0x49, 0x34, + 0x9a, 0x46, 0xa3, 0xee, 0x6c, 0x7b, 0x5f, 0x59, 0x65, 0x7d, 0x8e, 0xf7, 0x4f, 0x43, 0x65, 0xcb, + 0x94, 0xb5, 0xaa, 0x00, 0xee, 0x55, 0xda, 0x9e, 0x73, 0xd9, 0xd6, 0xc2, 0x69, 0x6b, 0x46, 0xff, + 0xc9, 0x4d, 0xdf, 0xe9, 0x12, 0x1a, 0x27, 0xca, 0x6a, 0x08, 0x9c, 0xfe, 0x3c, 0xc2, 0xf3, 0x77, + 0xfd, 0xa7, 0xc8, 0x43, 0xbc, 0xca, 0x72, 0xa1, 0x4d, 0xa2, 0x25, 0x45, 0x01, 0x0a, 0xd7, 0xf1, + 0xd2, 0xeb, 0x8f, 0x92, 0x3c, 0xc6, 0xd8, 0x8f, 0x93, 0xb8, 0x5d, 0x05, 0xf4, 0x28, 0x40, 0xe1, + 0x3c, 0x5e, 0x7b, 0xf2, 0x79, 0x57, 0x01, 0x61, 0x18, 0x6b, 0x09, 0xc6, 0xe9, 0x73, 0x0d, 0x35, + 0x3d, 0xf6, 0xdd, 0x09, 0x21, 0x4f, 0xf1, 0x66, 0xa8, 0x37, 0x4e, 0xb8, 0xb6, 0xa1, 0xb7, 0xfc, + 0x0b, 0x6e, 0x7b, 0xf6, 0xc9, 0x23, 0xf2, 0x00, 0x2f, 0x4a, 0x2b, 0xdb, 0x02, 0xe8, 0xdc, 0xd7, + 0x47, 0x45, 0xb6, 0x78, 0x95, 0x89, 0xa2, 0x48, 0x45, 0x76, 0x41, 0x17, 0xde, 0xf9, 0xa7, 0x09, + 0xc5, 0xcb, 0x4a, 0xec, 0x0a, 0x2b, 0x24, 0x5d, 0x06, 0x28, 0xdc, 0xc4, 0xd7, 0x92, 0xbc, 0xc0, + 0xf7, 0xe0, 0x12, 0xb2, 0xd6, 0x41, 0x92, 0x59, 0x23, 0x75, 0xbf, 0x10, 0xba, 0xf2, 0x99, 0xbb, + 0xa3, 0xf1, 0xf6, 0x9a, 0x93, 0x67, 0xf8, 0x04, 0x4a, 0xed, 0x1c, 0xc8, 0x24, 0x07, 0xad, 0x72, + 0x47, 0xd7, 0x01, 0x0a, 0x8f, 0xe3, 0x3b, 0x23, 0xfd, 0xe0, 0xe1, 0xe9, 0x09, 0xde, 0xbc, 0x1f, + 0xae, 0xd5, 0x8f, 0x0c, 0x6f, 0xbe, 0xfc, 0xda, 0x33, 0x74, 0xb5, 0x67, 0xe8, 0xcf, 0x9e, 0xa1, + 0x1f, 0x07, 0x36, 0xbb, 0x3a, 0xb0, 0xd9, 0xef, 0x03, 0x9b, 0x7d, 0x7d, 0xad, 0xb4, 0xcb, 0xdb, + 0x34, 0xca, 0x6c, 0xc9, 0x27, 0x17, 0x7d, 0xf9, 0xdd, 0x1a, 0x98, 0x02, 0x7e, 0xf9, 0xff, 0xff, + 0xd0, 0x2f, 0xb7, 0x49, 0x17, 0xfe, 0x2e, 0xaf, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x64, 0x4b, + 0x05, 0x58, 0x38, 0x02, 0x00, 0x00, +} + +func (m *Event) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Event) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Event) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.EmittedHeight != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.EmittedHeight)) + i-- + dAtA[i] = 0x48 + } + if len(m.ExecuteCondition) > 0 { + i -= len(m.ExecuteCondition) + copy(dAtA[i:], m.ExecuteCondition) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.ExecuteCondition))) + i-- + dAtA[i] = 0x42 + } + if len(m.Payload) > 0 { + i -= len(m.Payload) + copy(dAtA[i:], m.Payload) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Payload))) + i-- + dAtA[i] = 0x3a + } + if len(m.Callback) > 0 { + i -= len(m.Callback) + copy(dAtA[i:], m.Callback) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Callback))) + i-- + dAtA[i] = 0x32 + } + if len(m.Module) > 0 { + i -= len(m.Module) + copy(dAtA[i:], m.Module) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Module))) + i-- + dAtA[i] = 0x2a + } + if m.EventStatus != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.EventStatus)) + i-- + dAtA[i] = 0x20 + } + if len(m.Identifier) > 0 { + i -= len(m.Identifier) + copy(dAtA[i:], m.Identifier) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Identifier))) + i-- + dAtA[i] = 0x1a + } + if m.EventType != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.EventType)) + i-- + dAtA[i] = 0x10 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Event) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if m.EventType != 0 { + n += 1 + sovGenesis(uint64(m.EventType)) + } + l = len(m.Identifier) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if m.EventStatus != 0 { + n += 1 + sovGenesis(uint64(m.EventStatus)) + } + l = len(m.Module) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.Callback) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.Payload) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.ExecuteCondition) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if m.EmittedHeight != 0 { + n += 1 + sovGenesis(uint64(m.EmittedHeight)) + } + return n +} + +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Event) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Event: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Event: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EventType", wireType) + } + m.EventType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EventType |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Identifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Identifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EventStatus", wireType) + } + m.EventStatus = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EventStatus |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Module", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Module = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Callback", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Callback = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Payload", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Payload = append(m.Payload[:0], dAtA[iNdEx:postIndex]...) + if m.Payload == nil { + m.Payload = []byte{} + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExecuteCondition", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExecuteCondition = append(m.ExecuteCondition[:0], dAtA[iNdEx:postIndex]...) + if m.ExecuteCondition == nil { + m.ExecuteCondition = []byte{} + } + iNdEx = postIndex + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EmittedHeight", wireType) + } + m.EmittedHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EmittedHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/eventmanager/types/keys.go b/x/eventmanager/types/keys.go new file mode 100644 index 000000000..43a881df6 --- /dev/null +++ b/x/eventmanager/types/keys.go @@ -0,0 +1,36 @@ +package types + +const ( + // ModuleName defines the module name. + ModuleName = "eventmanager" + + // StoreKey defines the primary module store key. + StoreKey = ModuleName + + // RouterKey is the message route for interchainquery. + RouterKey = ModuleName + + // QuerierRoute defines the module's query routing key. + QuerierRoute = ModuleName +) + +const ( + EventStatusUnspecified = 0 + EventStatusActive = 1 + EventStatusPending = 2 +) + +const ( + EventTypeUnspecified = 0x00 + EventTypeICQQueryRewards = 0x01 + EventTypeICQQueryDelegations = 0x02 + EventTypeICQAccountBalances = 0x03 + EventTypeICQAccountBalance = 0x04 + EventTypeICAWithdrawRewards = 0x05 + EventTypeICADelegate = 0x06 + EventTypeICAUnbond = 0x07 +) + +var ( + KeyPrefixEvent = []byte{0x01} +) diff --git a/x/eventmanager/types/query.pb.go b/x/eventmanager/types/query.pb.go new file mode 100644 index 000000000..053d01497 --- /dev/null +++ b/x/eventmanager/types/query.pb.go @@ -0,0 +1,723 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: quicksilver/eventmanager/v1/query.proto + +package types + +import ( + context "context" + fmt "fmt" + query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" + proto "github.com/gogo/protobuf/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type QueryEventsRequest struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` +} + +func (m *QueryEventsRequest) Reset() { *m = QueryEventsRequest{} } +func (m *QueryEventsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryEventsRequest) ProtoMessage() {} +func (*QueryEventsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_e5e5a2821b1a7196, []int{0} +} +func (m *QueryEventsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryEventsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryEventsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryEventsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEventsRequest.Merge(m, src) +} +func (m *QueryEventsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryEventsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEventsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryEventsRequest proto.InternalMessageInfo + +func (m *QueryEventsRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +func (m *QueryEventsRequest) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +type QueryEventsResponse struct { + Events []Event `protobuf:"bytes,1,rep,name=events,proto3" json:"events"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryEventsResponse) Reset() { *m = QueryEventsResponse{} } +func (m *QueryEventsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryEventsResponse) ProtoMessage() {} +func (*QueryEventsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_e5e5a2821b1a7196, []int{1} +} +func (m *QueryEventsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryEventsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryEventsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryEventsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEventsResponse.Merge(m, src) +} +func (m *QueryEventsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryEventsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEventsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryEventsResponse proto.InternalMessageInfo + +func (m *QueryEventsResponse) GetEvents() []Event { + if m != nil { + return m.Events + } + return nil +} + +func (m *QueryEventsResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +func init() { + proto.RegisterType((*QueryEventsRequest)(nil), "quicksilver.eventmanager.v1.QueryEventsRequest") + proto.RegisterType((*QueryEventsResponse)(nil), "quicksilver.eventmanager.v1.QueryEventsResponse") +} + +func init() { + proto.RegisterFile("quicksilver/eventmanager/v1/query.proto", fileDescriptor_e5e5a2821b1a7196) +} + +var fileDescriptor_e5e5a2821b1a7196 = []byte{ + // 401 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xb1, 0xae, 0xd3, 0x30, + 0x14, 0x86, 0xe3, 0x02, 0x05, 0x7c, 0x37, 0xc3, 0x50, 0x0a, 0x0a, 0x55, 0x06, 0x6e, 0x41, 0xc2, + 0xbe, 0x29, 0x12, 0x13, 0x03, 0xba, 0x12, 0x20, 0x36, 0xc8, 0xc0, 0xc0, 0x82, 0x9c, 0xf4, 0xc8, + 0xb5, 0x68, 0xed, 0x34, 0x76, 0x02, 0x05, 0xb1, 0xf0, 0x04, 0x48, 0xbc, 0x00, 0x12, 0x33, 0xef, + 0xd1, 0xb1, 0x12, 0x0b, 0x13, 0x42, 0x2d, 0x0f, 0x82, 0x62, 0x07, 0x91, 0x08, 0x29, 0xb0, 0x9d, + 0xc4, 0xff, 0x7f, 0xfe, 0xef, 0x1c, 0x1b, 0x1f, 0xaf, 0x4b, 0x99, 0xbd, 0x34, 0x72, 0x59, 0x41, + 0xc1, 0xa0, 0x02, 0x65, 0x57, 0x5c, 0x71, 0x01, 0x05, 0xab, 0x62, 0xb6, 0x2e, 0xa1, 0xd8, 0xd0, + 0xbc, 0xd0, 0x56, 0x93, 0xab, 0x2d, 0x21, 0x6d, 0x0b, 0x69, 0x15, 0x8f, 0x6f, 0x65, 0xda, 0xac, + 0xb4, 0x61, 0x29, 0x37, 0xe0, 0x5d, 0xac, 0x8a, 0x53, 0xb0, 0x3c, 0x66, 0x39, 0x17, 0x52, 0x71, + 0x2b, 0xb5, 0xf2, 0x8d, 0xc6, 0x97, 0x85, 0x16, 0xda, 0x95, 0xac, 0xae, 0x9a, 0xbf, 0xd7, 0x84, + 0xd6, 0x62, 0x09, 0x8c, 0xe7, 0x92, 0x71, 0xa5, 0xb4, 0x75, 0x16, 0xd3, 0x9c, 0xde, 0xec, 0xa3, + 0x14, 0xa0, 0xc0, 0xc8, 0x46, 0x1a, 0xbd, 0xc2, 0xe4, 0x69, 0x0d, 0xf0, 0xa0, 0x56, 0x99, 0x04, + 0xd6, 0x25, 0x18, 0x4b, 0x1e, 0x62, 0xfc, 0x07, 0x64, 0x84, 0x26, 0x68, 0x7a, 0x34, 0xbb, 0x41, + 0x3d, 0x35, 0xad, 0xa9, 0xa9, 0x9f, 0xb5, 0xa1, 0xa6, 0x4f, 0xb8, 0x80, 0xc6, 0x9b, 0xb4, 0x9c, + 0xe4, 0x0a, 0xbe, 0x90, 0x2d, 0xb8, 0x54, 0x2f, 0xe4, 0x7c, 0x34, 0x98, 0xa0, 0xe9, 0xc5, 0xe4, + 0xbc, 0xfb, 0x7e, 0x3c, 0x8f, 0x3e, 0x21, 0x7c, 0xa9, 0x93, 0x6c, 0x72, 0xad, 0x0c, 0x90, 0xfb, + 0x78, 0xe8, 0x88, 0xcd, 0x08, 0x4d, 0xce, 0x4c, 0x8f, 0x66, 0x11, 0xed, 0xd9, 0x24, 0x75, 0xe6, + 0xd3, 0xb3, 0xdb, 0xef, 0xd7, 0x83, 0xa4, 0xf1, 0x91, 0x47, 0x1d, 0xf8, 0x81, 0x83, 0x3f, 0xfe, + 0x27, 0xbc, 0x8f, 0x6f, 0xd3, 0xcf, 0xbe, 0x20, 0x7c, 0xce, 0x21, 0x92, 0xcf, 0x08, 0x0f, 0x3d, + 0x27, 0x61, 0xbd, 0x3c, 0x7f, 0xef, 0x72, 0x7c, 0xf2, 0xff, 0x06, 0xcf, 0x10, 0xdd, 0x7d, 0xff, + 0xf5, 0xe7, 0xc7, 0xc1, 0x09, 0xa1, 0xac, 0xef, 0x1e, 0xfd, 0xb4, 0xec, 0xed, 0xef, 0x05, 0xbf, + 0x3b, 0x7d, 0xb6, 0xdd, 0x87, 0x68, 0xb7, 0x0f, 0xd1, 0x8f, 0x7d, 0x88, 0x3e, 0x1c, 0xc2, 0x60, + 0x77, 0x08, 0x83, 0x6f, 0x87, 0x30, 0x78, 0x7e, 0x4f, 0x48, 0xbb, 0x28, 0x53, 0x9a, 0xe9, 0x55, + 0xbb, 0xe7, 0xed, 0x37, 0x5a, 0x41, 0x27, 0xe4, 0x75, 0x37, 0xc6, 0x6e, 0x72, 0x30, 0xe9, 0xd0, + 0x3d, 0x95, 0x3b, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7a, 0xce, 0x8a, 0xaa, 0xfd, 0x02, 0x00, + 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // Events query events + Events(ctx context.Context, in *QueryEventsRequest, opts ...grpc.CallOption) (*QueryEventsResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Events(ctx context.Context, in *QueryEventsRequest, opts ...grpc.CallOption) (*QueryEventsResponse, error) { + out := new(QueryEventsResponse) + err := c.cc.Invoke(ctx, "/quicksilver.eventmanager.v1.Query/Events", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // Events query events + Events(context.Context, *QueryEventsRequest) (*QueryEventsResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) Events(ctx context.Context, req *QueryEventsRequest) (*QueryEventsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Events not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_Events_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryEventsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Events(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/quicksilver.eventmanager.v1.Query/Events", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Events(ctx, req.(*QueryEventsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "quicksilver.eventmanager.v1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Events", + Handler: _Query_Events_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "quicksilver/eventmanager/v1/query.proto", +} + +func (m *QueryEventsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryEventsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryEventsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x12 + } + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryEventsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryEventsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryEventsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Events) > 0 { + for iNdEx := len(m.Events) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Events[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryEventsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryEventsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Events) > 0 { + for _, e := range m.Events { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryEventsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryEventsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryEventsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryEventsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryEventsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryEventsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Events = append(m.Events, Event{}) + if err := m.Events[len(m.Events)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/eventmanager/types/query.pb.gw.go b/x/eventmanager/types/query.pb.gw.go new file mode 100644 index 000000000..ba7f6f95c --- /dev/null +++ b/x/eventmanager/types/query.pb.gw.go @@ -0,0 +1,207 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: quicksilver/eventmanager/v1/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +var ( + filter_Query_Events_0 = &utilities.DoubleArray{Encoding: map[string]int{"chain_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_Events_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEventsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["chain_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") + } + + protoReq.ChainId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Events_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Events(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Events_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEventsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["chain_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") + } + + protoReq.ChainId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Events_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Events(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_Events_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Events_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Events_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_Events_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Events_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Events_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_Events_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"quicksilver", "eventmanager", "v1", "events", "chain_id"}, "", runtime.AssumeColonVerbOpt(true))) +) + +var ( + forward_Query_Events_0 = runtime.ForwardResponseMessage +) diff --git a/x/interchainstaking/keeper/events.go b/x/interchainstaking/keeper/events.go new file mode 100644 index 000000000..8b120d1e9 --- /dev/null +++ b/x/interchainstaking/keeper/events.go @@ -0,0 +1,59 @@ +package keeper + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" +) + +// ___________________________________________________________________________________________________ + +type EventCallback func(*Keeper, sdk.Context, []byte) error + +// Callbacks wrapper struct for interchainstaking keeper. +type EventCallbacks struct { + k *Keeper + callbacks map[string]EventCallback +} + +var _ emtypes.EventCallbacks = EventCallbacks{} + +func (k *Keeper) EventCallbackHandler() EventCallbacks { + return EventCallbacks{k, make(map[string]EventCallback)} +} + +// Call calls callback handler. +func (c EventCallbacks) Call(ctx sdk.Context, id string, args []byte) error { + if !c.Has(id) { + return fmt.Errorf("callback %s not found", id) + } + return c.callbacks[id](c.k, ctx, args) +} + +func (c EventCallbacks) Has(id string) bool { + _, found := c.callbacks[id] + return found +} + +func (c EventCallbacks) AddCallback(id string, fn interface{}) emtypes.EventCallbacks { + c.callbacks[id], _ = fn.(EventCallback) + return c +} + +func (c EventCallbacks) RegisterCallbacks() emtypes.EventCallbacks { + a := c. + AddCallback("valset", EventCallback(TestCallback)) + + return a.(EventCallbacks) +} + +// ----------------------------------- +// Callback Handlers +// ----------------------------------- + +func TestCallback(k *Keeper, ctx sdk.Context, args []byte) error { + k.Logger(ctx).Error("TEST CALLBACK") + return nil +} From bdcb7f858c651234c5d1cfb2c653fae3c4a36e3a Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Fri, 5 Apr 2024 13:02:02 +0100 Subject: [PATCH 03/19] wip --- app/keepers/keepers.go | 1 + .../quicksilver/eventmanager/v1/genesis.proto | 23 ++++++++++++++++ proto/quicksilver/eventmanager/v1/query.proto | 27 +++++++++++++++++++ x/eventmanager/keeper/conditions.go | 1 + x/eventmanager/keeper/events.go | 20 ++++++++++++++ x/interchainstaking/keeper/keeper.go | 3 +++ x/interchainstaking/types/expected_keepers.go | 5 ++++ 7 files changed, 80 insertions(+) create mode 100644 proto/quicksilver/eventmanager/v1/genesis.proto create mode 100644 proto/quicksilver/eventmanager/v1/query.proto diff --git a/app/keepers/keepers.go b/app/keepers/keepers.go index ed39686e3..d29a91bfd 100644 --- a/app/keepers/keepers.go +++ b/app/keepers/keepers.go @@ -393,6 +393,7 @@ func (appKeepers *AppKeepers) InitKeepers( appKeepers.IBCKeeper, appKeepers.TransferKeeper, appKeepers.ClaimsManagerKeeper, + appKeepers.EventManagerKeeper, appKeepers.GetSubspace(interchainstakingtypes.ModuleName), ) diff --git a/proto/quicksilver/eventmanager/v1/genesis.proto b/proto/quicksilver/eventmanager/v1/genesis.proto new file mode 100644 index 000000000..67f973a55 --- /dev/null +++ b/proto/quicksilver/eventmanager/v1/genesis.proto @@ -0,0 +1,23 @@ +syntax = "proto3"; +package quicksilver.eventmanager.v1; + +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; + +option go_package = "github.com/quicksilver-zone/quicksilver/x/eventmanager/types"; + +message Event { + string chain_id = 1; + int32 event_type = 2; + string identifier = 3; + int32 event_status = 4; + string module = 5; + string callback = 6; + bytes payload = 7; + bytes execute_condition = 8; + int64 emitted_height = 9; +} + +// GenesisState defines the eventmanager module's genesis state. +message GenesisState {} diff --git a/proto/quicksilver/eventmanager/v1/query.proto b/proto/quicksilver/eventmanager/v1/query.proto new file mode 100644 index 000000000..aa39ba0d2 --- /dev/null +++ b/proto/quicksilver/eventmanager/v1/query.proto @@ -0,0 +1,27 @@ +syntax = "proto3"; +package quicksilver.eventmanager.v1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "quicksilver/eventmanager/v1/genesis.proto"; + +option go_package = "github.com/quicksilver-zone/quicksilver/x/eventmanager/types"; + +// Query defines the gRPC querier service. +service Query { + // Events query events + rpc Events(QueryEventsRequest) returns (QueryEventsResponse) { + option (google.api.http).get = "/quicksilver/eventmanager/v1/events/{chain_id}"; + } +} + +message QueryEventsRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; + string chain_id = 2; +} + +message QueryEventsResponse { + repeated Event events = 1 [(gogoproto.nullable) = false]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} diff --git a/x/eventmanager/keeper/conditions.go b/x/eventmanager/keeper/conditions.go index f618ab589..d7d9f3fb6 100644 --- a/x/eventmanager/keeper/conditions.go +++ b/x/eventmanager/keeper/conditions.go @@ -7,6 +7,7 @@ import ( type ConditionI interface { Resolve(ctx sdk.Context, k *Keeper) bool + Marshal(ctx sdk.Context) []byte } // type ConditionExistsAny struct { diff --git a/x/eventmanager/keeper/events.go b/x/eventmanager/keeper/events.go index 615bcff18..5e534c8d5 100644 --- a/x/eventmanager/keeper/events.go +++ b/x/eventmanager/keeper/events.go @@ -92,3 +92,23 @@ func (k Keeper) Trigger(ctx sdk.Context, module string, chainID string) { return false }) } + +func (k Keeper) AddEvent(ctx sdk.Context, module, chainID, identifier, callback string, status int32, condition ConditionI, payload []byte) error { + conditionBytes := []byte{} + if condition != nil { + conditionBytes = condition.Marshal() + } + + event := types.Event{ + ChainId: chainID, + Module: module, + Identifier: identifier, + Callback: callback, + Payload: payload, + EventStatus: status, + ExecuteCondition: conditionBytes, + EmittedHeight: ctx.BlockHeight(), + } + + k.SetEvent(ctx, event) +} diff --git a/x/interchainstaking/keeper/keeper.go b/x/interchainstaking/keeper/keeper.go index 7e190c826..daf082553 100644 --- a/x/interchainstaking/keeper/keeper.go +++ b/x/interchainstaking/keeper/keeper.go @@ -58,6 +58,7 @@ type Keeper struct { TransferKeeper ibctransferkeeper.Keeper ClaimsManagerKeeper types.ClaimsManagerKeeper EpochsKeeper types.EpochsKeeper + EventManagerKeeper types.EventManagerKeeper Ir codectypes.InterfaceRegistry hooks types.IcsHooks paramStore paramtypes.Subspace @@ -78,6 +79,7 @@ func NewKeeper( ibcKeeper *ibckeeper.Keeper, transferKeeper ibctransferkeeper.Keeper, claimsManagerKeeper types.ClaimsManagerKeeper, + eventManagerKeeper types.EventManagerKeeper, ps paramtypes.Subspace, ) *Keeper { if addr := accountKeeper.GetModuleAddress(types.ModuleName); addr == nil { @@ -107,6 +109,7 @@ func NewKeeper( IBCKeeper: ibcKeeper, TransferKeeper: transferKeeper, ClaimsManagerKeeper: claimsManagerKeeper, + EventManagerKeeper: eventManagerKeeper, hooks: nil, txSubmit: ProdSubmitTx, paramStore: ps, diff --git a/x/interchainstaking/types/expected_keepers.go b/x/interchainstaking/types/expected_keepers.go index 4c1cf6cd0..934e716c6 100644 --- a/x/interchainstaking/types/expected_keepers.go +++ b/x/interchainstaking/types/expected_keepers.go @@ -12,6 +12,7 @@ import ( claimsmanagertypes "github.com/quicksilver-zone/quicksilver/x/claimsmanager/types" epochstypes "github.com/quicksilver-zone/quicksilver/x/epochs/types" + emkeeper "github.com/quicksilver-zone/quicksilver/x/eventmanager/keeper" ) // ChannelKeeper defines the expected IBC channel keeper. @@ -67,3 +68,7 @@ type AuthzKeeper interface { Grant(goCtx context.Context, msg *authz.MsgGrant) (*authz.MsgGrantResponse, error) GetAuthorizations(ctx sdk.Context, grantee sdk.AccAddress, granter sdk.AccAddress) ([]authz.Authorization, error) } + +type EventManagerKeeper interface { + AddEvent(ctx sdk.Context, module, chainID, identifier, callback string, payload []byte, status int32, condtion emkeeper.ConditionI) error +} From 69ed5306d23e42cb95e979ff5d886874fc62e584 Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Fri, 5 Apr 2024 21:42:28 +0100 Subject: [PATCH 04/19] move conditions to proto --- .../quicksilver/eventmanager/v1/genesis.proto | 32 +- x/eventmanager/keeper/conditions.go | 61 - x/eventmanager/keeper/events.go | 23 +- x/eventmanager/keeper/events_test.go | 127 ++ x/eventmanager/keeper/keeper_test.go | 151 -- x/eventmanager/module.go | 1 + x/eventmanager/types/conditions.go | 60 + x/eventmanager/types/fields.go | 23 +- x/eventmanager/types/genesis.pb.go | 1539 +++++++++++++++-- x/eventmanager/types/keys.go | 30 +- x/interchainstaking/keeper/redemptions.go | 11 + x/interchainstaking/types/expected_keepers.go | 4 +- 12 files changed, 1643 insertions(+), 419 deletions(-) delete mode 100644 x/eventmanager/keeper/conditions.go create mode 100644 x/eventmanager/keeper/events_test.go create mode 100644 x/eventmanager/types/conditions.go diff --git a/proto/quicksilver/eventmanager/v1/genesis.proto b/proto/quicksilver/eventmanager/v1/genesis.proto index 67f973a55..30d6f45a3 100644 --- a/proto/quicksilver/eventmanager/v1/genesis.proto +++ b/proto/quicksilver/eventmanager/v1/genesis.proto @@ -1,9 +1,9 @@ syntax = "proto3"; package quicksilver.eventmanager.v1; +import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; -import "google/protobuf/duration.proto"; -import "google/protobuf/timestamp.proto"; +import "google/protobuf/any.proto"; option go_package = "github.com/quicksilver-zone/quicksilver/x/eventmanager/types"; @@ -15,9 +15,35 @@ message Event { string module = 5; string callback = 6; bytes payload = 7; - bytes execute_condition = 8; + google.protobuf.Any execute_condition = 8 [(cosmos_proto.accepts_interface) = "quicksilver.interchainstaking.ConditionI"]; int64 emitted_height = 9; } // GenesisState defines the eventmanager module's genesis state. message GenesisState {} + +message FieldValue { + string field = 1; + string value = 2; + bool negate = 3; +} + +message ConditionAny { + repeated FieldValue fields = 1; + bool negate = 2; +} + +message ConditionAll { + repeated FieldValue fields = 1; + bool negate = 2; +} + +message ConditionAnd { + google.protobuf.Any condition1 = 1 [(cosmos_proto.accepts_interface) = "quicksilver.interchainstaking.ConditionI"]; + google.protobuf.Any condition2 = 2 [(cosmos_proto.accepts_interface) = "quicksilver.interchainstaking.ConditionI"]; +} + +message ConditionOr { + google.protobuf.Any condition1 = 1 [(cosmos_proto.accepts_interface) = "quicksilver.interchainstaking.ConditionI"]; + google.protobuf.Any condition2 = 2 [(cosmos_proto.accepts_interface) = "quicksilver.interchainstaking.ConditionI"]; +} diff --git a/x/eventmanager/keeper/conditions.go b/x/eventmanager/keeper/conditions.go deleted file mode 100644 index d7d9f3fb6..000000000 --- a/x/eventmanager/keeper/conditions.go +++ /dev/null @@ -1,61 +0,0 @@ -package keeper - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" -) - -type ConditionI interface { - Resolve(ctx sdk.Context, k *Keeper) bool - Marshal(ctx sdk.Context) []byte -} - -// type ConditionExistsAny struct { -// Fields []types.KV -// negate bool -// } - -// func (c ConditionExistsAny) Resolve(ctx sdk.Context, k *Keeper) bool { -// out := false -// k.IterateEvents(ctx, func(index int64, event types.Event) (stop bool) { -// if event.ResolveAnyFieldValues(c.Fields) { -// out := -// } -// } -// return negate ^ out -// } - -type ConditionExistsAll struct { - Fields []types.FieldValue - Negate bool -} - -func (c ConditionExistsAll) Resolve(ctx sdk.Context, k *Keeper) bool { - out := false - k.IteratePrefixedEvents(ctx, nil, func(index int64, event types.Event) (stop bool) { - if event.ResolveAllFieldValues(c.Fields) { - out = true - return true - } - return false - }) - return c.Negate != out -} - -type ConditionAnd struct { - Condition1 ConditionI - Condition2 ConditionI -} - -func (c ConditionAnd) Resolve(ctx sdk.Context, k *Keeper) bool { - return c.Condition1.Resolve(ctx, k) && c.Condition2.Resolve(ctx, k) -} - -type ConditionOr struct { - Condition1 ConditionI - Condition2 ConditionI -} - -func (c ConditionOr) Resolve(ctx sdk.Context, k *Keeper) bool { - return c.Condition1.Resolve(ctx, k) || c.Condition2.Resolve(ctx, k) -} diff --git a/x/eventmanager/keeper/events.go b/x/eventmanager/keeper/events.go index 5e534c8d5..2395d9b20 100644 --- a/x/eventmanager/keeper/events.go +++ b/x/eventmanager/keeper/events.go @@ -1,6 +1,9 @@ package keeper import ( + "fmt" + + codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" @@ -86,27 +89,37 @@ func (k Keeper) Trigger(ctx sdk.Context, module string, chainID string) { if e.EventStatus == types.EventStatusPending { err := k.Call(ctx, e.Module, e.Callback, e.Payload) if err != nil { + fmt.Println("omfg", "errr", err.Error()) k.Logger(ctx).Error("unable to execute callback", "module", e.Module, "id", e.Identifier, "callback", e.Callback, "error", err) } + e.EventStatus = types.EventStatusActive + k.SetEvent(ctx, e) } return false }) } -func (k Keeper) AddEvent(ctx sdk.Context, module, chainID, identifier, callback string, status int32, condition ConditionI, payload []byte) error { - conditionBytes := []byte{} - if condition != nil { - conditionBytes = condition.Marshal() +func (k Keeper) AddEvent(ctx sdk.Context, + module, chainID, identifier, callback string, + eventType, status int32, + condition types.ConditionI, + payload []byte, +) { + + conditionAny, err := codectypes.NewAnyWithValue(condition) + if err != nil { + panic(err) } event := types.Event{ ChainId: chainID, Module: module, Identifier: identifier, + EventType: eventType, Callback: callback, Payload: payload, EventStatus: status, - ExecuteCondition: conditionBytes, + ExecuteCondition: conditionAny, EmittedHeight: ctx.BlockHeight(), } diff --git a/x/eventmanager/keeper/events_test.go b/x/eventmanager/keeper/events_test.go new file mode 100644 index 000000000..69566301c --- /dev/null +++ b/x/eventmanager/keeper/events_test.go @@ -0,0 +1,127 @@ +package keeper_test + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/quicksilver-zone/quicksilver/x/eventmanager/keeper" + "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" +) + +var GLOBAL_VAR = 0 + +// ___________________________________________________________________________________________________ + +type EventCallback func(*keeper.Keeper, sdk.Context, []byte) error + +// Callbacks wrapper struct for interchainstaking keeper. +type EventCallbacks struct { + k *keeper.Keeper + callbacks map[string]EventCallback +} + +var _ types.EventCallbacks = EventCallbacks{} + +// Call calls callback handler. +func (c EventCallbacks) Call(ctx sdk.Context, id string, args []byte) error { + if !c.Has(id) { + return fmt.Errorf("callback %s not found", id) + } + return c.callbacks[id](c.k, ctx, args) +} + +func (c EventCallbacks) Has(id string) bool { + _, found := c.callbacks[id] + return found +} + +func (c EventCallbacks) AddCallback(id string, fn interface{}) types.EventCallbacks { + c.callbacks[id], _ = fn.(EventCallback) + return c +} + +func (c EventCallbacks) RegisterCallbacks() types.EventCallbacks { + a := c. + AddCallback("testCallback", EventCallback(testCallback)) + + return a.(EventCallbacks) +} + +// ----------------------------------- +// Callback Handlers +// ----------------------------------- + +func testCallback(k *keeper.Keeper, ctx sdk.Context, args []byte) error { + GLOBAL_VAR = 12345 + return nil +} + +// tests + +func (suite *KeeperTestSuite) TestEventLifecycle() { + app := suite.GetSimApp(suite.chainA) + ctx := suite.chainA.GetContext() + + callbackHandler := EventCallbacks{&app.EventManagerKeeper, make(map[string]EventCallback, 0)} + + app.EventManagerKeeper.SetCallbackHandler(types.ModuleName, callbackHandler) + + app.EventManagerKeeper.AddEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test", "testCallback", types.EventTypeICADelegate, types.EventStatusPending, nil, nil) + + events := app.EventManagerKeeper.AllEvents(ctx) + + suite.Equal(1, len(events)) + + GLOBAL_VAR = 0 + + app.EventManagerKeeper.Trigger(ctx, types.ModuleName, suite.chainB.ChainID) + + event, found := app.EventManagerKeeper.GetEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test") + + suite.True(found) + suite.Equal(12345, GLOBAL_VAR) + + suite.Equal(event.EventStatus, types.EventStatusActive) + + app.EventManagerKeeper.DeleteEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test") + + events = app.EventManagerKeeper.AllEvents(ctx) + + suite.Equal(0, len(events)) +} + +func (suite *KeeperTestSuite) TestEventLifecycleWithCondition() { + app := suite.GetSimApp(suite.chainA) + ctx := suite.chainA.GetContext() + + callbackHandler := EventCallbacks{&app.EventManagerKeeper, make(map[string]EventCallback, 0)} + + app.EventManagerKeeper.SetCallbackHandler(types.ModuleName, callbackHandler) + + condition := &types.ConditionAll{Fields: []*types.FieldValue{{Field: types.FieldModule, Value: types.ModuleName, Negate: true}}, Negate: false} + + app.EventManagerKeeper.AddEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test", "testCallback", types.EventTypeICADelegate, types.EventStatusPending, condition, nil) + + events := app.EventManagerKeeper.AllEvents(ctx) + + suite.Equal(1, len(events)) + + GLOBAL_VAR = 0 + + app.EventManagerKeeper.Trigger(ctx, types.ModuleName, suite.chainB.ChainID) + + event, found := app.EventManagerKeeper.GetEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test") + + fmt.Println(event) + suite.True(found) + suite.Equal(12345, GLOBAL_VAR) + + suite.Equal(event.EventStatus, types.EventStatusActive) + + app.EventManagerKeeper.DeleteEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test") + + events = app.EventManagerKeeper.AllEvents(ctx) + + suite.Equal(0, len(events)) +} diff --git a/x/eventmanager/keeper/keeper_test.go b/x/eventmanager/keeper/keeper_test.go index cf4e40bbe..8bee4e9f2 100644 --- a/x/eventmanager/keeper/keeper_test.go +++ b/x/eventmanager/keeper/keeper_test.go @@ -1,19 +1,13 @@ package keeper_test import ( - "math/rand" "testing" "github.com/stretchr/testify/suite" - sdk "github.com/cosmos/cosmos-sdk/types" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - ibctesting "github.com/cosmos/ibc-go/v5/testing" "github.com/quicksilver-zone/quicksilver/app" - "github.com/quicksilver-zone/quicksilver/x/interchainquery/keeper" - icqtypes "github.com/quicksilver-zone/quicksilver/x/interchainquery/types" ) const TestOwnerAddress = "cosmos17dtl0mjt3t77kpuhg2edqzjpszulwhgzuj9ljs" @@ -54,142 +48,6 @@ func (suite *KeeperTestSuite) SetupTest() { suite.coordinator.SetupConnections(suite.path) } -func (suite *KeeperTestSuite) TestMakeRequest() { - bondedQuery := stakingtypes.QueryValidatorsRequest{Status: stakingtypes.BondStatusBonded} - bz, err := bondedQuery.Marshal() - suite.NoError(err) - - suite.GetSimApp(suite.chainA).InterchainQueryKeeper.MakeRequest( - suite.chainA.GetContext(), - suite.path.EndpointB.ConnectionID, - suite.chainB.ChainID, - "cosmos.staking.v1beta1.Query/Validators", - bz, - sdk.NewInt(200), - "", - "", - 0, - ) - - id := keeper.GenerateQueryHash(suite.path.EndpointB.ConnectionID, suite.chainB.ChainID, "cosmos.staking.v1beta1.Query/Validators", bz, "", "") - query, found := suite.GetSimApp(suite.chainA).InterchainQueryKeeper.GetQuery(suite.chainA.GetContext(), id) - suite.True(found) - suite.Equal(suite.path.EndpointB.ConnectionID, query.ConnectionId) - suite.Equal(suite.chainB.ChainID, query.ChainId) - suite.Equal("cosmos.staking.v1beta1.Query/Validators", query.QueryType) - suite.Equal(sdk.NewInt(200), query.Period) - suite.Equal("", query.CallbackId) - - suite.GetSimApp(suite.chainA).InterchainQueryKeeper.MakeRequest( - suite.chainA.GetContext(), - suite.path.EndpointB.ConnectionID, - suite.chainB.ChainID, - "cosmos.staking.v1beta1.Query/Validators", - bz, - sdk.NewInt(200), - "", - "", - 0, - ) -} - -func (suite *KeeperTestSuite) TestSubmitQueryResponse() { - bondedQuery := stakingtypes.QueryValidatorsRequest{Status: stakingtypes.BondStatusBonded} - bz, err := bondedQuery.Marshal() - suite.NoError(err) - - qvr := stakingtypes.QueryValidatorsResponse{ - Validators: suite.GetSimApp(suite.chainB).StakingKeeper.GetBondedValidatorsByPower(suite.chainB.GetContext()), - } - - tests := []struct { - query *icqtypes.Query - setQuery bool - expectError error - }{ - { - suite.GetSimApp(suite.chainA).InterchainQueryKeeper. - NewQuery( - "", - suite.path.EndpointB.ConnectionID, - suite.chainB.ChainID, - "cosmos.staking.v1beta1.Query/Validators", - bz, - sdk.NewInt(200), - "", - 0, - ), - true, - nil, - }, - { - suite.GetSimApp(suite.chainA).InterchainQueryKeeper. - NewQuery( - "", - suite.path.EndpointB.ConnectionID, - suite.chainB.ChainID, - "cosmos.staking.v1beta1.Query/Validators", - bz, - sdk.NewInt(200), - "", - 10, - ), - true, - nil, - }, - { - suite.GetSimApp(suite.chainA).InterchainQueryKeeper. - NewQuery( - "", - suite.path.EndpointB.ConnectionID, - suite.chainB.ChainID, - "cosmos.staking.v1beta1.Query/Validators", - bz, - sdk.NewInt(-200), - "", - 0, - ), - true, - nil, - }, - { - suite.GetSimApp(suite.chainA).InterchainQueryKeeper. - NewQuery( - "", - suite.path.EndpointB.ConnectionID, - suite.chainB.ChainID, - "cosmos.staking.v1beta1.Query/Validators", - bz, - sdk.NewInt(100), - "", - 0, - ), - false, - nil, - }, - } - - for _, tc := range tests { - // set the query - if tc.setQuery { - suite.GetSimApp(suite.chainA).InterchainQueryKeeper.SetQuery(suite.chainA.GetContext(), *tc.query) - } - - icqmsgSrv := keeper.NewMsgServerImpl(suite.GetSimApp(suite.chainA).InterchainQueryKeeper) - - qmsg := icqtypes.MsgSubmitQueryResponse{ - ChainId: suite.chainB.ChainID, - QueryId: keeper.GenerateQueryHash(tc.query.ConnectionId, tc.query.ChainId, tc.query.QueryType, bz, "", ""), - Result: suite.GetSimApp(suite.chainB).AppCodec().MustMarshalJSON(&qvr), - Height: suite.chainB.CurrentHeader.Height, - FromAddress: TestOwnerAddress, - } - - _, err = icqmsgSrv.SubmitQueryResponse(sdk.WrapSDKContext(suite.chainA.GetContext()), &qmsg) - suite.Equal(tc.expectError, err) - } -} - func newSimAppPath(chainA, chainB *ibctesting.TestChain) *ibctesting.Path { path := ibctesting.NewPath(chainA, chainB) path.EndpointA.ChannelConfig.PortID = ibctesting.TransferPort @@ -197,12 +55,3 @@ func newSimAppPath(chainA, chainB *ibctesting.TestChain) *ibctesting.Path { return path } - -func (suite *KeeperTestSuite) TestLatestHeight() { - height := rand.Uint64() - chainID := "test" - - suite.GetSimApp(suite.chainA).InterchainQueryKeeper.SetLatestHeight(suite.chainA.GetContext(), chainID, height) - got := suite.GetSimApp(suite.chainA).InterchainQueryKeeper.GetLatestHeight(suite.chainA.GetContext(), chainID) - suite.Require().Equal(height, got) -} diff --git a/x/eventmanager/module.go b/x/eventmanager/module.go index ed6fb6262..4371fe538 100644 --- a/x/eventmanager/module.go +++ b/x/eventmanager/module.go @@ -47,6 +47,7 @@ func (AppModuleBasic) Name() string { // RegisterLegacyAminoCodec registers a legacy amino codec. func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterLegacyAminoCodec(cdc) } // RegisterInterfaces registers the module's interface types. diff --git a/x/eventmanager/types/conditions.go b/x/eventmanager/types/conditions.go new file mode 100644 index 000000000..61e463947 --- /dev/null +++ b/x/eventmanager/types/conditions.go @@ -0,0 +1,60 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/gogo/protobuf/proto" +) + +type EMKeeper interface { + IteratePrefixedEvents(sdk.Context, []byte, func(int64, Event) (stop bool)) +} + +type ConditionI interface { + proto.Message + Resolve(ctx sdk.Context, k EMKeeper) bool +} + +// type ConditionExistsAny struct { +// Fields []types.KV +// negate bool +// } + +// func (c ConditionExistsAny) Resolve(ctx sdk.Context, k *Keeper) bool { +// out := false +// k.IterateEvents(ctx, func(index int64, event types.Event) (stop bool) { +// if event.ResolveAnyFieldValues(c.Fields) { +// out := +// } +// } +// return negate ^ out +// } + +func (c ConditionAll) Resolve(ctx sdk.Context, k EMKeeper) bool { + out := false + k.IteratePrefixedEvents(ctx, nil, func(index int64, event Event) (stop bool) { + if event.ResolveAllFieldValues(c.Fields) { + out = true + return true + } + return false + }) + return c.Negate != out +} + +func (c ConditionAnd) Resolve(ctx sdk.Context, k EMKeeper) bool { + var condition1 ConditionI + var condition2 ConditionI + _ = ModuleCdc.UnpackAny(c.Condition1, &condition1) + _ = ModuleCdc.UnpackAny(c.Condition1, &condition1) + + return condition1.Resolve(ctx, k) && condition2.Resolve(ctx, k) +} + +func (c ConditionOr) Resolve(ctx sdk.Context, k EMKeeper) bool { + var condition1 ConditionI + var condition2 ConditionI + _ = ModuleCdc.UnpackAny(c.Condition1, &condition1) + _ = ModuleCdc.UnpackAny(c.Condition1, &condition1) + + return condition1.Resolve(ctx, k) || condition2.Resolve(ctx, k) +} diff --git a/x/eventmanager/types/fields.go b/x/eventmanager/types/fields.go index 322fdd1f0..7ad05f743 100644 --- a/x/eventmanager/types/fields.go +++ b/x/eventmanager/types/fields.go @@ -2,16 +2,9 @@ package types import ( "strconv" - "strings" ) -type FieldValue struct { - Field string - Value string - Negate bool -} - -func (e Event) ResolveAllFieldValues(fvs []FieldValue) bool { +func (e Event) ResolveAllFieldValues(fvs []*FieldValue) bool { for _, fv := range fvs { if !e.resolveFieldValue(fv) { return false @@ -20,7 +13,7 @@ func (e Event) ResolveAllFieldValues(fvs []FieldValue) bool { return true } -func (e Event) ResolveAnyFieldValues(fvs []FieldValue) bool { +func (e Event) ResolveAnyFieldValues(fvs []*FieldValue) bool { for _, fv := range fvs { if e.resolveFieldValue(fv) { return true @@ -29,9 +22,9 @@ func (e Event) ResolveAnyFieldValues(fvs []FieldValue) bool { return false } -func (e Event) resolveFieldValue(fv FieldValue) bool { +func (e Event) resolveFieldValue(fv *FieldValue) bool { - if strings.ToLower(fv.Field) == "eventtype" { + if fv.Field == FieldEventType { v, err := strconv.ParseInt(fv.Value, 10, 32) if err != nil { return fv.Negate @@ -42,7 +35,7 @@ func (e Event) resolveFieldValue(fv FieldValue) bool { return fv.Negate } - if strings.ToLower(fv.Field) == "eventstatus" { + if fv.Field == FieldEventStatus { v, err := strconv.ParseInt(fv.Value, 10, 32) if err != nil { return fv.Negate @@ -53,13 +46,13 @@ func (e Event) resolveFieldValue(fv FieldValue) bool { return fv.Negate } - if strings.ToLower(fv.Field) == "module" && fv.Value == e.Module { + if fv.Field == FieldModule && fv.Value == e.Module { return !fv.Negate } - if strings.ToLower(fv.Field) == "identifier" && fv.Value == e.Identifier { + if fv.Field == FieldIdentifier && fv.Value == e.Identifier { return !fv.Negate } - if strings.ToLower(fv.Field) == "chainid" && fv.Value == e.ChainId { + if fv.Field == FieldChainID && fv.Value == e.ChainId { return !fv.Negate } diff --git a/x/eventmanager/types/genesis.pb.go b/x/eventmanager/types/genesis.pb.go index 8f5b71584..bda6a1d86 100644 --- a/x/eventmanager/types/genesis.pb.go +++ b/x/eventmanager/types/genesis.pb.go @@ -5,10 +5,10 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + types "github.com/cosmos/cosmos-sdk/codec/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/gogo/protobuf/proto" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -26,15 +26,15 @@ var _ = math.Inf const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type Event struct { - ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` - EventType int32 `protobuf:"varint,2,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` - Identifier string `protobuf:"bytes,3,opt,name=identifier,proto3" json:"identifier,omitempty"` - EventStatus int32 `protobuf:"varint,4,opt,name=event_status,json=eventStatus,proto3" json:"event_status,omitempty"` - Module string `protobuf:"bytes,5,opt,name=module,proto3" json:"module,omitempty"` - Callback string `protobuf:"bytes,6,opt,name=callback,proto3" json:"callback,omitempty"` - Payload []byte `protobuf:"bytes,7,opt,name=payload,proto3" json:"payload,omitempty"` - ExecuteCondition []byte `protobuf:"bytes,8,opt,name=execute_condition,json=executeCondition,proto3" json:"execute_condition,omitempty"` - EmittedHeight int64 `protobuf:"varint,9,opt,name=emitted_height,json=emittedHeight,proto3" json:"emitted_height,omitempty"` + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + EventType int32 `protobuf:"varint,2,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` + Identifier string `protobuf:"bytes,3,opt,name=identifier,proto3" json:"identifier,omitempty"` + EventStatus int32 `protobuf:"varint,4,opt,name=event_status,json=eventStatus,proto3" json:"event_status,omitempty"` + Module string `protobuf:"bytes,5,opt,name=module,proto3" json:"module,omitempty"` + Callback string `protobuf:"bytes,6,opt,name=callback,proto3" json:"callback,omitempty"` + Payload []byte `protobuf:"bytes,7,opt,name=payload,proto3" json:"payload,omitempty"` + ExecuteCondition *types.Any `protobuf:"bytes,8,opt,name=execute_condition,json=executeCondition,proto3" json:"execute_condition,omitempty"` + EmittedHeight int64 `protobuf:"varint,9,opt,name=emitted_height,json=emittedHeight,proto3" json:"emitted_height,omitempty"` } func (m *Event) Reset() { *m = Event{} } @@ -119,7 +119,7 @@ func (m *Event) GetPayload() []byte { return nil } -func (m *Event) GetExecuteCondition() []byte { +func (m *Event) GetExecuteCondition() *types.Any { if m != nil { return m.ExecuteCondition } @@ -170,9 +170,282 @@ func (m *GenesisState) XXX_DiscardUnknown() { var xxx_messageInfo_GenesisState proto.InternalMessageInfo +type FieldValue struct { + Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + Negate bool `protobuf:"varint,3,opt,name=negate,proto3" json:"negate,omitempty"` +} + +func (m *FieldValue) Reset() { *m = FieldValue{} } +func (m *FieldValue) String() string { return proto.CompactTextString(m) } +func (*FieldValue) ProtoMessage() {} +func (*FieldValue) Descriptor() ([]byte, []int) { + return fileDescriptor_74127b30ab787dbd, []int{2} +} +func (m *FieldValue) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FieldValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_FieldValue.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *FieldValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_FieldValue.Merge(m, src) +} +func (m *FieldValue) XXX_Size() int { + return m.Size() +} +func (m *FieldValue) XXX_DiscardUnknown() { + xxx_messageInfo_FieldValue.DiscardUnknown(m) +} + +var xxx_messageInfo_FieldValue proto.InternalMessageInfo + +func (m *FieldValue) GetField() string { + if m != nil { + return m.Field + } + return "" +} + +func (m *FieldValue) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +func (m *FieldValue) GetNegate() bool { + if m != nil { + return m.Negate + } + return false +} + +type ConditionAny struct { + Fields []*FieldValue `protobuf:"bytes,1,rep,name=fields,proto3" json:"fields,omitempty"` + Negate bool `protobuf:"varint,2,opt,name=negate,proto3" json:"negate,omitempty"` +} + +func (m *ConditionAny) Reset() { *m = ConditionAny{} } +func (m *ConditionAny) String() string { return proto.CompactTextString(m) } +func (*ConditionAny) ProtoMessage() {} +func (*ConditionAny) Descriptor() ([]byte, []int) { + return fileDescriptor_74127b30ab787dbd, []int{3} +} +func (m *ConditionAny) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ConditionAny) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ConditionAny.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ConditionAny) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConditionAny.Merge(m, src) +} +func (m *ConditionAny) XXX_Size() int { + return m.Size() +} +func (m *ConditionAny) XXX_DiscardUnknown() { + xxx_messageInfo_ConditionAny.DiscardUnknown(m) +} + +var xxx_messageInfo_ConditionAny proto.InternalMessageInfo + +func (m *ConditionAny) GetFields() []*FieldValue { + if m != nil { + return m.Fields + } + return nil +} + +func (m *ConditionAny) GetNegate() bool { + if m != nil { + return m.Negate + } + return false +} + +type ConditionAll struct { + Fields []*FieldValue `protobuf:"bytes,1,rep,name=fields,proto3" json:"fields,omitempty"` + Negate bool `protobuf:"varint,2,opt,name=negate,proto3" json:"negate,omitempty"` +} + +func (m *ConditionAll) Reset() { *m = ConditionAll{} } +func (m *ConditionAll) String() string { return proto.CompactTextString(m) } +func (*ConditionAll) ProtoMessage() {} +func (*ConditionAll) Descriptor() ([]byte, []int) { + return fileDescriptor_74127b30ab787dbd, []int{4} +} +func (m *ConditionAll) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ConditionAll) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ConditionAll.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ConditionAll) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConditionAll.Merge(m, src) +} +func (m *ConditionAll) XXX_Size() int { + return m.Size() +} +func (m *ConditionAll) XXX_DiscardUnknown() { + xxx_messageInfo_ConditionAll.DiscardUnknown(m) +} + +var xxx_messageInfo_ConditionAll proto.InternalMessageInfo + +func (m *ConditionAll) GetFields() []*FieldValue { + if m != nil { + return m.Fields + } + return nil +} + +func (m *ConditionAll) GetNegate() bool { + if m != nil { + return m.Negate + } + return false +} + +type ConditionAnd struct { + Condition1 *types.Any `protobuf:"bytes,1,opt,name=condition1,proto3" json:"condition1,omitempty"` + Condition2 *types.Any `protobuf:"bytes,2,opt,name=condition2,proto3" json:"condition2,omitempty"` +} + +func (m *ConditionAnd) Reset() { *m = ConditionAnd{} } +func (m *ConditionAnd) String() string { return proto.CompactTextString(m) } +func (*ConditionAnd) ProtoMessage() {} +func (*ConditionAnd) Descriptor() ([]byte, []int) { + return fileDescriptor_74127b30ab787dbd, []int{5} +} +func (m *ConditionAnd) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ConditionAnd) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ConditionAnd.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ConditionAnd) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConditionAnd.Merge(m, src) +} +func (m *ConditionAnd) XXX_Size() int { + return m.Size() +} +func (m *ConditionAnd) XXX_DiscardUnknown() { + xxx_messageInfo_ConditionAnd.DiscardUnknown(m) +} + +var xxx_messageInfo_ConditionAnd proto.InternalMessageInfo + +func (m *ConditionAnd) GetCondition1() *types.Any { + if m != nil { + return m.Condition1 + } + return nil +} + +func (m *ConditionAnd) GetCondition2() *types.Any { + if m != nil { + return m.Condition2 + } + return nil +} + +type ConditionOr struct { + Condition1 *types.Any `protobuf:"bytes,1,opt,name=condition1,proto3" json:"condition1,omitempty"` + Condition2 *types.Any `protobuf:"bytes,2,opt,name=condition2,proto3" json:"condition2,omitempty"` +} + +func (m *ConditionOr) Reset() { *m = ConditionOr{} } +func (m *ConditionOr) String() string { return proto.CompactTextString(m) } +func (*ConditionOr) ProtoMessage() {} +func (*ConditionOr) Descriptor() ([]byte, []int) { + return fileDescriptor_74127b30ab787dbd, []int{6} +} +func (m *ConditionOr) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ConditionOr) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ConditionOr.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ConditionOr) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConditionOr.Merge(m, src) +} +func (m *ConditionOr) XXX_Size() int { + return m.Size() +} +func (m *ConditionOr) XXX_DiscardUnknown() { + xxx_messageInfo_ConditionOr.DiscardUnknown(m) +} + +var xxx_messageInfo_ConditionOr proto.InternalMessageInfo + +func (m *ConditionOr) GetCondition1() *types.Any { + if m != nil { + return m.Condition1 + } + return nil +} + +func (m *ConditionOr) GetCondition2() *types.Any { + if m != nil { + return m.Condition2 + } + return nil +} + func init() { proto.RegisterType((*Event)(nil), "quicksilver.eventmanager.v1.Event") proto.RegisterType((*GenesisState)(nil), "quicksilver.eventmanager.v1.GenesisState") + proto.RegisterType((*FieldValue)(nil), "quicksilver.eventmanager.v1.FieldValue") + proto.RegisterType((*ConditionAny)(nil), "quicksilver.eventmanager.v1.ConditionAny") + proto.RegisterType((*ConditionAll)(nil), "quicksilver.eventmanager.v1.ConditionAll") + proto.RegisterType((*ConditionAnd)(nil), "quicksilver.eventmanager.v1.ConditionAnd") + proto.RegisterType((*ConditionOr)(nil), "quicksilver.eventmanager.v1.ConditionOr") } func init() { @@ -180,32 +453,42 @@ func init() { } var fileDescriptor_74127b30ab787dbd = []byte{ - // 390 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x92, 0xcd, 0x6e, 0xd4, 0x30, - 0x14, 0x85, 0xc7, 0x2d, 0xf3, 0x67, 0x86, 0x0a, 0x2c, 0x84, 0xcc, 0x20, 0x4c, 0xa8, 0x84, 0x14, - 0x84, 0x88, 0x55, 0xb1, 0x65, 0x05, 0x42, 0xc0, 0x36, 0x20, 0x16, 0x6c, 0x22, 0x27, 0xbe, 0x75, - 0xac, 0x26, 0x76, 0x48, 0x9c, 0xa8, 0xc3, 0x53, 0xf0, 0x14, 0x3c, 0x0b, 0xcb, 0x2e, 0x59, 0xa2, - 0x99, 0x17, 0x41, 0x71, 0x52, 0x14, 0xba, 0xcb, 0xf9, 0xce, 0x39, 0xc9, 0xd5, 0xbd, 0xc1, 0xcf, - 0xbf, 0xb5, 0x3a, 0xbb, 0x68, 0x74, 0xd1, 0x41, 0xcd, 0xa1, 0x03, 0xe3, 0x4a, 0x61, 0x84, 0x82, - 0x9a, 0x77, 0x67, 0x5c, 0x81, 0x81, 0x46, 0x37, 0x51, 0x55, 0x5b, 0x67, 0xc9, 0xa3, 0x49, 0x34, - 0x9a, 0x46, 0xa3, 0xee, 0x6c, 0x7b, 0x5f, 0x59, 0x65, 0x7d, 0x8e, 0xf7, 0x4f, 0x43, 0x65, 0xcb, - 0x94, 0xb5, 0xaa, 0x00, 0xee, 0x55, 0xda, 0x9e, 0x73, 0xd9, 0xd6, 0xc2, 0x69, 0x6b, 0x46, 0xff, - 0xc9, 0x4d, 0xdf, 0xe9, 0x12, 0x1a, 0x27, 0xca, 0x6a, 0x08, 0x9c, 0xfe, 0x3c, 0xc2, 0xf3, 0x77, - 0xfd, 0xa7, 0xc8, 0x43, 0xbc, 0xca, 0x72, 0xa1, 0x4d, 0xa2, 0x25, 0x45, 0x01, 0x0a, 0xd7, 0xf1, - 0xd2, 0xeb, 0x8f, 0x92, 0x3c, 0xc6, 0xd8, 0x8f, 0x93, 0xb8, 0x5d, 0x05, 0xf4, 0x28, 0x40, 0xe1, - 0x3c, 0x5e, 0x7b, 0xf2, 0x79, 0x57, 0x01, 0x61, 0x18, 0x6b, 0x09, 0xc6, 0xe9, 0x73, 0x0d, 0x35, - 0x3d, 0xf6, 0xdd, 0x09, 0x21, 0x4f, 0xf1, 0x66, 0xa8, 0x37, 0x4e, 0xb8, 0xb6, 0xa1, 0xb7, 0xfc, - 0x0b, 0x6e, 0x7b, 0xf6, 0xc9, 0x23, 0xf2, 0x00, 0x2f, 0x4a, 0x2b, 0xdb, 0x02, 0xe8, 0xdc, 0xd7, - 0x47, 0x45, 0xb6, 0x78, 0x95, 0x89, 0xa2, 0x48, 0x45, 0x76, 0x41, 0x17, 0xde, 0xf9, 0xa7, 0x09, - 0xc5, 0xcb, 0x4a, 0xec, 0x0a, 0x2b, 0x24, 0x5d, 0x06, 0x28, 0xdc, 0xc4, 0xd7, 0x92, 0xbc, 0xc0, - 0xf7, 0xe0, 0x12, 0xb2, 0xd6, 0x41, 0x92, 0x59, 0x23, 0x75, 0xbf, 0x10, 0xba, 0xf2, 0x99, 0xbb, - 0xa3, 0xf1, 0xf6, 0x9a, 0x93, 0x67, 0xf8, 0x04, 0x4a, 0xed, 0x1c, 0xc8, 0x24, 0x07, 0xad, 0x72, - 0x47, 0xd7, 0x01, 0x0a, 0x8f, 0xe3, 0x3b, 0x23, 0xfd, 0xe0, 0xe1, 0xe9, 0x09, 0xde, 0xbc, 0x1f, - 0xae, 0xd5, 0x8f, 0x0c, 0x6f, 0xbe, 0xfc, 0xda, 0x33, 0x74, 0xb5, 0x67, 0xe8, 0xcf, 0x9e, 0xa1, - 0x1f, 0x07, 0x36, 0xbb, 0x3a, 0xb0, 0xd9, 0xef, 0x03, 0x9b, 0x7d, 0x7d, 0xad, 0xb4, 0xcb, 0xdb, - 0x34, 0xca, 0x6c, 0xc9, 0x27, 0x17, 0x7d, 0xf9, 0xdd, 0x1a, 0x98, 0x02, 0x7e, 0xf9, 0xff, 0xff, - 0xd0, 0x2f, 0xb7, 0x49, 0x17, 0xfe, 0x2e, 0xaf, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x64, 0x4b, - 0x05, 0x58, 0x38, 0x02, 0x00, 0x00, + // 549 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x54, 0xbd, 0x8e, 0xd3, 0x40, + 0x10, 0xce, 0x26, 0xe4, 0x6f, 0x13, 0x4e, 0xb0, 0x8a, 0x90, 0x13, 0x84, 0x65, 0x22, 0x21, 0x8c, + 0xc4, 0xd9, 0x4a, 0x68, 0x91, 0xd0, 0x1d, 0xe2, 0xe7, 0x2a, 0x90, 0x41, 0x57, 0xd0, 0x44, 0x1b, + 0x7b, 0xb2, 0x59, 0xc5, 0xd9, 0x0d, 0xf6, 0x3a, 0x3a, 0xf3, 0x14, 0x3c, 0x0c, 0x0f, 0x81, 0xa8, + 0xae, 0x01, 0x51, 0xa2, 0xa4, 0xe3, 0x29, 0x90, 0xd7, 0x4e, 0x70, 0x0a, 0xa8, 0x8e, 0x86, 0xce, + 0xdf, 0x37, 0x33, 0xdf, 0xcc, 0x7c, 0x63, 0x2d, 0x7e, 0xf0, 0x3e, 0xe1, 0xfe, 0x22, 0xe6, 0xe1, + 0x1a, 0x22, 0x17, 0xd6, 0x20, 0xd4, 0x92, 0x0a, 0xca, 0x20, 0x72, 0xd7, 0x23, 0x97, 0x81, 0x80, + 0x98, 0xc7, 0xce, 0x2a, 0x92, 0x4a, 0x92, 0xdb, 0xa5, 0x54, 0xa7, 0x9c, 0xea, 0xac, 0x47, 0x83, + 0xbe, 0x2f, 0xe3, 0xa5, 0x8c, 0x27, 0x3a, 0xd5, 0xcd, 0x41, 0x5e, 0x37, 0xe8, 0x31, 0xc9, 0x64, + 0xce, 0x67, 0x5f, 0x05, 0xdb, 0x67, 0x52, 0xb2, 0x10, 0x5c, 0x8d, 0xa6, 0xc9, 0xcc, 0xa5, 0x22, + 0xcd, 0x43, 0xc3, 0x9f, 0x55, 0x5c, 0x7f, 0x96, 0xe9, 0x93, 0x3e, 0x6e, 0xf9, 0x73, 0xca, 0xc5, + 0x84, 0x07, 0x06, 0xb2, 0x90, 0xdd, 0xf6, 0x9a, 0x1a, 0x9f, 0x05, 0xe4, 0x0e, 0xc6, 0x7a, 0x86, + 0x89, 0x4a, 0x57, 0x60, 0x54, 0x2d, 0x64, 0xd7, 0xbd, 0xb6, 0x66, 0xde, 0xa6, 0x2b, 0x20, 0x26, + 0xc6, 0x3c, 0x00, 0xa1, 0xf8, 0x8c, 0x43, 0x64, 0xd4, 0x74, 0x6d, 0x89, 0x21, 0x77, 0x71, 0x37, + 0x2f, 0x8f, 0x15, 0x55, 0x49, 0x6c, 0x5c, 0xd3, 0x02, 0x1d, 0xcd, 0xbd, 0xd1, 0x14, 0xb9, 0x85, + 0x1b, 0x4b, 0x19, 0x24, 0x21, 0x18, 0x75, 0x5d, 0x5e, 0x20, 0x32, 0xc0, 0x2d, 0x9f, 0x86, 0xe1, + 0x94, 0xfa, 0x0b, 0xa3, 0xa1, 0x23, 0x7b, 0x4c, 0x0c, 0xdc, 0x5c, 0xd1, 0x34, 0x94, 0x34, 0x30, + 0x9a, 0x16, 0xb2, 0xbb, 0xde, 0x0e, 0x12, 0x89, 0x6f, 0xc2, 0x05, 0xf8, 0x89, 0x82, 0x89, 0x2f, + 0x45, 0xc0, 0x15, 0x97, 0xc2, 0x68, 0x59, 0xc8, 0xee, 0x8c, 0x7b, 0x4e, 0xee, 0x85, 0xb3, 0xf3, + 0xc2, 0x39, 0x11, 0xe9, 0xe9, 0xc3, 0x2f, 0x9f, 0x8e, 0xed, 0xb2, 0xe5, 0x5c, 0x28, 0x88, 0xf4, + 0xfa, 0xb1, 0xa2, 0x0b, 0x2e, 0x98, 0xf3, 0x74, 0x27, 0x74, 0xe6, 0xdd, 0x28, 0xc4, 0xf7, 0x14, + 0xb9, 0x87, 0x8f, 0x60, 0xc9, 0x95, 0x82, 0x60, 0x32, 0x07, 0xce, 0xe6, 0xca, 0x68, 0x5b, 0xc8, + 0xae, 0x79, 0xd7, 0x0b, 0xf6, 0xa5, 0x26, 0x87, 0x47, 0xb8, 0xfb, 0x22, 0x3f, 0x73, 0xb6, 0x36, + 0x0c, 0x5f, 0x63, 0xfc, 0x9c, 0x43, 0x18, 0x9c, 0xd3, 0x30, 0x01, 0xd2, 0xc3, 0xf5, 0x59, 0x86, + 0x0a, 0xf7, 0x73, 0x90, 0xb1, 0xeb, 0x2c, 0xac, 0x6d, 0x6f, 0x7b, 0x39, 0xc8, 0xfc, 0x12, 0xc0, + 0xa8, 0x02, 0x6d, 0x77, 0xcb, 0x2b, 0xd0, 0x90, 0xe1, 0xee, 0x7e, 0xaa, 0x13, 0x91, 0x92, 0x27, + 0xb8, 0xa1, 0x65, 0x62, 0x03, 0x59, 0x35, 0xbb, 0x33, 0xbe, 0xef, 0xfc, 0xe5, 0xc7, 0x72, 0x7e, + 0x0f, 0xe3, 0x15, 0x65, 0xa5, 0x46, 0xd5, 0x3f, 0x37, 0x0a, 0xc3, 0x7f, 0xd7, 0xe8, 0x1b, 0x3a, + 0x58, 0x29, 0x20, 0x53, 0x8c, 0xf7, 0x47, 0x1d, 0x69, 0xaf, 0xae, 0xe6, 0xaa, 0x25, 0xd5, 0x83, + 0x1e, 0x63, 0x3d, 0xd0, 0x55, 0xf7, 0x18, 0x0f, 0xbf, 0x22, 0xdc, 0xd9, 0x87, 0x5e, 0x45, 0xff, + 0xcb, 0x5e, 0xa7, 0xe7, 0x9f, 0x37, 0x26, 0xba, 0xdc, 0x98, 0xe8, 0xc7, 0xc6, 0x44, 0x1f, 0xb7, + 0x66, 0xe5, 0x72, 0x6b, 0x56, 0xbe, 0x6f, 0xcd, 0xca, 0xbb, 0xc7, 0x8c, 0xab, 0x79, 0x32, 0x75, + 0x7c, 0xb9, 0x74, 0x4b, 0xd2, 0xc7, 0x1f, 0xa4, 0x80, 0x32, 0xe1, 0x5e, 0x1c, 0xbe, 0x8e, 0xd9, + 0xab, 0x13, 0x4f, 0x1b, 0x7a, 0xbe, 0x47, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x4b, 0x91, 0x6f, + 0x19, 0x46, 0x05, 0x00, 0x00, } func (m *Event) Marshal() (dAtA []byte, err error) { @@ -233,10 +516,15 @@ func (m *Event) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x48 } - if len(m.ExecuteCondition) > 0 { - i -= len(m.ExecuteCondition) - copy(dAtA[i:], m.ExecuteCondition) - i = encodeVarintGenesis(dAtA, i, uint64(len(m.ExecuteCondition))) + if m.ExecuteCondition != nil { + { + size, err := m.ExecuteCondition.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0x42 } @@ -311,73 +599,398 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { - offset -= sovGenesis(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ +func (m *FieldValue) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - dAtA[offset] = uint8(v) - return base + return dAtA[:n], nil } -func (m *Event) Size() (n int) { - if m == nil { - return 0 - } + +func (m *FieldValue) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *FieldValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - l = len(m.ChainId) - if l > 0 { - n += 1 + l + sovGenesis(uint64(l)) - } - if m.EventType != 0 { - n += 1 + sovGenesis(uint64(m.EventType)) - } - l = len(m.Identifier) - if l > 0 { - n += 1 + l + sovGenesis(uint64(l)) - } - if m.EventStatus != 0 { - n += 1 + sovGenesis(uint64(m.EventStatus)) - } - l = len(m.Module) - if l > 0 { - n += 1 + l + sovGenesis(uint64(l)) - } - l = len(m.Callback) - if l > 0 { - n += 1 + l + sovGenesis(uint64(l)) - } - l = len(m.Payload) - if l > 0 { - n += 1 + l + sovGenesis(uint64(l)) + if m.Negate { + i-- + if m.Negate { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 } - l = len(m.ExecuteCondition) - if l > 0 { - n += 1 + l + sovGenesis(uint64(l)) + if len(m.Value) > 0 { + i -= len(m.Value) + copy(dAtA[i:], m.Value) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Value))) + i-- + dAtA[i] = 0x12 } - if m.EmittedHeight != 0 { - n += 1 + sovGenesis(uint64(m.EmittedHeight)) + if len(m.Field) > 0 { + i -= len(m.Field) + copy(dAtA[i:], m.Field) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Field))) + i-- + dAtA[i] = 0xa } - return n + return len(dAtA) - i, nil } -func (m *GenesisState) Size() (n int) { - if m == nil { - return 0 +func (m *ConditionAny) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - var l int - _ = l - return n + return dAtA[:n], nil } -func sovGenesis(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 +func (m *ConditionAny) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func sozGenesis(x uint64) (n int) { - return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + +func (m *ConditionAny) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Negate { + i-- + if m.Negate { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } + if len(m.Fields) > 0 { + for iNdEx := len(m.Fields) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Fields[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *ConditionAll) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ConditionAll) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConditionAll) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Negate { + i-- + if m.Negate { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } + if len(m.Fields) > 0 { + for iNdEx := len(m.Fields) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Fields[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *ConditionAnd) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ConditionAnd) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConditionAnd) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Condition2 != nil { + { + size, err := m.Condition2.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Condition1 != nil { + { + size, err := m.Condition1.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ConditionOr) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ConditionOr) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConditionOr) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Condition2 != nil { + { + size, err := m.Condition2.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Condition1 != nil { + { + size, err := m.Condition1.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Event) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if m.EventType != 0 { + n += 1 + sovGenesis(uint64(m.EventType)) + } + l = len(m.Identifier) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if m.EventStatus != 0 { + n += 1 + sovGenesis(uint64(m.EventStatus)) + } + l = len(m.Module) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.Callback) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.Payload) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if m.ExecuteCondition != nil { + l = m.ExecuteCondition.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + if m.EmittedHeight != 0 { + n += 1 + sovGenesis(uint64(m.EmittedHeight)) + } + return n +} + +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *FieldValue) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Field) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.Value) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if m.Negate { + n += 2 + } + return n +} + +func (m *ConditionAny) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Fields) > 0 { + for _, e := range m.Fields { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if m.Negate { + n += 2 + } + return n +} + +func (m *ConditionAll) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Fields) > 0 { + for _, e := range m.Fields { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if m.Negate { + n += 2 + } + return n +} + +func (m *ConditionAnd) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Condition1 != nil { + l = m.Condition1.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + if m.Condition2 != nil { + l = m.Condition2.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + return n +} + +func (m *ConditionOr) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Condition1 != nil { + l = m.Condition1.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + if m.Condition2 != nil { + l = m.Condition2.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } func (m *Event) Unmarshal(dAtA []byte) error { l := len(dAtA) @@ -459,11 +1072,449 @@ func (m *Event) Unmarshal(dAtA []byte) error { break } } - case 3: + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Identifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Identifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EventStatus", wireType) + } + m.EventStatus = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EventStatus |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Module", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Module = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Callback", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Callback = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Payload", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Payload = append(m.Payload[:0], dAtA[iNdEx:postIndex]...) + if m.Payload == nil { + m.Payload = []byte{} + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExecuteCondition", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ExecuteCondition == nil { + m.ExecuteCondition = &types.Any{} + } + if err := m.ExecuteCondition.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EmittedHeight", wireType) + } + m.EmittedHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EmittedHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *FieldValue) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: FieldValue: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: FieldValue: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Field", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Field = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Negate", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Negate = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ConditionAny) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ConditionAny: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ConditionAny: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Identifier", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Fields", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenesis @@ -473,29 +1524,31 @@ func (m *Event) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenesis } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenesis } if postIndex > l { return io.ErrUnexpectedEOF } - m.Identifier = string(dAtA[iNdEx:postIndex]) + m.Fields = append(m.Fields, &FieldValue{}) + if err := m.Fields[len(m.Fields)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 4: + case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field EventStatus", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Negate", wireType) } - m.EventStatus = 0 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenesis @@ -505,16 +1558,67 @@ func (m *Event) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.EventStatus |= int32(b&0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - case 5: + m.Negate = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ConditionAll) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ConditionAll: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ConditionAll: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Module", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Fields", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenesis @@ -524,29 +1628,31 @@ func (m *Event) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenesis } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenesis } if postIndex > l { return io.ErrUnexpectedEOF } - m.Module = string(dAtA[iNdEx:postIndex]) + m.Fields = append(m.Fields, &FieldValue{}) + if err := m.Fields[len(m.Fields)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Callback", wireType) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Negate", wireType) } - var stringLen uint64 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenesis @@ -556,29 +1662,67 @@ func (m *Event) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenesis + m.Negate = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err } - postIndex := iNdEx + intStringLen - if postIndex < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenesis } - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - m.Callback = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 7: + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ConditionAnd) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ConditionAnd: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ConditionAnd: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Payload", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Condition1", wireType) } - var byteLen int + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenesis @@ -588,31 +1732,33 @@ func (m *Event) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenesis } - postIndex := iNdEx + byteLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenesis } if postIndex > l { return io.ErrUnexpectedEOF } - m.Payload = append(m.Payload[:0], dAtA[iNdEx:postIndex]...) - if m.Payload == nil { - m.Payload = []byte{} + if m.Condition1 == nil { + m.Condition1 = &types.Any{} + } + if err := m.Condition1.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } iNdEx = postIndex - case 8: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ExecuteCondition", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Condition2", wireType) } - var byteLen int + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenesis @@ -622,45 +1768,28 @@ func (m *Event) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenesis } - postIndex := iNdEx + byteLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenesis } if postIndex > l { return io.ErrUnexpectedEOF } - m.ExecuteCondition = append(m.ExecuteCondition[:0], dAtA[iNdEx:postIndex]...) - if m.ExecuteCondition == nil { - m.ExecuteCondition = []byte{} - } - iNdEx = postIndex - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field EmittedHeight", wireType) + if m.Condition2 == nil { + m.Condition2 = &types.Any{} } - m.EmittedHeight = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.EmittedHeight |= int64(b&0x7F) << shift - if b < 0x80 { - break - } + if err := m.Condition2.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) @@ -682,7 +1811,7 @@ func (m *Event) Unmarshal(dAtA []byte) error { } return nil } -func (m *GenesisState) Unmarshal(dAtA []byte) error { +func (m *ConditionOr) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -705,12 +1834,84 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + return fmt.Errorf("proto: ConditionOr: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ConditionOr: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Condition1", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Condition1 == nil { + m.Condition1 = &types.Any{} + } + if err := m.Condition1.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Condition2", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Condition2 == nil { + m.Condition2 = &types.Any{} + } + if err := m.Condition2.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) diff --git a/x/eventmanager/types/keys.go b/x/eventmanager/types/keys.go index 43a881df6..e518f3545 100644 --- a/x/eventmanager/types/keys.go +++ b/x/eventmanager/types/keys.go @@ -15,20 +15,24 @@ const ( ) const ( - EventStatusUnspecified = 0 - EventStatusActive = 1 - EventStatusPending = 2 -) + EventStatusUnspecified = int32(0) + EventStatusActive = int32(1) + EventStatusPending = int32(2) -const ( - EventTypeUnspecified = 0x00 - EventTypeICQQueryRewards = 0x01 - EventTypeICQQueryDelegations = 0x02 - EventTypeICQAccountBalances = 0x03 - EventTypeICQAccountBalance = 0x04 - EventTypeICAWithdrawRewards = 0x05 - EventTypeICADelegate = 0x06 - EventTypeICAUnbond = 0x07 + EventTypeUnspecified = int32(0x00) + EventTypeICQQueryRewards = int32(0x01) + EventTypeICQQueryDelegations = int32(0x02) + EventTypeICQAccountBalances = int32(0x03) + EventTypeICQAccountBalance = int32(0x04) + EventTypeICAWithdrawRewards = int32(0x05) + EventTypeICADelegate = int32(0x06) + EventTypeICAUnbond = int32(0x07) + + FieldEventType = "eventtype" + FieldModule = "module" + FieldEventStatus = "eventstatus" + FieldChainID = "chainid" + FieldIdentifier = "identifier" ) var ( diff --git a/x/interchainstaking/keeper/redemptions.go b/x/interchainstaking/keeper/redemptions.go index 7570bf96f..75415a1d0 100644 --- a/x/interchainstaking/keeper/redemptions.go +++ b/x/interchainstaking/keeper/redemptions.go @@ -13,6 +13,7 @@ import ( "github.com/quicksilver-zone/quicksilver/utils" epochstypes "github.com/quicksilver-zone/quicksilver/x/epochs/types" + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types" ) @@ -237,6 +238,16 @@ func (k *Keeper) HandleQueuedUnbondings(ctx sdk.Context, zone *types.Zone, epoch for _, valoper := range utils.Keys(coinsOutPerValidator) { if !coinsOutPerValidator[valoper].Amount.IsZero() { msgs = append(msgs, &stakingtypes.MsgUndelegate{DelegatorAddress: zone.DelegationAddress.Address, ValidatorAddress: valoper, Amount: coinsOutPerValidator[valoper]}) + k.EventManagerKeeper.AddEvent(ctx, + types.ModuleName, + zone.ChainId, + fmt.Sprintf("%s/%s", types.EpochWithdrawalMemo(epoch), valoper), + "unbondAck", + emtypes.EventTypeICAUnbond, + emtypes.EventStatusActive, + nil, + nil, + ) } } diff --git a/x/interchainstaking/types/expected_keepers.go b/x/interchainstaking/types/expected_keepers.go index 934e716c6..f81aa0b78 100644 --- a/x/interchainstaking/types/expected_keepers.go +++ b/x/interchainstaking/types/expected_keepers.go @@ -12,7 +12,7 @@ import ( claimsmanagertypes "github.com/quicksilver-zone/quicksilver/x/claimsmanager/types" epochstypes "github.com/quicksilver-zone/quicksilver/x/epochs/types" - emkeeper "github.com/quicksilver-zone/quicksilver/x/eventmanager/keeper" + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" ) // ChannelKeeper defines the expected IBC channel keeper. @@ -70,5 +70,5 @@ type AuthzKeeper interface { } type EventManagerKeeper interface { - AddEvent(ctx sdk.Context, module, chainID, identifier, callback string, payload []byte, status int32, condtion emkeeper.ConditionI) error + AddEvent(ctx sdk.Context, module, chainID, identifier, callback string, eventType, status int32, condtion emtypes.ConditionI, payload []byte) } From f02a2ce204158f3d76197e1d91348d229cfdc447 Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Sat, 6 Apr 2024 00:07:11 +0100 Subject: [PATCH 05/19] working em with tests --- app/modules.go | 10 +- .../quicksilver/eventmanager/v1/genesis.proto | 11 +- x/eventmanager/keeper/events.go | 27 +-- x/eventmanager/keeper/events_test.go | 90 +++++++++- x/eventmanager/keeper/keeper.go | 4 + x/eventmanager/module.go | 18 +- x/eventmanager/types/codec.go | 2 + x/eventmanager/types/conditions.go | 106 ++++++++++-- x/eventmanager/types/fields.go | 104 ++++++++---- x/eventmanager/types/genesis.pb.go | 154 +++++++++++++----- x/eventmanager/types/keys.go | 1 + x/interchainstaking/keeper/redemptions.go | 9 +- 12 files changed, 426 insertions(+), 110 deletions(-) diff --git a/app/modules.go b/app/modules.go index da72dbb27..ec3bb2b37 100644 --- a/app/modules.go +++ b/app/modules.go @@ -55,6 +55,8 @@ import ( claimsmanagertypes "github.com/quicksilver-zone/quicksilver/x/claimsmanager/types" "github.com/quicksilver-zone/quicksilver/x/epochs" epochstypes "github.com/quicksilver-zone/quicksilver/x/epochs/types" + "github.com/quicksilver-zone/quicksilver/x/eventmanager" + eventmanagertypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" "github.com/quicksilver-zone/quicksilver/x/interchainquery" interchainquerytypes "github.com/quicksilver-zone/quicksilver/x/interchainquery/types" "github.com/quicksilver-zone/quicksilver/x/interchainstaking" @@ -107,6 +109,7 @@ var ( participationrewards.AppModuleBasic{}, airdrop.AppModuleBasic{}, supply.AppModuleBasic{}, + eventmanager.AppModuleBasic{}, ) // module account permissions. @@ -169,6 +172,7 @@ func appModules( epochs.NewAppModule(appCodec, app.EpochsKeeper), interchainstaking.NewAppModule(appCodec, app.InterchainstakingKeeper), interchainquery.NewAppModule(appCodec, app.InterchainQueryKeeper), + eventmanager.NewAppModule(appCodec, app.EventManagerKeeper), participationrewards.NewAppModule(appCodec, app.ParticipationRewardsKeeper), airdrop.NewAppModule(appCodec, app.AirdropKeeper), supply.NewAppModule(appCodec, app.SupplyKeeper), @@ -207,6 +211,7 @@ func simulationModules( epochs.NewAppModule(appCodec, app.EpochsKeeper), interchainstaking.NewAppModule(appCodec, app.InterchainstakingKeeper), interchainquery.NewAppModule(appCodec, app.InterchainQueryKeeper), + eventmanager.NewAppModule(appCodec, app.EventManagerKeeper), participationrewards.NewAppModule(appCodec, app.ParticipationRewardsKeeper), airdrop.NewAppModule(appCodec, app.AirdropKeeper), // supply.NewAppModule(appCodec, app.SupplyKeeper), @@ -237,7 +242,8 @@ func orderBeginBlockers() []string { stakingtypes.ModuleName, ibchost.ModuleName, interchainstakingtypes.ModuleName, - interchainquerytypes.ModuleName, // check ordering here. + interchainquerytypes.ModuleName, + eventmanagertypes.ModuleName, // no-op modules ibctransfertypes.ModuleName, icatypes.ModuleName, @@ -297,6 +303,7 @@ func orderEndBlockers() []string { participationrewardstypes.ModuleName, airdroptypes.ModuleName, supplytypes.ModuleName, + eventmanagertypes.ModuleName, // currently no-op. } } @@ -339,6 +346,7 @@ func orderInitBlockers() []string { participationrewardstypes.ModuleName, airdroptypes.ModuleName, supplytypes.ModuleName, + eventmanagertypes.ModuleName, // NOTE: crisis module must go at the end to check for invariants on each module crisistypes.ModuleName, } diff --git a/proto/quicksilver/eventmanager/v1/genesis.proto b/proto/quicksilver/eventmanager/v1/genesis.proto index 30d6f45a3..5e9d22b75 100644 --- a/proto/quicksilver/eventmanager/v1/genesis.proto +++ b/proto/quicksilver/eventmanager/v1/genesis.proto @@ -22,10 +22,19 @@ message Event { // GenesisState defines the eventmanager module's genesis state. message GenesisState {} +enum FieldOperator { + UNSPECIFIED = 0; + EQUAL = 1; + CONTAINS = 2; + BEGINSWITH = 3; + ENDSWITH = 4; +} + message FieldValue { string field = 1; string value = 2; - bool negate = 3; + FieldOperator operator = 3; + bool negate = 4; } message ConditionAny { diff --git a/x/eventmanager/keeper/events.go b/x/eventmanager/keeper/events.go index 2395d9b20..bc32cbd1c 100644 --- a/x/eventmanager/keeper/events.go +++ b/x/eventmanager/keeper/events.go @@ -1,8 +1,6 @@ package keeper import ( - "fmt" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" @@ -87,13 +85,18 @@ func (k Keeper) MarkCompleted(ctx sdk.Context, module string, chainID string, id func (k Keeper) Trigger(ctx sdk.Context, module string, chainID string) { k.IterateModuleChainEvents(ctx, module, chainID, func(_ int64, e types.Event) (stop bool) { if e.EventStatus == types.EventStatusPending { - err := k.Call(ctx, e.Module, e.Callback, e.Payload) + res, err := e.CanExecute(ctx, &k) if err != nil { - fmt.Println("omfg", "errr", err.Error()) - k.Logger(ctx).Error("unable to execute callback", "module", e.Module, "id", e.Identifier, "callback", e.Callback, "error", err) + k.Logger(ctx).Error("unable to determine if event can execute callback", "module", e.Module, "id", e.Identifier, "callback", e.Callback, "error", err) + } + if res { + err := k.Call(ctx, e.Module, e.Callback, e.Payload) + if err != nil { + k.Logger(ctx).Error("unable to execute callback", "module", e.Module, "id", e.Identifier, "callback", e.Callback, "error", err) + } + e.EventStatus = types.EventStatusActive + k.SetEvent(ctx, e) } - e.EventStatus = types.EventStatusActive - k.SetEvent(ctx, e) } return false }) @@ -106,9 +109,13 @@ func (k Keeper) AddEvent(ctx sdk.Context, payload []byte, ) { - conditionAny, err := codectypes.NewAnyWithValue(condition) - if err != nil { - panic(err) + var err error + var conditionAny *codectypes.Any + if condition != nil { + conditionAny, err = codectypes.NewAnyWithValue(condition) + if err != nil { + panic(err) + } } event := types.Event{ diff --git a/x/eventmanager/keeper/events_test.go b/x/eventmanager/keeper/events_test.go index 69566301c..19f6ce233 100644 --- a/x/eventmanager/keeper/events_test.go +++ b/x/eventmanager/keeper/events_test.go @@ -43,7 +43,8 @@ func (c EventCallbacks) AddCallback(id string, fn interface{}) types.EventCallba func (c EventCallbacks) RegisterCallbacks() types.EventCallbacks { a := c. - AddCallback("testCallback", EventCallback(testCallback)) + AddCallback("testCallback", EventCallback(testCallback)). + AddCallback("testCallbackWithArgs", EventCallback(testCallbackWithArgs)) return a.(EventCallbacks) } @@ -57,6 +58,11 @@ func testCallback(k *keeper.Keeper, ctx sdk.Context, args []byte) error { return nil } +func testCallbackWithArgs(k *keeper.Keeper, ctx sdk.Context, args []byte) error { + GLOBAL_VAR = int(args[0]) + return nil +} + // tests func (suite *KeeperTestSuite) TestEventLifecycle() { @@ -99,27 +105,101 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition() { app.EventManagerKeeper.SetCallbackHandler(types.ModuleName, callbackHandler) - condition := &types.ConditionAll{Fields: []*types.FieldValue{{Field: types.FieldModule, Value: types.ModuleName, Negate: true}}, Negate: false} + condition, err := types.NewConditionAll(ctx, []*types.FieldValue{ + {Field: types.FieldModule, Value: types.ModuleName, Operator: types.FieldOperator_EQUAL, Negate: false}, + {Field: types.FieldEventStatus, Value: fmt.Sprintf("%d", types.EventStatusActive), Operator: types.FieldOperator_EQUAL, Negate: false}, + }, true) + + suite.NoError(err) + app.EventManagerKeeper.AddEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test1", "", types.EventTypeICAUnbond, types.EventStatusActive, nil, nil) app.EventManagerKeeper.AddEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test", "testCallback", types.EventTypeICADelegate, types.EventStatusPending, condition, nil) events := app.EventManagerKeeper.AllEvents(ctx) - suite.Equal(1, len(events)) + suite.Equal(2, len(events)) GLOBAL_VAR = 0 - app.EventManagerKeeper.Trigger(ctx, types.ModuleName, suite.chainB.ChainID) + // martCompleted doesn't require an explicit callback + app.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, suite.chainB.ChainID, "test1") event, found := app.EventManagerKeeper.GetEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test") + events = app.EventManagerKeeper.AllEvents(ctx) + + suite.Equal(1, len(events)) + fmt.Println(event) suite.True(found) suite.Equal(12345, GLOBAL_VAR) suite.Equal(event.EventStatus, types.EventStatusActive) - app.EventManagerKeeper.DeleteEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test") + app.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, suite.chainB.ChainID, "test") + + events = app.EventManagerKeeper.AllEvents(ctx) + + suite.Equal(0, len(events)) +} + +func (suite *KeeperTestSuite) TestEventLifecycleWithCondition2() { + app := suite.GetSimApp(suite.chainA) + ctx := suite.chainA.GetContext() + + callbackHandler := EventCallbacks{&app.EventManagerKeeper, make(map[string]EventCallback, 0)} + + app.EventManagerKeeper.SetCallbackHandler(types.ModuleName, callbackHandler) + + condition1, err := types.NewConditionAll(ctx, []*types.FieldValue{ + {Field: types.FieldModule, Value: types.ModuleName, Operator: types.FieldOperator_EQUAL, Negate: false}, + {Field: types.FieldEventType, Value: fmt.Sprintf("%d", types.EventTypeICAUnbond), Operator: types.FieldOperator_EQUAL, Negate: false}, + }, true) + suite.NoError(err) + + condition2, err := types.NewConditionAll(ctx, []*types.FieldValue{ + {Field: types.FieldModule, Value: types.ModuleName, Operator: types.FieldOperator_EQUAL, Negate: false}, + {Field: types.FieldEventType, Value: fmt.Sprintf("%d", types.EventTypeICADelegate), Operator: types.FieldOperator_EQUAL, Negate: false}, + }, true) + suite.NoError(err) + + conditionAnd, err := types.NewConditionAnd(ctx, condition1, condition2) + suite.NoError(err) + + app.EventManagerKeeper.AddEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test1", "", types.EventTypeICAUnbond, types.EventStatusActive, nil, nil) + app.EventManagerKeeper.AddEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test", "testCallbackWithArgs", types.EventTypeICADelegate, types.EventStatusPending, condition1, []byte{0x01}) + app.EventManagerKeeper.AddEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test2", "testCallbackWithArgs", types.EventTypeICAWithdrawRewards, types.EventStatusPending, conditionAnd, []byte{0x02}) + + events := app.EventManagerKeeper.AllEvents(ctx) + + suite.Equal(3, len(events)) + + GLOBAL_VAR = 0 + + // markCompleted doesn't require an explicit callback + app.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, suite.chainB.ChainID, "test1") + + event, found := app.EventManagerKeeper.GetEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test") + suite.True(found) + + events = app.EventManagerKeeper.AllEvents(ctx) + + suite.Equal(2, len(events)) + + fmt.Println(event) + suite.Equal(1, GLOBAL_VAR) + + suite.Equal(event.EventStatus, types.EventStatusActive) + + app.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, suite.chainB.ChainID, "test") + + suite.Equal(2, GLOBAL_VAR) + + events = app.EventManagerKeeper.AllEvents(ctx) + + suite.Equal(1, len(events)) + + app.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, suite.chainB.ChainID, "test2") events = app.EventManagerKeeper.AllEvents(ctx) diff --git a/x/eventmanager/keeper/keeper.go b/x/eventmanager/keeper/keeper.go index 3f93872a6..67c497874 100644 --- a/x/eventmanager/keeper/keeper.go +++ b/x/eventmanager/keeper/keeper.go @@ -29,6 +29,10 @@ func NewKeeper(cdc codec.Codec, storeKey storetypes.StoreKey) Keeper { } } +func (k *Keeper) GetCodec() codec.Codec { + return k.cdc +} + func (k *Keeper) SetCallbackHandler(module string, handler types.EventCallbacks) error { _, found := k.callbacks[module] if found { diff --git a/x/eventmanager/module.go b/x/eventmanager/module.go index 4371fe538..5e38100c1 100644 --- a/x/eventmanager/module.go +++ b/x/eventmanager/module.go @@ -1,7 +1,6 @@ -package interchainquery +package eventmanager import ( - "context" "encoding/json" "math/rand" @@ -16,8 +15,8 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - "github.com/quicksilver-zone/quicksilver/x/interchainquery/keeper" - "github.com/quicksilver-zone/quicksilver/x/interchainquery/types" + "github.com/quicksilver-zone/quicksilver/x/eventmanager/keeper" + "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" ) var ( @@ -52,6 +51,7 @@ func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { // RegisterInterfaces registers the module's interface types. func (AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) } // DefaultGenesis returns the capability module's default genesis state. @@ -66,10 +66,10 @@ func (AppModuleBasic) ValidateGenesis(_ codec.JSONCodec, _ client.TxEncodingConf // RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { - err := types.RegisterQuerySrvrHandlerClient(context.Background(), mux, types.NewQuerySrvrClient(clientCtx)) - if err != nil { - panic(err) - } + // err := types.RegisterQuerySrvrHandlerClient(context.Background(), mux, types.NewQuerySrvrClient(clientCtx)) + // if err != nil { + // panic(err) + // } } // GetTxCmd returns the capability module's root tx command. @@ -121,7 +121,7 @@ func (AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterQuerySrvrServer(cfg.QueryServer(), am.keeper) + //types.RegisterQuerySrvrServer(cfg.QueryServer(), am.keeper) } // RegisterInvariants registers the capability module's invariants. diff --git a/x/eventmanager/types/codec.go b/x/eventmanager/types/codec.go index 0836bbdad..159d3bff0 100644 --- a/x/eventmanager/types/codec.go +++ b/x/eventmanager/types/codec.go @@ -16,6 +16,8 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { } func RegisterInterfaces(registry types.InterfaceRegistry) { + registry.RegisterInterface("quicksilver.eventmanager.v1.ConditionI", (*ConditionI)(nil)) + registry.RegisterImplementations((*ConditionI)(nil), &ConditionAll{}, &ConditionAnd{} /*&ConditionAny{},*/, &ConditionOr{}) } func init() { diff --git a/x/eventmanager/types/conditions.go b/x/eventmanager/types/conditions.go index 61e463947..1a2ce3df9 100644 --- a/x/eventmanager/types/conditions.go +++ b/x/eventmanager/types/conditions.go @@ -1,17 +1,22 @@ package types import ( + "fmt" + + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/gogo/protobuf/proto" ) type EMKeeper interface { IteratePrefixedEvents(sdk.Context, []byte, func(int64, Event) (stop bool)) + GetCodec() codec.Codec } type ConditionI interface { proto.Message - Resolve(ctx sdk.Context, k EMKeeper) bool + Resolve(ctx sdk.Context, k EMKeeper) (bool, error) } // type ConditionExistsAny struct { @@ -29,32 +34,109 @@ type ConditionI interface { // return negate ^ out // } -func (c ConditionAll) Resolve(ctx sdk.Context, k EMKeeper) bool { +func (c ConditionAll) Resolve(ctx sdk.Context, k EMKeeper) (bool, error) { out := false + var err error k.IteratePrefixedEvents(ctx, nil, func(index int64, event Event) (stop bool) { - if event.ResolveAllFieldValues(c.Fields) { + res, err := event.ResolveAllFieldValues(c.Fields) + if err != nil { + return true + } + if res { out = true return true } return false }) - return c.Negate != out + return c.Negate != out, err } -func (c ConditionAnd) Resolve(ctx sdk.Context, k EMKeeper) bool { +func NewConditionAll(ctx sdk.Context, fields []*FieldValue, negate bool) (*ConditionAll, error) { + return &ConditionAll{fields, negate}, nil +} + +func (c ConditionAnd) Resolve(ctx sdk.Context, k EMKeeper) (bool, error) { var condition1 ConditionI var condition2 ConditionI - _ = ModuleCdc.UnpackAny(c.Condition1, &condition1) - _ = ModuleCdc.UnpackAny(c.Condition1, &condition1) + err := k.GetCodec().UnpackAny(c.Condition1, &condition1) + if err != nil { + return false, err + } + err = k.GetCodec().UnpackAny(c.Condition2, &condition2) + if err != nil { + return false, err + } + + res1, err := condition1.Resolve(ctx, k) + if err != nil { + return false, err + } + res2, err := condition2.Resolve(ctx, k) + if err != nil { + return false, err + } + return res1 && res2, nil +} - return condition1.Resolve(ctx, k) && condition2.Resolve(ctx, k) +func NewConditionAnd(ctx sdk.Context, condition1, condition2 ConditionI) (*ConditionAnd, error) { + anyc1, err := codectypes.NewAnyWithValue(condition1) + if err != nil { + return nil, err + } + anyc2, err := codectypes.NewAnyWithValue(condition2) + if err != nil { + return nil, err + } + return &ConditionAnd{anyc1, anyc2}, nil } -func (c ConditionOr) Resolve(ctx sdk.Context, k EMKeeper) bool { +func (c ConditionOr) Resolve(ctx sdk.Context, k EMKeeper) (bool, error) { var condition1 ConditionI var condition2 ConditionI - _ = ModuleCdc.UnpackAny(c.Condition1, &condition1) - _ = ModuleCdc.UnpackAny(c.Condition1, &condition1) + err := k.GetCodec().UnpackAny(c.Condition1, &condition1) + if err != nil { + return false, err + } + err = k.GetCodec().UnpackAny(c.Condition2, &condition2) + if err != nil { + return false, err + } + + res1, err := condition1.Resolve(ctx, k) + if err != nil { + return false, err + } + res2, err := condition2.Resolve(ctx, k) + if err != nil { + return false, err + } + return res1 || res2, nil +} + +func NewConditionOr(ctx sdk.Context, condition1, condition2 ConditionI) (*ConditionOr, error) { + anyc1, err := codectypes.NewAnyWithValue(condition1) + if err != nil { + return nil, err + } + anyc2, err := codectypes.NewAnyWithValue(condition2) + if err != nil { + return nil, err + } + return &ConditionOr{anyc1, anyc2}, nil +} + +// CanExecute determines whether a +func (e *Event) CanExecute(ctx sdk.Context, k EMKeeper) (bool, error) { + fmt.Print(e.ExecuteCondition) + if e.ExecuteCondition == nil { + return true, nil + } + var condition ConditionI + err := k.GetCodec().UnpackAny(e.ExecuteCondition, &condition) + if err != nil { + return false, err + } + fmt.Print(condition) - return condition1.Resolve(ctx, k) || condition2.Resolve(ctx, k) + return condition.Resolve(ctx, k) } diff --git a/x/eventmanager/types/fields.go b/x/eventmanager/types/fields.go index 7ad05f743..802637189 100644 --- a/x/eventmanager/types/fields.go +++ b/x/eventmanager/types/fields.go @@ -1,60 +1,106 @@ package types import ( + fmt "fmt" "strconv" + "strings" ) -func (e Event) ResolveAllFieldValues(fvs []*FieldValue) bool { +func (e Event) ResolveAllFieldValues(fvs []*FieldValue) (bool, error) { for _, fv := range fvs { - if !e.resolveFieldValue(fv) { - return false + res, err := e.resolveFieldValue(fv) + if err != nil { + return false, err + } + if !res { + return false, nil } } - return true + // return true if none of the conditions failed. + return true, nil } -func (e Event) ResolveAnyFieldValues(fvs []*FieldValue) bool { +func (e Event) ResolveAnyFieldValues(fvs []*FieldValue) (bool, error) { for _, fv := range fvs { - if e.resolveFieldValue(fv) { - return true + res, err := e.resolveFieldValue(fv) + if err != nil { + return false, err + } + if res { + return true, nil } } - return false + // return false if none of the conditons passed. + return false, nil } -func (e Event) resolveFieldValue(fv *FieldValue) bool { +func (e Event) resolveFieldValue(fv *FieldValue) (bool, error) { - if fv.Field == FieldEventType { + switch { + case fv.Field == FieldEventType: + if fv.Operator != FieldOperator_EQUAL { + return false, fmt.Errorf("bad operator %d for field %s", fv.Operator, fv.Field) + } v, err := strconv.ParseInt(fv.Value, 10, 32) if err != nil { - return fv.Negate + return fv.Negate, err } if v == int64(e.EventType) { - return !fv.Negate + return !fv.Negate, nil + } + return fv.Negate, nil + case fv.Field == FieldEventStatus: + if fv.Operator != FieldOperator_EQUAL { + return false, fmt.Errorf("bad operator %d for field %s", fv.Operator, fv.Field) } - return fv.Negate - } - - if fv.Field == FieldEventStatus { v, err := strconv.ParseInt(fv.Value, 10, 32) if err != nil { - return fv.Negate + return fv.Negate, err } if v == int64(e.EventType) { - return !fv.Negate + return !fv.Negate, nil } - return fv.Negate + return fv.Negate, nil + case fv.Field == FieldModule: + res, err := compare(fv.Operator, fv.Value, e.Module) + if err != nil { + return false, nil + } + return res != fv.Negate, nil + case fv.Field == FieldIdentifier: + res, err := compare(fv.Operator, fv.Value, e.Identifier) + if err != nil { + return false, nil + } + return res != fv.Negate, nil + case fv.Field == FieldChainID: + res, err := compare(fv.Operator, fv.Value, e.ChainId) + if err != nil { + return false, nil + } + return res != fv.Negate, nil + case fv.Field == FieldCallback: + res, err := compare(fv.Operator, fv.Value, e.ChainId) + if err != nil { + return false, nil + } + return res != fv.Negate, nil } - if fv.Field == FieldModule && fv.Value == e.Module { - return !fv.Negate - } - if fv.Field == FieldIdentifier && fv.Value == e.Identifier { - return !fv.Negate - } - if fv.Field == FieldChainID && fv.Value == e.ChainId { - return !fv.Negate - } + return fv.Negate, nil +} - return fv.Negate +func compare(operator FieldOperator, testValue, value string) (bool, error) { + switch operator { + case FieldOperator_EQUAL: + return testValue == value, nil + case FieldOperator_CONTAINS: + return strings.Contains(value, testValue), nil + case FieldOperator_BEGINSWITH: + return strings.HasPrefix(value, testValue), nil + case FieldOperator_ENDSWITH: + return strings.HasSuffix(value, testValue), nil + default: + return false, fmt.Errorf("unrecognised operator %d", operator) + } } diff --git a/x/eventmanager/types/genesis.pb.go b/x/eventmanager/types/genesis.pb.go index bda6a1d86..d41a240a1 100644 --- a/x/eventmanager/types/genesis.pb.go +++ b/x/eventmanager/types/genesis.pb.go @@ -25,6 +25,40 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +type FieldOperator int32 + +const ( + FieldOperator_UNSPECIFIED FieldOperator = 0 + FieldOperator_EQUAL FieldOperator = 1 + FieldOperator_CONTAINS FieldOperator = 2 + FieldOperator_BEGINSWITH FieldOperator = 3 + FieldOperator_ENDSWITH FieldOperator = 4 +) + +var FieldOperator_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "EQUAL", + 2: "CONTAINS", + 3: "BEGINSWITH", + 4: "ENDSWITH", +} + +var FieldOperator_value = map[string]int32{ + "UNSPECIFIED": 0, + "EQUAL": 1, + "CONTAINS": 2, + "BEGINSWITH": 3, + "ENDSWITH": 4, +} + +func (x FieldOperator) String() string { + return proto.EnumName(FieldOperator_name, int32(x)) +} + +func (FieldOperator) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_74127b30ab787dbd, []int{0} +} + type Event struct { ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` EventType int32 `protobuf:"varint,2,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` @@ -171,9 +205,10 @@ func (m *GenesisState) XXX_DiscardUnknown() { var xxx_messageInfo_GenesisState proto.InternalMessageInfo type FieldValue struct { - Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - Negate bool `protobuf:"varint,3,opt,name=negate,proto3" json:"negate,omitempty"` + Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + Operator FieldOperator `protobuf:"varint,3,opt,name=operator,proto3,enum=quicksilver.eventmanager.v1.FieldOperator" json:"operator,omitempty"` + Negate bool `protobuf:"varint,4,opt,name=negate,proto3" json:"negate,omitempty"` } func (m *FieldValue) Reset() { *m = FieldValue{} } @@ -223,6 +258,13 @@ func (m *FieldValue) GetValue() string { return "" } +func (m *FieldValue) GetOperator() FieldOperator { + if m != nil { + return m.Operator + } + return FieldOperator_UNSPECIFIED +} + func (m *FieldValue) GetNegate() bool { if m != nil { return m.Negate @@ -439,6 +481,7 @@ func (m *ConditionOr) GetCondition2() *types.Any { } func init() { + proto.RegisterEnum("quicksilver.eventmanager.v1.FieldOperator", FieldOperator_name, FieldOperator_value) proto.RegisterType((*Event)(nil), "quicksilver.eventmanager.v1.Event") proto.RegisterType((*GenesisState)(nil), "quicksilver.eventmanager.v1.GenesisState") proto.RegisterType((*FieldValue)(nil), "quicksilver.eventmanager.v1.FieldValue") @@ -453,42 +496,48 @@ func init() { } var fileDescriptor_74127b30ab787dbd = []byte{ - // 549 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x54, 0xbd, 0x8e, 0xd3, 0x40, - 0x10, 0xce, 0x26, 0xe4, 0x6f, 0x13, 0x4e, 0xb0, 0x8a, 0x90, 0x13, 0x84, 0x65, 0x22, 0x21, 0x8c, - 0xc4, 0xd9, 0x4a, 0x68, 0x91, 0xd0, 0x1d, 0xe2, 0xe7, 0x2a, 0x90, 0x41, 0x57, 0xd0, 0x44, 0x1b, - 0x7b, 0xb2, 0x59, 0xc5, 0xd9, 0x0d, 0xf6, 0x3a, 0x3a, 0xf3, 0x14, 0x3c, 0x0c, 0x0f, 0x81, 0xa8, - 0xae, 0x01, 0x51, 0xa2, 0xa4, 0xe3, 0x29, 0x90, 0xd7, 0x4e, 0x70, 0x0a, 0xa8, 0x8e, 0x86, 0xce, - 0xdf, 0x37, 0x33, 0xdf, 0xcc, 0x7c, 0x63, 0x2d, 0x7e, 0xf0, 0x3e, 0xe1, 0xfe, 0x22, 0xe6, 0xe1, - 0x1a, 0x22, 0x17, 0xd6, 0x20, 0xd4, 0x92, 0x0a, 0xca, 0x20, 0x72, 0xd7, 0x23, 0x97, 0x81, 0x80, - 0x98, 0xc7, 0xce, 0x2a, 0x92, 0x4a, 0x92, 0xdb, 0xa5, 0x54, 0xa7, 0x9c, 0xea, 0xac, 0x47, 0x83, - 0xbe, 0x2f, 0xe3, 0xa5, 0x8c, 0x27, 0x3a, 0xd5, 0xcd, 0x41, 0x5e, 0x37, 0xe8, 0x31, 0xc9, 0x64, - 0xce, 0x67, 0x5f, 0x05, 0xdb, 0x67, 0x52, 0xb2, 0x10, 0x5c, 0x8d, 0xa6, 0xc9, 0xcc, 0xa5, 0x22, - 0xcd, 0x43, 0xc3, 0x9f, 0x55, 0x5c, 0x7f, 0x96, 0xe9, 0x93, 0x3e, 0x6e, 0xf9, 0x73, 0xca, 0xc5, - 0x84, 0x07, 0x06, 0xb2, 0x90, 0xdd, 0xf6, 0x9a, 0x1a, 0x9f, 0x05, 0xe4, 0x0e, 0xc6, 0x7a, 0x86, - 0x89, 0x4a, 0x57, 0x60, 0x54, 0x2d, 0x64, 0xd7, 0xbd, 0xb6, 0x66, 0xde, 0xa6, 0x2b, 0x20, 0x26, - 0xc6, 0x3c, 0x00, 0xa1, 0xf8, 0x8c, 0x43, 0x64, 0xd4, 0x74, 0x6d, 0x89, 0x21, 0x77, 0x71, 0x37, - 0x2f, 0x8f, 0x15, 0x55, 0x49, 0x6c, 0x5c, 0xd3, 0x02, 0x1d, 0xcd, 0xbd, 0xd1, 0x14, 0xb9, 0x85, - 0x1b, 0x4b, 0x19, 0x24, 0x21, 0x18, 0x75, 0x5d, 0x5e, 0x20, 0x32, 0xc0, 0x2d, 0x9f, 0x86, 0xe1, - 0x94, 0xfa, 0x0b, 0xa3, 0xa1, 0x23, 0x7b, 0x4c, 0x0c, 0xdc, 0x5c, 0xd1, 0x34, 0x94, 0x34, 0x30, - 0x9a, 0x16, 0xb2, 0xbb, 0xde, 0x0e, 0x12, 0x89, 0x6f, 0xc2, 0x05, 0xf8, 0x89, 0x82, 0x89, 0x2f, - 0x45, 0xc0, 0x15, 0x97, 0xc2, 0x68, 0x59, 0xc8, 0xee, 0x8c, 0x7b, 0x4e, 0xee, 0x85, 0xb3, 0xf3, - 0xc2, 0x39, 0x11, 0xe9, 0xe9, 0xc3, 0x2f, 0x9f, 0x8e, 0xed, 0xb2, 0xe5, 0x5c, 0x28, 0x88, 0xf4, - 0xfa, 0xb1, 0xa2, 0x0b, 0x2e, 0x98, 0xf3, 0x74, 0x27, 0x74, 0xe6, 0xdd, 0x28, 0xc4, 0xf7, 0x14, - 0xb9, 0x87, 0x8f, 0x60, 0xc9, 0x95, 0x82, 0x60, 0x32, 0x07, 0xce, 0xe6, 0xca, 0x68, 0x5b, 0xc8, - 0xae, 0x79, 0xd7, 0x0b, 0xf6, 0xa5, 0x26, 0x87, 0x47, 0xb8, 0xfb, 0x22, 0x3f, 0x73, 0xb6, 0x36, - 0x0c, 0x5f, 0x63, 0xfc, 0x9c, 0x43, 0x18, 0x9c, 0xd3, 0x30, 0x01, 0xd2, 0xc3, 0xf5, 0x59, 0x86, - 0x0a, 0xf7, 0x73, 0x90, 0xb1, 0xeb, 0x2c, 0xac, 0x6d, 0x6f, 0x7b, 0x39, 0xc8, 0xfc, 0x12, 0xc0, - 0xa8, 0x02, 0x6d, 0x77, 0xcb, 0x2b, 0xd0, 0x90, 0xe1, 0xee, 0x7e, 0xaa, 0x13, 0x91, 0x92, 0x27, - 0xb8, 0xa1, 0x65, 0x62, 0x03, 0x59, 0x35, 0xbb, 0x33, 0xbe, 0xef, 0xfc, 0xe5, 0xc7, 0x72, 0x7e, - 0x0f, 0xe3, 0x15, 0x65, 0xa5, 0x46, 0xd5, 0x3f, 0x37, 0x0a, 0xc3, 0x7f, 0xd7, 0xe8, 0x1b, 0x3a, - 0x58, 0x29, 0x20, 0x53, 0x8c, 0xf7, 0x47, 0x1d, 0x69, 0xaf, 0xae, 0xe6, 0xaa, 0x25, 0xd5, 0x83, - 0x1e, 0x63, 0x3d, 0xd0, 0x55, 0xf7, 0x18, 0x0f, 0xbf, 0x22, 0xdc, 0xd9, 0x87, 0x5e, 0x45, 0xff, - 0xcb, 0x5e, 0xa7, 0xe7, 0x9f, 0x37, 0x26, 0xba, 0xdc, 0x98, 0xe8, 0xc7, 0xc6, 0x44, 0x1f, 0xb7, - 0x66, 0xe5, 0x72, 0x6b, 0x56, 0xbe, 0x6f, 0xcd, 0xca, 0xbb, 0xc7, 0x8c, 0xab, 0x79, 0x32, 0x75, - 0x7c, 0xb9, 0x74, 0x4b, 0xd2, 0xc7, 0x1f, 0xa4, 0x80, 0x32, 0xe1, 0x5e, 0x1c, 0xbe, 0x8e, 0xd9, - 0xab, 0x13, 0x4f, 0x1b, 0x7a, 0xbe, 0x47, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x4b, 0x91, 0x6f, - 0x19, 0x46, 0x05, 0x00, 0x00, + // 645 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x54, 0xcd, 0x6e, 0xd3, 0x4c, + 0x14, 0xcd, 0x24, 0x4d, 0x9a, 0xdc, 0xa4, 0xf9, 0xf2, 0x8d, 0x2a, 0xe4, 0x16, 0x61, 0x85, 0x48, + 0x08, 0x53, 0x51, 0x5b, 0x0d, 0x5b, 0x24, 0x94, 0xb6, 0x69, 0x6b, 0x09, 0xa5, 0xe0, 0xf4, 0x47, + 0x62, 0x13, 0x39, 0xf6, 0xd4, 0x19, 0xd5, 0x99, 0x09, 0xf6, 0x38, 0x6a, 0x78, 0x0a, 0x96, 0x3c, + 0x08, 0x0f, 0x81, 0x58, 0x75, 0x03, 0x62, 0x89, 0xda, 0x1d, 0x4f, 0x81, 0x3c, 0x76, 0x22, 0x67, + 0x01, 0x6c, 0xca, 0x86, 0x9d, 0xcf, 0xb9, 0x73, 0xef, 0x99, 0x73, 0x7c, 0x35, 0xf0, 0xe4, 0x6d, + 0x44, 0x9d, 0xcb, 0x90, 0xfa, 0x53, 0x12, 0x18, 0x64, 0x4a, 0x98, 0x18, 0xdb, 0xcc, 0xf6, 0x48, + 0x60, 0x4c, 0x77, 0x0c, 0x8f, 0x30, 0x12, 0xd2, 0x50, 0x9f, 0x04, 0x5c, 0x70, 0x7c, 0x3f, 0x73, + 0x54, 0xcf, 0x1e, 0xd5, 0xa7, 0x3b, 0x9b, 0x1b, 0x0e, 0x0f, 0xc7, 0x3c, 0x1c, 0xc8, 0xa3, 0x46, + 0x02, 0x92, 0xbe, 0xcd, 0x75, 0x8f, 0x7b, 0x3c, 0xe1, 0xe3, 0xaf, 0x94, 0xdd, 0xf0, 0x38, 0xf7, + 0x7c, 0x62, 0x48, 0x34, 0x8c, 0x2e, 0x0c, 0x9b, 0xcd, 0x92, 0x52, 0xeb, 0x47, 0x1e, 0x8a, 0xdd, + 0x78, 0x3e, 0xde, 0x80, 0xb2, 0x33, 0xb2, 0x29, 0x1b, 0x50, 0x57, 0x41, 0x4d, 0xa4, 0x55, 0xac, + 0x55, 0x89, 0x4d, 0x17, 0x3f, 0x00, 0x90, 0x77, 0x18, 0x88, 0xd9, 0x84, 0x28, 0xf9, 0x26, 0xd2, + 0x8a, 0x56, 0x45, 0x32, 0x27, 0xb3, 0x09, 0xc1, 0x2a, 0x00, 0x75, 0x09, 0x13, 0xf4, 0x82, 0x92, + 0x40, 0x29, 0xc8, 0xde, 0x0c, 0x83, 0x1f, 0x42, 0x2d, 0x69, 0x0f, 0x85, 0x2d, 0xa2, 0x50, 0x59, + 0x91, 0x03, 0xaa, 0x92, 0xeb, 0x4b, 0x0a, 0xdf, 0x83, 0xd2, 0x98, 0xbb, 0x91, 0x4f, 0x94, 0xa2, + 0x6c, 0x4f, 0x11, 0xde, 0x84, 0xb2, 0x63, 0xfb, 0xfe, 0xd0, 0x76, 0x2e, 0x95, 0x92, 0xac, 0x2c, + 0x30, 0x56, 0x60, 0x75, 0x62, 0xcf, 0x7c, 0x6e, 0xbb, 0xca, 0x6a, 0x13, 0x69, 0x35, 0x6b, 0x0e, + 0x31, 0x87, 0xff, 0xc9, 0x15, 0x71, 0x22, 0x41, 0x06, 0x0e, 0x67, 0x2e, 0x15, 0x94, 0x33, 0xa5, + 0xdc, 0x44, 0x5a, 0xb5, 0xbd, 0xae, 0x27, 0x59, 0xe8, 0xf3, 0x2c, 0xf4, 0x0e, 0x9b, 0xed, 0x3e, + 0xfd, 0xfc, 0x71, 0x5b, 0xcb, 0x46, 0x4e, 0x99, 0x20, 0x81, 0xb4, 0x1f, 0x0a, 0xfb, 0x92, 0x32, + 0x4f, 0xdf, 0x9b, 0x0f, 0x32, 0xad, 0x46, 0x3a, 0x7c, 0x41, 0xe1, 0x47, 0x50, 0x27, 0x63, 0x2a, + 0x04, 0x71, 0x07, 0x23, 0x42, 0xbd, 0x91, 0x50, 0x2a, 0x4d, 0xa4, 0x15, 0xac, 0xb5, 0x94, 0x3d, + 0x92, 0x64, 0xab, 0x0e, 0xb5, 0xc3, 0xe4, 0x37, 0xc7, 0xb6, 0x49, 0xeb, 0x03, 0x02, 0x38, 0xa0, + 0xc4, 0x77, 0xcf, 0x6c, 0x3f, 0x22, 0x78, 0x1d, 0x8a, 0x17, 0x31, 0x4a, 0xe3, 0x4f, 0x40, 0xcc, + 0x4e, 0xe3, 0xb2, 0xcc, 0xbd, 0x62, 0x25, 0x00, 0x1f, 0x40, 0x99, 0x4f, 0x48, 0x60, 0x0b, 0x9e, + 0x24, 0x5e, 0x6f, 0x6f, 0xe9, 0xbf, 0xd9, 0x19, 0x5d, 0xca, 0x1c, 0xa7, 0x1d, 0xd6, 0xa2, 0x37, + 0x0e, 0x9e, 0x11, 0xcf, 0x16, 0x44, 0xfe, 0x95, 0xb2, 0x95, 0xa2, 0x96, 0x07, 0xb5, 0x85, 0xbd, + 0x0e, 0x9b, 0xe1, 0x17, 0x50, 0x92, 0xd7, 0x09, 0x15, 0xd4, 0x2c, 0x68, 0xd5, 0xf6, 0xe3, 0x3f, + 0xab, 0x49, 0x53, 0x56, 0xda, 0x96, 0x11, 0xca, 0xff, 0x5a, 0xc8, 0xf7, 0xff, 0x9e, 0xd0, 0x57, + 0xb4, 0x64, 0xc9, 0xc5, 0x43, 0x80, 0xc5, 0x76, 0xec, 0xc8, 0xcc, 0xef, 0x66, 0x3d, 0x32, 0x53, + 0x97, 0x34, 0xda, 0xf2, 0x42, 0x77, 0xad, 0xd1, 0x6e, 0x7d, 0x41, 0x50, 0x5d, 0x94, 0x8e, 0x83, + 0x7f, 0xc5, 0xd7, 0xd6, 0x39, 0xac, 0x2d, 0x6d, 0x2d, 0xfe, 0x0f, 0xaa, 0xa7, 0xbd, 0xfe, 0xab, + 0xee, 0x9e, 0x79, 0x60, 0x76, 0xf7, 0x1b, 0x39, 0x5c, 0x81, 0x62, 0xf7, 0xf5, 0x69, 0xe7, 0x65, + 0x03, 0xe1, 0x1a, 0x94, 0xf7, 0x8e, 0x7b, 0x27, 0x1d, 0xb3, 0xd7, 0x6f, 0xe4, 0x71, 0x1d, 0x60, + 0xb7, 0x7b, 0x68, 0xf6, 0xfa, 0xe7, 0xe6, 0xc9, 0x51, 0xa3, 0x10, 0x57, 0xbb, 0xbd, 0xfd, 0x04, + 0xad, 0xec, 0x9e, 0x7d, 0xba, 0x51, 0xd1, 0xf5, 0x8d, 0x8a, 0xbe, 0xdf, 0xa8, 0xe8, 0xfd, 0xad, + 0x9a, 0xbb, 0xbe, 0x55, 0x73, 0xdf, 0x6e, 0xd5, 0xdc, 0x9b, 0xe7, 0x1e, 0x15, 0xa3, 0x68, 0xa8, + 0x3b, 0x7c, 0x6c, 0x64, 0xee, 0xbc, 0xfd, 0x8e, 0x33, 0x92, 0x25, 0x8c, 0xab, 0xe5, 0xf7, 0x3b, + 0x7e, 0x17, 0xc3, 0x61, 0x49, 0x1a, 0x7f, 0xf6, 0x33, 0x00, 0x00, 0xff, 0xff, 0x47, 0xaf, 0xe5, + 0x26, 0xe8, 0x05, 0x00, 0x00, } func (m *Event) Marshal() (dAtA []byte, err error) { @@ -627,6 +676,11 @@ func (m *FieldValue) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0 } i-- + dAtA[i] = 0x20 + } + if m.Operator != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.Operator)) + i-- dAtA[i] = 0x18 } if len(m.Value) > 0 { @@ -910,6 +964,9 @@ func (m *FieldValue) Size() (n int) { if l > 0 { n += 1 + l + sovGenesis(uint64(l)) } + if m.Operator != 0 { + n += 1 + sovGenesis(uint64(m.Operator)) + } if m.Negate { n += 2 } @@ -1441,6 +1498,25 @@ func (m *FieldValue) Unmarshal(dAtA []byte) error { m.Value = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + } + m.Operator = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Operator |= FieldOperator(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Negate", wireType) } diff --git a/x/eventmanager/types/keys.go b/x/eventmanager/types/keys.go index e518f3545..d68f8c75f 100644 --- a/x/eventmanager/types/keys.go +++ b/x/eventmanager/types/keys.go @@ -33,6 +33,7 @@ const ( FieldEventStatus = "eventstatus" FieldChainID = "chainid" FieldIdentifier = "identifier" + FieldCallback = "callback" ) var ( diff --git a/x/interchainstaking/keeper/redemptions.go b/x/interchainstaking/keeper/redemptions.go index 75415a1d0..f1766dfbc 100644 --- a/x/interchainstaking/keeper/redemptions.go +++ b/x/interchainstaking/keeper/redemptions.go @@ -238,6 +238,7 @@ func (k *Keeper) HandleQueuedUnbondings(ctx sdk.Context, zone *types.Zone, epoch for _, valoper := range utils.Keys(coinsOutPerValidator) { if !coinsOutPerValidator[valoper].Amount.IsZero() { msgs = append(msgs, &stakingtypes.MsgUndelegate{DelegatorAddress: zone.DelegationAddress.Address, ValidatorAddress: valoper, Amount: coinsOutPerValidator[valoper]}) + k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, zone.ChainId, @@ -265,10 +266,10 @@ func (k *Keeper) HandleQueuedUnbondings(ctx sdk.Context, zone *types.Zone, epoch } } - if err = zone.IncrementWithdrawalWaitgroup(k.Logger(ctx), uint32(len(msgs)), "trigger unbonding messages"); err != nil { //nolint:gosec - return err - } - k.SetZone(ctx, zone) + // if err = zone.IncrementWithdrawalWaitgroup(k.Logger(ctx), uint32(len(msgs)), "trigger unbonding messages"); err != nil { + // return err + // } + //k.SetZone(ctx, zone) return nil } From 0f2350bd25a1fcd316f69298f779df6dc5c761b8 Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Wed, 10 Apr 2024 23:29:29 +0100 Subject: [PATCH 06/19] eventmanager integration --- x/eventmanager/keeper/events.go | 4 + x/eventmanager/keeper/events_test.go | 2 - x/eventmanager/keeper/grpc_query.go | 24 +-- x/eventmanager/keeper/grpc_query_test.go | 39 ----- x/eventmanager/module.go | 11 +- x/eventmanager/types/conditions.go | 5 - x/eventmanager/types/fields.go | 29 ++++ x/interchainstaking/keeper/callbacks.go | 50 +++---- x/interchainstaking/keeper/delegation.go | 26 ++-- x/interchainstaking/keeper/events.go | 49 ++++++- x/interchainstaking/keeper/hooks.go | 137 +++++++++++++++--- .../keeper/ibc_packet_handlers.go | 31 ++-- x/interchainstaking/types/expected_keepers.go | 1 + 13 files changed, 265 insertions(+), 143 deletions(-) delete mode 100644 x/eventmanager/keeper/grpc_query_test.go diff --git a/x/eventmanager/keeper/events.go b/x/eventmanager/keeper/events.go index bc32cbd1c..14785fd75 100644 --- a/x/eventmanager/keeper/events.go +++ b/x/eventmanager/keeper/events.go @@ -1,6 +1,8 @@ package keeper import ( + "fmt" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" @@ -78,6 +80,7 @@ func (k Keeper) AllEvents(ctx sdk.Context) []types.Event { } func (k Keeper) MarkCompleted(ctx sdk.Context, module string, chainID string, identifier string) { + k.Logger(ctx).Info(fmt.Sprintf("marking event %s/%s/%s as complete!", module, chainID, identifier)) k.DeleteEvent(ctx, module, chainID, identifier) k.Trigger(ctx, module, chainID) } @@ -90,6 +93,7 @@ func (k Keeper) Trigger(ctx sdk.Context, module string, chainID string) { k.Logger(ctx).Error("unable to determine if event can execute callback", "module", e.Module, "id", e.Identifier, "callback", e.Callback, "error", err) } if res { + k.Logger(ctx).Info(fmt.Sprintf("triggered event callback %s for event %s (%s)", e.Callback, e.Identifier, e.ChainId)) err := k.Call(ctx, e.Module, e.Callback, e.Payload) if err != nil { k.Logger(ctx).Error("unable to execute callback", "module", e.Module, "id", e.Identifier, "callback", e.Callback, "error", err) diff --git a/x/eventmanager/keeper/events_test.go b/x/eventmanager/keeper/events_test.go index 19f6ce233..4d53e2f52 100644 --- a/x/eventmanager/keeper/events_test.go +++ b/x/eventmanager/keeper/events_test.go @@ -130,7 +130,6 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition() { suite.Equal(1, len(events)) - fmt.Println(event) suite.True(found) suite.Equal(12345, GLOBAL_VAR) @@ -186,7 +185,6 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition2() { suite.Equal(2, len(events)) - fmt.Println(event) suite.Equal(1, GLOBAL_VAR) suite.Equal(event.EventStatus, types.EventStatusActive) diff --git a/x/eventmanager/keeper/grpc_query.go b/x/eventmanager/keeper/grpc_query.go index efe70b178..725d5a35e 100644 --- a/x/eventmanager/keeper/grpc_query.go +++ b/x/eventmanager/keeper/grpc_query.go @@ -10,30 +10,30 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" - "github.com/quicksilver-zone/quicksilver/x/interchainquery/types" + "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" ) -var _ types.QuerySrvrServer = Keeper{} +var _ types.QueryServer = Keeper{} -// Queries returns information about registered zones. -func (k Keeper) Queries(c context.Context, req *types.QueryRequestsRequest) (*types.QueryRequestsResponse, error) { +// Events returns information about registered zones. +func (k Keeper) Events(c context.Context, req *types.QueryEventsRequest) (*types.QueryEventsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } ctx := sdk.UnwrapSDKContext(c) - var queries []types.Query - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixQuery) + var events []types.Event + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixEvent) pageRes, err := query.FilteredPaginate(store, req.Pagination, func(_, value []byte, accumulate bool) (bool, error) { - var query types.Query - if err := k.cdc.Unmarshal(value, &query); err != nil { + var event types.Event + if err := k.cdc.Unmarshal(value, &event); err != nil { return false, err } - if query.ChainId == req.ChainId && (query.LastEmission.IsNil() || query.LastEmission.IsZero() || query.LastEmission.GTE(query.LastHeight)) { - queries = append(queries, query) + if event.ChainId == req.ChainId { + events = append(events, event) return true, nil } @@ -43,8 +43,8 @@ func (k Keeper) Queries(c context.Context, req *types.QueryRequestsRequest) (*ty return nil, status.Error(codes.Internal, err.Error()) } - return &types.QueryRequestsResponse{ - Queries: queries, + return &types.QueryEventsResponse{ + Events: events, Pagination: pageRes, }, nil } diff --git a/x/eventmanager/keeper/grpc_query_test.go b/x/eventmanager/keeper/grpc_query_test.go deleted file mode 100644 index 2261da547..000000000 --- a/x/eventmanager/keeper/grpc_query_test.go +++ /dev/null @@ -1,39 +0,0 @@ -package keeper_test - -import ( - sdk "github.com/cosmos/cosmos-sdk/types" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - - icqtypes "github.com/quicksilver-zone/quicksilver/x/interchainquery/types" -) - -func (suite *KeeperTestSuite) TestQueries() { - bondedQuery := stakingtypes.QueryValidatorsRequest{Status: stakingtypes.BondStatusBonded} - bz, err := bondedQuery.Marshal() - suite.NoError(err) - - query := suite.GetSimApp(suite.chainA).InterchainQueryKeeper.NewQuery( - "", - suite.path.EndpointB.ConnectionID, - suite.chainB.ChainID, - "cosmos.staking.v1beta1.Query/Validators", - bz, - sdk.NewInt(200), - "", - 0, - ) - - // set the query - suite.GetSimApp(suite.chainA).InterchainQueryKeeper.SetQuery(suite.chainA.GetContext(), *query) - - icqsrvSrv := icqtypes.QuerySrvrServer(suite.GetSimApp(suite.chainA).InterchainQueryKeeper) - - res, err := icqsrvSrv.Queries(sdk.WrapSDKContext(suite.chainA.GetContext()), &icqtypes.QueryRequestsRequest{ChainId: suite.chainB.ChainID}) - suite.NoError(err) - suite.Len(res.Queries, 1) - suite.Equal(suite.path.EndpointB.ConnectionID, res.Queries[0].ConnectionId) - suite.Equal(suite.chainB.ChainID, res.Queries[0].ChainId) - suite.Equal("cosmos.staking.v1beta1.Query/Validators", res.Queries[0].QueryType) - suite.Equal(sdk.NewInt(200), res.Queries[0].Period) - suite.Equal("", res.Queries[0].CallbackId) -} diff --git a/x/eventmanager/module.go b/x/eventmanager/module.go index 5e38100c1..368b123ef 100644 --- a/x/eventmanager/module.go +++ b/x/eventmanager/module.go @@ -1,6 +1,7 @@ package eventmanager import ( + "context" "encoding/json" "math/rand" @@ -66,10 +67,10 @@ func (AppModuleBasic) ValidateGenesis(_ codec.JSONCodec, _ client.TxEncodingConf // RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { - // err := types.RegisterQuerySrvrHandlerClient(context.Background(), mux, types.NewQuerySrvrClient(clientCtx)) - // if err != nil { - // panic(err) - // } + err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) + if err != nil { + panic(err) + } } // GetTxCmd returns the capability module's root tx command. @@ -121,7 +122,7 @@ func (AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { // RegisterServices registers a GRPC query service to respond to the // module-specific GRPC queries. func (am AppModule) RegisterServices(cfg module.Configurator) { - //types.RegisterQuerySrvrServer(cfg.QueryServer(), am.keeper) + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) } // RegisterInvariants registers the capability module's invariants. diff --git a/x/eventmanager/types/conditions.go b/x/eventmanager/types/conditions.go index 1a2ce3df9..8d326e12b 100644 --- a/x/eventmanager/types/conditions.go +++ b/x/eventmanager/types/conditions.go @@ -1,8 +1,6 @@ package types import ( - "fmt" - "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -127,7 +125,6 @@ func NewConditionOr(ctx sdk.Context, condition1, condition2 ConditionI) (*Condit // CanExecute determines whether a func (e *Event) CanExecute(ctx sdk.Context, k EMKeeper) (bool, error) { - fmt.Print(e.ExecuteCondition) if e.ExecuteCondition == nil { return true, nil } @@ -136,7 +133,5 @@ func (e *Event) CanExecute(ctx sdk.Context, k EMKeeper) (bool, error) { if err != nil { return false, err } - fmt.Print(condition) - return condition.Resolve(ctx, k) } diff --git a/x/eventmanager/types/fields.go b/x/eventmanager/types/fields.go index 802637189..7a7ca3469 100644 --- a/x/eventmanager/types/fields.go +++ b/x/eventmanager/types/fields.go @@ -104,3 +104,32 @@ func compare(operator FieldOperator, testValue, value string) (bool, error) { return false, fmt.Errorf("unrecognised operator %d", operator) } } + +func NewFieldValues(fields ...*FieldValue) []*FieldValue { + return fields +} + +func FieldEqual(field, value string) *FieldValue { + return NewFieldValue(field, value, FieldOperator_EQUAL, false) +} + +func FieldNotEqual(field, value string) *FieldValue { + return NewFieldValue(field, value, FieldOperator_EQUAL, true) +} + +func FieldBegins(field, value string) *FieldValue { + return NewFieldValue(field, value, FieldOperator_BEGINSWITH, false) +} + +func FieldEnds(field, value string) *FieldValue { + return NewFieldValue(field, value, FieldOperator_ENDSWITH, false) +} + +func NewFieldValue(field, value string, operator FieldOperator, negate bool) *FieldValue { + return &FieldValue{ + field, + value, + operator, + negate, + } +} diff --git a/x/interchainstaking/keeper/callbacks.go b/x/interchainstaking/keeper/callbacks.go index 52b72a475..32ba23b84 100644 --- a/x/interchainstaking/keeper/callbacks.go +++ b/x/interchainstaking/keeper/callbacks.go @@ -28,6 +28,7 @@ import ( "github.com/quicksilver-zone/quicksilver/utils" "github.com/quicksilver-zone/quicksilver/utils/addressutils" "github.com/quicksilver-zone/quicksilver/utils/proofs" + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" icqtypes "github.com/quicksilver-zone/quicksilver/x/interchainquery/types" "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types" ) @@ -67,7 +68,7 @@ func (c Callbacks) AddCallback(id string, fn interface{}) icqtypes.QueryCallback } func (c Callbacks) RegisterCallbacks() icqtypes.QueryCallbacks { - a := c. + return c. AddCallback("valset", Callback(ValsetCallback)). AddCallback("validator", Callback(ValidatorCallback)). AddCallback("rewards", Callback(RewardsCallback)). @@ -84,8 +85,6 @@ func (c Callbacks) RegisterCallbacks() icqtypes.QueryCallbacks { AddCallback("delegationaccountbalance", Callback(DelegationAccountBalanceCallback)). AddCallback("delegationaccountbalances", Callback(DelegationAccountBalancesCallback)). AddCallback("signinginfo", Callback(SigningInfoCallback)) - - return a.(Callbacks) } // ----------------------------------- @@ -123,19 +122,13 @@ func RewardsCallback(k *Keeper, ctx sdk.Context, args []byte, query icqtypes.Que return err } - // decrement waitgroup as we have received back the query - // (initially incremented in AfterEpochEnd) - if err = zone.DecrementWithdrawalWaitgroup(k.Logger(ctx), 1, "rewards callback"); err != nil { - // given that there _could_ be a backlog of message, we don't want to bail here, else they will remain undeliverable. - k.Logger(ctx).Error(err.Error()) - } - - k.Logger(ctx).Debug("QueryDelegationRewards callback", "wg", zone.GetWithdrawalWaitgroup(), "delegatorAddress", rewardsQuery.DelegatorAddress, "zone", query.ChainId) + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, zone.ChainId, "query_rewards_epoch") return k.WithdrawDelegationRewardsForResponse(ctx, &zone, rewardsQuery.DelegatorAddress, args) } func DelegationsEpochCallback(k *Keeper, ctx sdk.Context, args []byte, query icqtypes.Query) error { + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, query.ChainId, "query_delegations_epoch") return delegationsCallback(k, ctx, args, query, true) } @@ -603,6 +596,7 @@ func DelegationAccountBalanceCallback(k *Keeper, ctx sdk.Context, args []byte, q if !found { return fmt.Errorf("no registered zone for chain id: %s", query.GetChainId()) } + // strip the BalancesPrefix from the request key, as AddressFromBalancesStore expects this to be removed // by the prefixIterator. query.Request is a value that Quicksilver always sets, and is not user generated, // but lets us be safe here :) @@ -616,6 +610,9 @@ func DelegationAccountBalanceCallback(k *Keeper, ctx sdk.Context, args []byte, q return err } + identifier := fmt.Sprintf("query_delegationaccountbalance_epoch/%s", denom) + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, query.ChainId, identifier) + coin, err := bankkeeper.UnmarshalBalanceCompat(k.cdc, args, denom) if err != nil { return err @@ -642,10 +639,6 @@ func DelegationAccountBalanceCallback(k *Keeper, ctx sdk.Context, args []byte, q } k.Logger(ctx).Info("Received balance response for denom", "denom", coin.Denom) - if err = zone.DecrementWithdrawalWaitgroup(k.Logger(ctx), 1, "delegationaccountbalance callback"); err != nil { - // given that there _could_ be a backlog of message, we don't want to bail here, else they will remain undeliverable. - k.Logger(ctx).Error(err.Error()) - } // set the zone amount. balance := zone.DelegationAddress.Balance @@ -665,12 +658,6 @@ func DelegationAccountBalanceCallback(k *Keeper, ctx sdk.Context, args []byte, q // if token is not valid for staking, then send to withdrawal account. if valid, _ := zone.ValidateCoinsForZone(sdk.NewCoins(coin), k.GetValidatorAddressesAsMap(ctx, zone.ChainId)); !valid { k.Logger(ctx).Info("token is not a valid staking token, so sending to withdrawal account for disbursal", "chain", zone.ChainId, "assets", coin) - if zone.GetWithdrawalWaitgroup() == 0 { - k.Logger(ctx).Info("triggering redemption rate calc in lieu of delegation flush") - if err := k.TriggerRedemptionRate(ctx, &zone); err != nil { - return err - } - } return k.SendToWithdrawal(ctx, &zone, zone.DelegationAddress, sdk.NewCoins(coin)) } @@ -685,10 +672,7 @@ func DelegationAccountBalancesCallback(k *Keeper, ctx sdk.Context, args []byte, result := banktypes.QueryAllBalancesResponse{} k.cdc.MustUnmarshal(args, &result) - if err := zone.DecrementWithdrawalWaitgroup(k.Logger(ctx), 1, "delegationaccountbalances callback"); err != nil { - // given that there _could_ be a backlog of message, we don't want to bail here, else they will remain undeliverable. - k.Logger(ctx).Error(err.Error()) - } + k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, query.ChainId, "query_delegationaccountbalances_epoch") addressBytes, err := addressutils.AccAddressFromBech32(zone.DelegationAddress.Address, zone.AccountPrefix) if err != nil { @@ -712,10 +696,18 @@ func DelegationAccountBalancesCallback(k *Keeper, ctx sdk.Context, args []byte, 0, ) - if err = zone.IncrementWithdrawalWaitgroup(k.Logger(ctx), 1, fmt.Sprintf("delegation account balance for %s", coin.Denom)); err != nil { - return err - } - k.Logger(ctx).Info("Emitting balance request for denom", "denom", coin.Denom, "waitgroup", zone.GetWithdrawalWaitgroup()) + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + query.ChainId, + fmt.Sprintf("query_delegationaccountbalance_epoch/%s", coin.Denom), + "", + emtypes.EventTypeICQAccountBalance, + emtypes.EventStatusActive, + nil, + nil, + ) + } k.SetZone(ctx, &zone) diff --git a/x/interchainstaking/keeper/delegation.go b/x/interchainstaking/keeper/delegation.go index 85728e6c8..8ada329fe 100644 --- a/x/interchainstaking/keeper/delegation.go +++ b/x/interchainstaking/keeper/delegation.go @@ -14,6 +14,7 @@ import ( stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" "github.com/quicksilver-zone/quicksilver/utils" + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types" lsmstakingtypes "github.com/quicksilver-zone/quicksilver/x/lsmtypes" ) @@ -263,26 +264,23 @@ func (k *Keeper) WithdrawDelegationRewardsForResponse(ctx sdk.Context, zone *typ k.Logger(ctx).Info("Withdraw rewards", "delegator", delegator, "validator", del.ValidatorAddress, "amount", del.Reward) msgs = append(msgs, &distrtypes.MsgWithdrawDelegatorReward{DelegatorAddress: delegator, ValidatorAddress: del.ValidatorAddress}) + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + zone.ChainId, + fmt.Sprintf("%s/%s", "withdraw_rewards_epoch", del.ValidatorAddress), + "", + emtypes.EventTypeICAWithdrawRewards, + emtypes.EventStatusActive, + nil, + nil, + ) } } if len(msgs) == 0 { - // always setZone here because calling method update waitgroup. - k.SetZone(ctx, zone) return nil } - // increment withdrawal waitgroup for every withdrawal msg sent - // this allows us to track individual msg responses and ensure all - // responses have been received and handled... - // HandleWithdrawRewards contains the opposing decrement. - if len(msgs) > math.MaxUint32 { - return fmt.Errorf("number of messages exceeds uint32 range: %d", len(msgs)) - } - if err = zone.IncrementWithdrawalWaitgroup(k.Logger(ctx), uint32(len(msgs)), "WithdrawDelegationRewardsForResponse"); err != nil { //nolint:gosec - return err - } - k.SetZone(ctx, zone) - k.Logger(ctx).Info("Received WithdrawDelegationRewardsForResponse acknowledgement", "wg", zone.GetWithdrawalWaitgroup(), "address", delegator) return k.SubmitTx(ctx, msgs, zone.DelegationAddress, "", zone.MessagesPerTx) } diff --git a/x/interchainstaking/keeper/events.go b/x/interchainstaking/keeper/events.go index 8b120d1e9..6655a95d3 100644 --- a/x/interchainstaking/keeper/events.go +++ b/x/interchainstaking/keeper/events.go @@ -1,11 +1,13 @@ package keeper import ( + "encoding/json" "fmt" sdk "github.com/cosmos/cosmos-sdk/types" emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" + "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types" ) // ___________________________________________________________________________________________________ @@ -43,17 +45,52 @@ func (c EventCallbacks) AddCallback(id string, fn interface{}) emtypes.EventCall } func (c EventCallbacks) RegisterCallbacks() emtypes.EventCallbacks { - a := c. - AddCallback("valset", EventCallback(TestCallback)) - - return a.(EventCallbacks) + return c. + AddCallback(ICQEmitDelegatorDelegations, EventCallback(EmitDelegatorDelegations)). + AddCallback(TriggerCalculateRedemptionRate, EventCallback(CalculateRedemptionRate)) } +const ( + ICQEmitDelegatorDelegations = "ICQEmitDelegatorDelegations" + TriggerCalculateRedemptionRate = "CalculateRedemptionRate" +) + // ----------------------------------- // Callback Handlers // ----------------------------------- -func TestCallback(k *Keeper, ctx sdk.Context, args []byte) error { - k.Logger(ctx).Error("TEST CALLBACK") +type DelegatorDelegationsParams struct { + ChainID string + ConnectionID string + Request []byte +} + +func EmitDelegatorDelegations(k *Keeper, ctx sdk.Context, args []byte) error { + + var params DelegatorDelegationsParams + err := json.Unmarshal(args, ¶ms) + if err != nil { + return err + } + + k.ICQKeeper.MakeRequest( + ctx, + params.ConnectionID, + params.ChainID, + "cosmos.staking.v1beta1.Query/DelegatorDelegations", + params.Request, + sdk.NewInt(-1), + types.ModuleName, + "delegations_epoch", + 0, + ) return nil } + +func CalculateRedemptionRate(k *Keeper, ctx sdk.Context, args []byte) error { + zone, found := k.GetZone(ctx, string(args)) + if !found { + return fmt.Errorf("unable to find zone %s", args) + } + return k.TriggerRedemptionRate(ctx, &zone) +} diff --git a/x/interchainstaking/keeper/hooks.go b/x/interchainstaking/keeper/hooks.go index cbf2a48a0..f4fbbe4c3 100644 --- a/x/interchainstaking/keeper/hooks.go +++ b/x/interchainstaking/keeper/hooks.go @@ -1,6 +1,8 @@ package keeper import ( + "encoding/json" + "fmt" "time" sdk "github.com/cosmos/cosmos-sdk/types" @@ -10,6 +12,7 @@ import ( stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" epochstypes "github.com/quicksilver-zone/quicksilver/x/epochs/types" + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types" ) @@ -149,19 +152,61 @@ func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, epochNum delegationQuery := stakingtypes.QueryDelegatorDelegationsRequest{DelegatorAddr: zone.DelegationAddress.Address, Pagination: &query.PageRequest{Limit: uint64(len(vals))}} bz := k.cdc.MustMarshal(&delegationQuery) - k.ICQKeeper.MakeRequest( + delegationParams := DelegatorDelegationsParams{ + ChainID: zone.ChainId, + ConnectionID: zone.ConnectionId, + Request: bz, + } + + delegationPayload, err := json.Marshal(&delegationParams) + if err != nil { + panic(err) + } + delegationCondition1, err := emtypes.NewConditionAll(ctx, + emtypes.NewFieldValues( + emtypes.FieldEqual(emtypes.FieldChainID, zone.ChainId), + emtypes.FieldEqual(emtypes.FieldModule, types.ModuleName), + emtypes.FieldEqual(emtypes.FieldEventType, fmt.Sprintf("%d", emtypes.EventTypeICAUnbond)), + emtypes.FieldBegins(emtypes.FieldIdentifier, types.EpochWithdrawalMemo(epochNumber)), + ), + true, + ) + if err != nil { + panic(err) + } + delegationCondition2, err := emtypes.NewConditionAll(ctx, + emtypes.NewFieldValues( + emtypes.FieldEqual(emtypes.FieldChainID, zone.ChainId), + emtypes.FieldEqual(emtypes.FieldModule, types.ModuleName), + emtypes.FieldEqual(emtypes.FieldEventType, fmt.Sprintf("%d", emtypes.EventTypeICADelegate)), + emtypes.FieldBegins(emtypes.FieldIdentifier, fmt.Sprintf("batch/%d", epochNumber)), + ), + true, + ) + if err != nil { + panic(err) + } + + delegationCondition, err := emtypes.NewConditionAnd( ctx, - zone.ConnectionId, - zone.ChainId, - "cosmos.staking.v1beta1.Query/DelegatorDelegations", - bz, - sdk.NewInt(-1), - types.ModuleName, - "delegations_epoch", - 0, + delegationCondition1, + delegationCondition2, ) + if err != nil { + panic(err) + } - _ = zone.IncrementWithdrawalWaitgroup(k.Logger(ctx), 1, "delegations trigger") + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + zone.ChainId, + "query_delegations_epoch", + ICQEmitDelegatorDelegations, + emtypes.EventTypeICQQueryDelegations, + emtypes.EventStatusPending, + delegationCondition, + delegationPayload, + ) balancesQuery := banktypes.QueryAllBalancesRequest{Address: zone.DelegationAddress.Address} bz = k.cdc.MustMarshal(&balancesQuery) @@ -176,8 +221,18 @@ func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, epochNum "delegationaccountbalances", 0, ) - // increment waitgroup; decremented in delegationaccountbalance callback - _ = zone.IncrementWithdrawalWaitgroup(k.Logger(ctx), 1, "delegationaccountbalances trigger") + + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + zone.ChainId, + "query_delegationaccountbalances_epoch", + "", + emtypes.EventTypeICQAccountBalances, + emtypes.EventStatusActive, + nil, + nil, + ) rewardsQuery := distrtypes.QueryDelegationTotalRewardsRequest{DelegatorAddress: zone.DelegationAddress.Address} bz = k.cdc.MustMarshal(&rewardsQuery) @@ -194,12 +249,60 @@ func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, epochNum 0, ) - // increment the WithdrawalWaitgroup - // this allows us to track the response for every protocol delegator - // WithdrawalWaitgroup is decremented in RewardsCallback - _ = zone.IncrementWithdrawalWaitgroup(k.Logger(ctx), 1, "rewards trigger") + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + zone.ChainId, + "query_rewards_epoch", + "", + emtypes.EventTypeICQQueryRewards, + emtypes.EventStatusActive, + nil, + nil, + ) + + rrCondition1, err := emtypes.NewConditionAll(ctx, + emtypes.NewFieldValues( + emtypes.FieldEqual(emtypes.FieldChainID, zone.ChainId), + emtypes.FieldEqual(emtypes.FieldModule, types.ModuleName), + emtypes.FieldEqual(emtypes.FieldEventType, fmt.Sprintf("%d", emtypes.EventTypeICAWithdrawRewards)), + ), + true, + ) + if err != nil { + panic(err) + } + rrCondition2, err := emtypes.NewConditionAll(ctx, + emtypes.NewFieldValues( + emtypes.FieldEqual(emtypes.FieldChainID, zone.ChainId), + emtypes.FieldEqual(emtypes.FieldModule, types.ModuleName), + emtypes.FieldEqual(emtypes.FieldEventType, fmt.Sprintf("%d", emtypes.EventTypeICQQueryDelegations)), + ), + true, + ) + if err != nil { + panic(err) + } + rrCondition, err := emtypes.NewConditionAnd(ctx, rrCondition1, rrCondition2) + if err != nil { + panic(err) + } + rrConditionAnd, err := emtypes.NewConditionAnd(ctx, rrCondition, delegationCondition) + if err != nil { + panic(err) + } - k.SetZone(ctx, zone) + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + zone.ChainId, + "trigger_rr", + TriggerCalculateRedemptionRate, + emtypes.EventTypeICQQueryRewards, + emtypes.EventStatusPending, + rrConditionAnd, + []byte(zone.ChainId), + ) return false }) diff --git a/x/interchainstaking/keeper/ibc_packet_handlers.go b/x/interchainstaking/keeper/ibc_packet_handlers.go index 57929d6b9..5a4cb4043 100644 --- a/x/interchainstaking/keeper/ibc_packet_handlers.go +++ b/x/interchainstaking/keeper/ibc_packet_handlers.go @@ -30,6 +30,7 @@ import ( "github.com/quicksilver-zone/quicksilver/utils" "github.com/quicksilver-zone/quicksilver/utils/addressutils" cmtypes "github.com/quicksilver-zone/quicksilver/x/claimsmanager/types" + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" querytypes "github.com/quicksilver-zone/quicksilver/x/interchainquery/types" "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types" lsmstakingtypes "github.com/quicksilver-zone/quicksilver/x/lsmtypes" @@ -1420,21 +1421,9 @@ func (k *Keeper) HandleWithdrawRewards(ctx sdk.Context, msg sdk.Msg, connectionI // operates outside the delegator set, its purpose is to track validator // performance only. if withdrawalMsg.DelegatorAddress != zone.PerformanceAddress.Address { - if err := zone.DecrementWithdrawalWaitgroup(k.Logger(ctx), 1, "handle withdraw rewards"); err != nil { - k.Logger(ctx).Error(err.Error()) - return nil - // return nil here so we don't reject the incoming tx, but log the error and don't trigger RR update for repeated zero. - } - k.SetZone(ctx, zone) - } - k.Logger(ctx).Info("Received MsgWithdrawDelegatorReward acknowledgement", "wg", zone.GetWithdrawalWaitgroup(), "delegator", withdrawalMsg.DelegatorAddress) - switch zone.GetWithdrawalWaitgroup() == 0 { - case true: - k.Logger(ctx).Info("triggering redemption rate calc after rewards withdrawal") - return k.TriggerRedemptionRate(ctx, zone) - default: - return nil + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, zone.ChainId, fmt.Sprintf("%s/%s", "withdraw_rewards_epoch", withdrawalMsg.ValidatorAddress)) } + return nil } func (k *Keeper) TriggerRedemptionRate(ctx sdk.Context, zone *types.Zone) error { @@ -1457,10 +1446,24 @@ func (k *Keeper) TriggerRedemptionRate(ctx sdk.Context, zone *types.Zone) error "distributerewards", 0, ) + + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + zone.ChainId, + "query_withdrawal_balance", + "", + emtypes.EventTypeICQAccountBalances, + emtypes.EventStatusActive, + nil, + nil, + ) + return nil } func DistributeRewardsFromWithdrawAccount(k *Keeper, ctx sdk.Context, args []byte, query querytypes.Query) error { + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, query.ChainId, "query_withdrawal_balance") zone, found := k.GetZone(ctx, query.ChainId) if !found { return fmt.Errorf("unable to find zone for %s", query.ChainId) diff --git a/x/interchainstaking/types/expected_keepers.go b/x/interchainstaking/types/expected_keepers.go index f81aa0b78..545f45cbc 100644 --- a/x/interchainstaking/types/expected_keepers.go +++ b/x/interchainstaking/types/expected_keepers.go @@ -71,4 +71,5 @@ type AuthzKeeper interface { type EventManagerKeeper interface { AddEvent(ctx sdk.Context, module, chainID, identifier, callback string, eventType, status int32, condtion emtypes.ConditionI, payload []byte) + MarkCompleted(ctx sdk.Context, module string, chainID string, identifier string) } From 36d7589c9d2eef38d6b4580856600ae6422fbac7 Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Mon, 15 Apr 2024 14:32:04 +0100 Subject: [PATCH 07/19] wip --- x/eventmanager/types/keys.go | 11 +- x/interchainstaking/keeper/callbacks.go | 2 +- x/interchainstaking/keeper/callbacks_test.go | 10 - x/interchainstaking/keeper/delegation.go | 59 +++--- x/interchainstaking/keeper/delegation_test.go | 2 +- x/interchainstaking/keeper/hooks.go | 6 +- .../keeper/ibc_packet_handlers.go | 172 ++++++------------ .../keeper/ibc_packet_handlers_test.go | 27 --- x/interchainstaking/keeper/redemptions.go | 13 +- x/interchainstaking/types/zones.go | 27 --- x/interchainstaking/types/zones_test.go | 14 -- 11 files changed, 105 insertions(+), 238 deletions(-) diff --git a/x/eventmanager/types/keys.go b/x/eventmanager/types/keys.go index d68f8c75f..9c516332c 100644 --- a/x/eventmanager/types/keys.go +++ b/x/eventmanager/types/keys.go @@ -22,11 +22,12 @@ const ( EventTypeUnspecified = int32(0x00) EventTypeICQQueryRewards = int32(0x01) EventTypeICQQueryDelegations = int32(0x02) - EventTypeICQAccountBalances = int32(0x03) - EventTypeICQAccountBalance = int32(0x04) - EventTypeICAWithdrawRewards = int32(0x05) - EventTypeICADelegate = int32(0x06) - EventTypeICAUnbond = int32(0x07) + EventTypeICQQueryDelegation = int32(0x03) + EventTypeICQAccountBalances = int32(0x04) + EventTypeICQAccountBalance = int32(0x05) + EventTypeICAWithdrawRewards = int32(0x06) + EventTypeICADelegate = int32(0x07) + EventTypeICAUnbond = int32(0x08) FieldEventType = "eventtype" FieldModule = "module" diff --git a/x/interchainstaking/keeper/callbacks.go b/x/interchainstaking/keeper/callbacks.go index 32ba23b84..daf379582 100644 --- a/x/interchainstaking/keeper/callbacks.go +++ b/x/interchainstaking/keeper/callbacks.go @@ -672,7 +672,7 @@ func DelegationAccountBalancesCallback(k *Keeper, ctx sdk.Context, args []byte, result := banktypes.QueryAllBalancesResponse{} k.cdc.MustUnmarshal(args, &result) - k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, query.ChainId, "query_delegationaccountbalances_epoch") + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, query.ChainId, "query_delegationaccountbalances_epoch") addressBytes, err := addressutils.AccAddressFromBech32(zone.DelegationAddress.Address, zone.AccountPrefix) if err != nil { diff --git a/x/interchainstaking/keeper/callbacks_test.go b/x/interchainstaking/keeper/callbacks_test.go index 64bdcd56b..b1f340122 100644 --- a/x/interchainstaking/keeper/callbacks_test.go +++ b/x/interchainstaking/keeper/callbacks_test.go @@ -753,7 +753,6 @@ func (suite *KeeperTestSuite) TestHandleRewardsCallbackNonDelegator() { ctx := suite.chainA.GetContext() zone, _ := quicksilver.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) - suite.NoError(zone.IncrementWithdrawalWaitgroup(quicksilver.Logger(), 1, "test rewards callback handler")) quicksilver.InterchainstakingKeeper.SetZone(ctx, &zone) user := addressutils.GenerateAccAddressForTest() @@ -789,7 +788,6 @@ func (suite *KeeperTestSuite) TestHandleRewardsCallbackEmptyResponse() { ctx := suite.chainA.GetContext() zone, _ := quicksilver.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) - suite.NoError(zone.IncrementWithdrawalWaitgroup(quicksilver.Logger(), 1, "test rewards callback handler")) quicksilver.InterchainstakingKeeper.SetZone(ctx, &zone) @@ -819,9 +817,6 @@ func (suite *KeeperTestSuite) TestHandleValideRewardsCallback() { ctx := suite.chainA.GetContext() zone, _ := quicksilver.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) - suite.NoError(zone.IncrementWithdrawalWaitgroup(quicksilver.Logger(), 1, "test rewards callback handler")) - - quicksilver.InterchainstakingKeeper.SetZone(ctx, &zone) queryReq := distrtypes.QueryDelegationTotalRewardsRequest{ DelegatorAddress: zone.DelegationAddress.Address, @@ -2576,7 +2571,6 @@ func (suite *KeeperTestSuite) TestDelegationAccountBalancesCallback() { ctx := suite.chainA.GetContext() zone, _ := app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) - zone.SetWithdrawalWaitgroup(app.Logger(), 1, "init") zone.DelegationAddress.Balance = t.PreviousBalance app.InterchainstakingKeeper.SetZone(ctx, &zone) @@ -2630,7 +2624,6 @@ func (suite *KeeperTestSuite) TestDelegationAccountBalanceCallbackDenomMismatch( ctx := suite.chainA.GetContext() zone, _ := app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) - zone.SetWithdrawalWaitgroup(app.Logger(), 2, "init") zone.DelegationAddress.Balance = sdk.NewCoins(sdk.NewCoin("uatom", sdkmath.NewInt(500_000_000))) app.InterchainstakingKeeper.SetZone(ctx, &zone) @@ -2704,7 +2697,6 @@ func (suite *KeeperTestSuite) TestDelegationAccountBalanceCallback() { ctx := suite.chainA.GetContext() zone, _ := app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) - zone.SetWithdrawalWaitgroup(app.Logger(), 2, "init") zone.DelegationAddress.Balance = sdk.NewCoins(sdk.NewCoin("uatom", sdkmath.NewInt(500_000_000))) app.InterchainstakingKeeper.SetZone(ctx, &zone) @@ -2739,7 +2731,6 @@ func (suite *KeeperTestSuite) TestDelegationAccountBalanceCallbackLSM() { valOper := app.InterchainstakingKeeper.GetValidatorAddresses(ctx, suite.chainB.ChainID)[0] denom := valOper + "/1" - zone.SetWithdrawalWaitgroup(app.Logger(), 2, "init") zone.DelegationAddress.Balance = sdk.NewCoins(sdk.NewCoin("uatom", sdkmath.NewInt(500))) app.InterchainstakingKeeper.SetZone(ctx, &zone) @@ -2778,7 +2769,6 @@ func (suite *KeeperTestSuite) TestDelegationAccountBalanceCallbackLSMBadZone() { valOper := addressutils.GenerateAddressForTestWithPrefix("quickvaloper") denom := valOper + "/1" - zone.SetWithdrawalWaitgroup(app.Logger(), 2, "init") zone.DelegationAddress.Balance = sdk.NewCoins(sdk.NewCoin("uatom", sdkmath.NewInt(500))) app.InterchainstakingKeeper.SetZone(ctx, &zone) diff --git a/x/interchainstaking/keeper/delegation.go b/x/interchainstaking/keeper/delegation.go index 8ada329fe..32f4ed561 100644 --- a/x/interchainstaking/keeper/delegation.go +++ b/x/interchainstaking/keeper/delegation.go @@ -1,9 +1,10 @@ package keeper import ( + "crypto/sha256" "errors" "fmt" - "math" + "strings" sdkmath "cosmossdk.io/math" @@ -193,24 +194,49 @@ func (k *Keeper) IterateDelegatorDelegations(ctx sdk.Context, chainID string, de } } -func (*Keeper) PrepareDelegationMessagesForCoins(zone *types.Zone, allocations map[string]sdkmath.Int, isFlush bool) []sdk.Msg { +func (k *Keeper) PrepareDelegationMessagesForCoins(ctx sdk.Context, zone *types.Zone, allocations map[string]sdkmath.Int, isFlush bool) []sdk.Msg { var msgs []sdk.Msg for _, valoper := range utils.Keys(allocations) { if allocations[valoper].IsPositive() { if allocations[valoper].GTE(zone.DustThreshold) || isFlush { - msgs = append(msgs, &stakingtypes.MsgDelegate{DelegatorAddress: zone.DelegationAddress.Address, ValidatorAddress: valoper, Amount: sdk.NewCoin(zone.BaseDenom, allocations[valoper])}) + msg := &stakingtypes.MsgDelegate{DelegatorAddress: zone.DelegationAddress.Address, ValidatorAddress: valoper, Amount: sdk.NewCoin(zone.BaseDenom, allocations[valoper])} + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + zone.ChainId, + fmt.Sprintf("delegation/%s/%x", valoper, sha256.Sum256(msg.GetSignBytes())), + "", + emtypes.EventTypeICADelegate, + emtypes.EventStatusActive, + nil, + nil, + ) + msgs = append(msgs, msg) } } } return msgs } -func (*Keeper) PrepareDelegationMessagesForShares(zone *types.Zone, coins sdk.Coins) []sdk.Msg { +func (k *Keeper) PrepareDelegationMessagesForShares(ctx sdk.Context, zone *types.Zone, coins sdk.Coins) []sdk.Msg { var msgs []sdk.Msg for _, coin := range coins.Sort() { if coin.IsPositive() { // no min amount here. - msgs = append(msgs, &lsmstakingtypes.MsgRedeemTokensForShares{DelegatorAddress: zone.DelegationAddress.Address, Amount: coin}) + valoper := strings.Split(coin.Denom, "/")[0] + msg := &lsmstakingtypes.MsgRedeemTokensForShares{DelegatorAddress: zone.DelegationAddress.Address, Amount: coin} + msgs = append(msgs, msg) + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + zone.ChainId, + fmt.Sprintf("delegation/%s/%x", valoper, sha256.Sum256(msg.GetSignBytes())), + "", + emtypes.EventTypeICADelegate, + emtypes.EventStatusActive, + nil, + nil, + ) } } return msgs @@ -331,13 +357,6 @@ func (k *Keeper) FlushOutstandingDelegations(ctx sdk.Context, zone *types.Zone, if hasNeg || coinsToFlush.IsZero() { k.Logger(ctx).Info("delegate account balance negative, or nothing to flush, setting outdated receipts") k.SetReceiptsCompleted(ctx, zone.ChainId, exclusionTime, ctx.BlockTime(), delAddrBalance.Denom) - if zone.GetWithdrawalWaitgroup() == 0 { - // we won't be sending any messages when we exit here; so if WG==0, then trigger RR update - k.Logger(ctx).Info("triggering redemption rate calc in lieu of delegation flush (non-positive coins)") - if err := k.TriggerRedemptionRate(ctx, zone); err != nil { - return err - } - } return nil } @@ -349,24 +368,10 @@ func (k *Keeper) FlushOutstandingDelegations(ctx sdk.Context, zone *types.Zone, ToAddress: "", Amount: coinsToFlush, } - numMsgs, err := k.handleSendToDelegate(ctx, zone, &sendMsg, fmt.Sprintf("batch/%d", exclusionTime.Unix())) + err := k.handleSendToDelegate(ctx, zone, &sendMsg, fmt.Sprintf("batch/%d", exclusionTime.Unix())) if err != nil { return err } - if numMsgs > math.MaxUint32 { - return fmt.Errorf("number of messages exceeds uint32 range: %d", numMsgs) - } - if err = zone.IncrementWithdrawalWaitgroup(k.Logger(ctx), uint32(numMsgs), "sending flush messages"); err != nil { //nolint:gosec - return err - } - - // if we didn't send any messages (thus no acks will happen), and WG==0, then trigger RR update - if numMsgs == 0 && zone.GetWithdrawalWaitgroup() == 0 { - k.Logger(ctx).Info("triggering redemption rate calc in lieu of delegation flush (no messages to send)") - if err := k.TriggerRedemptionRate(ctx, zone); err != nil { - return err - } - } k.SetZone(ctx, zone) return nil diff --git a/x/interchainstaking/keeper/delegation_test.go b/x/interchainstaking/keeper/delegation_test.go index 3a878905b..d49efd351 100644 --- a/x/interchainstaking/keeper/delegation_test.go +++ b/x/interchainstaking/keeper/delegation_test.go @@ -623,7 +623,7 @@ func (suite *KeeperTestSuite) TestFlushOutstandingDelegations() { if test.mockAck { allocations, err := quicksilver.InterchainstakingKeeper.DeterminePlanForDelegation(ctx, &zone, test.expectedDelegation) suite.NoError(err) - msgs = append(msgs, quicksilver.InterchainstakingKeeper.PrepareDelegationMessagesForCoins(&zone, allocations, true)...) + msgs = append(msgs, quicksilver.InterchainstakingKeeper.PrepareDelegationMessagesForCoins(ctx, &zone, allocations, true)...) } err := quicksilver.InterchainstakingKeeper.FlushOutstandingDelegations(ctx, &zone, test.delAddrBalance) diff --git a/x/interchainstaking/keeper/hooks.go b/x/interchainstaking/keeper/hooks.go index f4fbbe4c3..ceb1d6474 100644 --- a/x/interchainstaking/keeper/hooks.go +++ b/x/interchainstaking/keeper/hooks.go @@ -107,10 +107,6 @@ func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, epochNum return false }) - if zone.GetWithdrawalWaitgroup() > 0 { - zone.SetWithdrawalWaitgroup(k.Logger(ctx), 0, "epoch waitgroup was unexpected > 0") - } - if err := k.HandleQueuedUnbondings(ctx, zone, epochNumber); err != nil { // we can and need not panic here; logging the error is sufficient. // an error here is not expected, but also not terminal. @@ -179,7 +175,7 @@ func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, epochNum emtypes.FieldEqual(emtypes.FieldChainID, zone.ChainId), emtypes.FieldEqual(emtypes.FieldModule, types.ModuleName), emtypes.FieldEqual(emtypes.FieldEventType, fmt.Sprintf("%d", emtypes.EventTypeICADelegate)), - emtypes.FieldBegins(emtypes.FieldIdentifier, fmt.Sprintf("batch/%d", epochNumber)), + emtypes.FieldBegins(emtypes.FieldIdentifier, "delegation"), // should this be all delegations, or just from this epoch? ), true, ) diff --git a/x/interchainstaking/keeper/ibc_packet_handlers.go b/x/interchainstaking/keeper/ibc_packet_handlers.go index 5a4cb4043..752a4dc23 100644 --- a/x/interchainstaking/keeper/ibc_packet_handlers.go +++ b/x/interchainstaking/keeper/ibc_packet_handlers.go @@ -1,6 +1,7 @@ package keeper import ( + "crypto/sha256" "errors" "fmt" stdmath "math" @@ -394,8 +395,7 @@ func (k *Keeper) HandleCompleteSend(ctx sdk.Context, msg sdk.Msg, memo string, c case zone.IsDelegateAddress(sMsg.ToAddress) && zone.IsDepositAddress(sMsg.FromAddress): k.Logger(ctx).Info("delegate account received tokens from deposit account; delegating deposit", "amount", sMsg.Amount, "memo", memo) - _, err := k.handleSendToDelegate(ctx, zone, sMsg, memo) - return err + return k.handleSendToDelegate(ctx, zone, sMsg, memo) case zone.IsDelegateAddress(sMsg.FromAddress): k.Logger(ctx).Info("delegate account send tokens; handling withdrawal", "amount", sMsg.Amount, "memo", memo) @@ -413,27 +413,26 @@ func (k *Keeper) HandleCompleteSend(ctx sdk.Context, msg sdk.Msg, memo string, c } func (k *Keeper) handleRewardsDelegation(ctx sdk.Context, zone types.Zone, msg *banktypes.MsgSend) error { - _, err := k.handleSendToDelegate(ctx, &zone, msg, "rewards") - return err + return k.handleSendToDelegate(ctx, &zone, msg, "rewards") } -func (k *Keeper) handleSendToDelegate(ctx sdk.Context, zone *types.Zone, msg *banktypes.MsgSend, memo string) (int, error) { +func (k *Keeper) handleSendToDelegate(ctx sdk.Context, zone *types.Zone, msg *banktypes.MsgSend, memo string) error { var msgs []sdk.Msg for _, coin := range msg.Amount { if coin.Denom == zone.BaseDenom { allocations, err := k.DeterminePlanForDelegation(ctx, zone, msg.Amount) if err != nil { - return 0, err + return err } - msgs = append(msgs, k.PrepareDelegationMessagesForCoins(zone, allocations, isBatchOrRewards(memo))...) + msgs = append(msgs, k.PrepareDelegationMessagesForCoins(ctx, zone, allocations, isBatchOrRewards(memo))...) } else { - msgs = append(msgs, k.PrepareDelegationMessagesForShares(zone, msg.Amount)...) + msgs = append(msgs, k.PrepareDelegationMessagesForShares(ctx, zone, msg.Amount)...) } } k.Logger(ctx).Info("messages to send", "messages", msgs) - return len(msgs), k.SubmitTx(ctx, msgs, zone.DelegationAddress, memo, zone.MessagesPerTx) + return k.SubmitTx(ctx, msgs, zone.DelegationAddress, memo, zone.MessagesPerTx) } func isBatchOrRewards(memo string) bool { @@ -783,10 +782,8 @@ func (k *Keeper) HandleUndelegate(ctx sdk.Context, msg sdk.Msg, completion time. return fmt.Errorf("zone for delegate account %s not found", undelegateMsg.DelegatorAddress) } - if err := zone.DecrementWithdrawalWaitgroup(k.Logger(ctx), 1, "unbonding message ack"); err != nil { - // given that there _could_ be a backlog of message, we don't want to bail here, else they will remain undeliverable. - k.Logger(ctx).Error(err.Error()) - } + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, zone.ChainId, fmt.Sprintf("unbond/%s/%s", undelegateMsg.ValidatorAddress, sha256.Sum256(undelegateMsg.GetSignBytes()))) + ubr, found := k.GetUnbondingRecord(ctx, zone.ChainId, undelegateMsg.ValidatorAddress, epochNumber) if !found { return fmt.Errorf("unbonding record for %s not found for epoch %d", undelegateMsg.ValidatorAddress, epochNumber) @@ -841,10 +838,17 @@ func (k *Keeper) HandleUndelegate(ctx sdk.Context, msg sdk.Msg, completion time. 0, ) - if err = zone.IncrementWithdrawalWaitgroup(k.Logger(ctx), 1, "unbonding message ack emit delegation_epoch query"); err != nil { - return err - } - k.SetZone(ctx, zone) + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + zone.ChainId, + fmt.Sprintf("query_delegation/%s", undelegateMsg.ValidatorAddress), + "", + emtypes.EventTypeICQQueryDelegation, + emtypes.EventStatusActive, + nil, + nil, + ) return nil } @@ -928,6 +932,9 @@ func (k *Keeper) HandleFailedUndelegate(ctx sdk.Context, msg sdk.Msg, memo strin if !found { return fmt.Errorf("zone for delegate account %s not found", undelegateMsg.DelegatorAddress) } + + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, zone.ChainId, fmt.Sprintf("unbond/%s/%s", undelegateMsg.ValidatorAddress, sha256.Sum256(undelegateMsg.GetSignBytes()))) + ubr, found := k.GetUnbondingRecord(ctx, zone.ChainId, undelegateMsg.ValidatorAddress, epochNumber) if !found { return fmt.Errorf("cannot find unbonding record for %s/%s/%d", zone.ChainId, undelegateMsg.ValidatorAddress, epochNumber) @@ -1019,6 +1026,9 @@ func (k *Keeper) HandleRedeemTokens(ctx sdk.Context, msg sdk.Msg, amount sdk.Coi return fmt.Errorf("zone for delegate account %s not found", redeemMsg.DelegatorAddress) } + valoper := strings.Split(redeemMsg.Amount.Denom, "/")[0] + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, zone.ChainId, fmt.Sprintf("delegation/%s/%x", valoper, sha256.Sum256(redeemMsg.GetSignBytes()))) + switch { case strings.HasPrefix(memo, "batch"): k.Logger(ctx).Debug("batch delegation", "memo", memo, "tx", redeemMsg) @@ -1035,12 +1045,6 @@ func (k *Keeper) HandleRedeemTokens(ctx sdk.Context, msg sdk.Msg, amount sdk.Coi } zone.DelegationAddress.Balance = balance k.SetZone(ctx, zone) - if zone.GetWithdrawalWaitgroup() == 0 { - k.Logger(ctx).Info("Triggering redemption rate calc after delegation flush") - if err = k.TriggerRedemptionRate(ctx, zone); err != nil { - return err - } - } default: receipt, found := k.GetReceipt(ctx, zone.ChainId, memo) @@ -1071,26 +1075,9 @@ func (k *Keeper) HandleFailedRedeemTokens(ctx sdk.Context, msg sdk.Msg, memo str return fmt.Errorf("unable to find zone for address %s", redeemMsg.DelegatorAddress) } - switch { - case strings.HasPrefix(memo, "batch"): - k.Logger(ctx).Error("batch token redemption failed", "memo", memo, "tx", redeemMsg) - if err := zone.DecrementWithdrawalWaitgroup(k.Logger(ctx), uint32(1), "batch token redemption failure ack"); err != nil { - k.Logger(ctx).Error(err.Error()) - return nil - // return nil here so we don't reject the incoming tx, but log the error and don't trigger RR update for repeated zero. - } - k.Logger(ctx).Info("Decremented waitgroup after failed batch token redemption", "wg", zone.GetWithdrawalWaitgroup()) - k.SetZone(ctx, zone) - if zone.GetWithdrawalWaitgroup() == 0 { - k.Logger(ctx).Info("Triggering redemption rate calc after delegation flush") - if err := k.TriggerRedemptionRate(ctx, zone); err != nil { - return err - } - } + valoper := strings.Split(redeemMsg.Amount.Denom, "/")[0] + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, zone.ChainId, fmt.Sprintf("delegation/%s/%x", valoper, sha256.Sum256(redeemMsg.GetSignBytes()))) - default: - // no-op - } return nil } @@ -1110,6 +1097,8 @@ func (k *Keeper) HandleDelegate(ctx sdk.Context, msg sdk.Msg, memo string) error } return fmt.Errorf("unable to find zone for address %s", delegateMsg.DelegatorAddress) } + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, zone.ChainId, fmt.Sprintf("delegation/%s/%x", delegateMsg.ValidatorAddress, sha256.Sum256(delegateMsg.GetSignBytes()))) + switch { case memo == "rewards": case strings.HasPrefix(memo, "batch"): @@ -1126,18 +1115,7 @@ func (k *Keeper) HandleDelegate(ctx sdk.Context, msg sdk.Msg, memo string) error return nil } zone.DelegationAddress.Balance = balance - if err := zone.DecrementWithdrawalWaitgroup(k.Logger(ctx), uint32(1), "batch/reward delegation success ack"); err != nil { - k.Logger(ctx).Error(err.Error()) - return nil - // return nil here so we don't reject the incoming tx, but log the error and don't trigger RR update for repeated zero. - } k.SetZone(ctx, zone) - if zone.GetWithdrawalWaitgroup() == 0 { - k.Logger(ctx).Info("Triggering redemption rate calc after delegation flush") - if err := k.TriggerRedemptionRate(ctx, zone); err != nil { - return err - } - } default: receipt, found := k.GetReceipt(ctx, zone.ChainId, memo) if !found { @@ -1169,25 +1147,8 @@ func (k *Keeper) HandleFailedDelegate(ctx sdk.Context, msg sdk.Msg, memo string) return fmt.Errorf("unable to find zone for address %s", delegateMsg.DelegatorAddress) } - switch { - case strings.HasPrefix(memo, "batch"): - k.Logger(ctx).Error("batch delegation failed", "memo", memo, "tx", delegateMsg) - if err := zone.DecrementWithdrawalWaitgroup(k.Logger(ctx), 1, "batch delegation failed ack"); err != nil { - k.Logger(ctx).Error(err.Error()) - return nil - // return nil here so we don't reject the incoming tx, but log the error and don't trigger RR update for repeated zero. - } - k.SetZone(ctx, zone) - if zone.GetWithdrawalWaitgroup() == 0 { - k.Logger(ctx).Info("Triggering redemption rate calc after delegation flush") - if err := k.TriggerRedemptionRate(ctx, zone); err != nil { - return err - } - } + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, zone.ChainId, fmt.Sprintf("delegation/%s/%x", delegateMsg.ValidatorAddress, sha256.Sum256(delegateMsg.GetSignBytes()))) - default: - // no-op - } return nil } @@ -1263,14 +1224,7 @@ func (k *Keeper) UpdateDelegationRecordsForAddress(ctx sdk.Context, zone types.Z delMap[del.ValidatorAddress] = del } - cb := "delegation" - if isEpoch { - if err := zone.DecrementWithdrawalWaitgroup(k.Logger(ctx), 1, "delegations_epoch callback succeeded"); err != nil { - k.Logger(ctx).Error(err.Error()) - // don't return here, catch and squash err. - } - cb = "delegation_epoch" - } + k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, zone.ChainId, "query_delegations_epoch") for _, delegationRecord := range response.DelegationResponses { @@ -1292,15 +1246,21 @@ func (k *Keeper) UpdateDelegationRecordsForAddress(ctx sdk.Context, zone types.Z data, sdk.NewInt(-1), types.ModuleName, - cb, + "delegation", 0, ) - if isEpoch { - err = zone.IncrementWithdrawalWaitgroup(k.Logger(ctx), 1, fmt.Sprintf("delegation callback emit %s query", cb)) - if err != nil { - return err - } - } + + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + zone.ChainId, + fmt.Sprintf("delegation_query/%s", delegationRecord.Delegation.ValidatorAddress), + "", + emtypes.EventTypeICQQueryDelegation, + emtypes.EventStatusActive, + nil, // TODO: maybe delegation/valoper? + nil, + ) } if ok { @@ -1325,19 +1285,21 @@ func (k *Keeper) UpdateDelegationRecordsForAddress(ctx sdk.Context, zone types.Z data, sdk.NewInt(-1), types.ModuleName, - cb, + "delegation", 0, ) - if isEpoch { - err = zone.IncrementWithdrawalWaitgroup(k.Logger(ctx), 1, fmt.Sprintf("delegations callback emit %s query", cb)) - if err != nil { - return err - } - } - } - if isEpoch { - k.SetZone(ctx, &zone) + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + zone.ChainId, + fmt.Sprintf("delegation_query/%s", existingValAddr), + "", + emtypes.EventTypeICQQueryDelegation, + emtypes.EventStatusActive, + nil, // TODO: maybe delegation/valoper? + nil, + ) } return nil @@ -1380,24 +1342,8 @@ func (k *Keeper) UpdateDelegationRecordForAddress( return err } - if isEpoch { - err = zone.DecrementWithdrawalWaitgroup(k.Logger(ctx), 1, "delegation_epoch success") - if err != nil { - k.Logger(ctx).Error(err.Error()) - // return nil here as to not fail the ack, but don't trigger RR multiple times. - return nil - } - - k.SetZone(ctx, zone) + k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, zone.ChainId, fmt.Sprintf("delegation_query/%s", validatorAddress)) - if zone.GetWithdrawalWaitgroup() == 0 { - k.Logger(ctx).Info("Triggering redemption rate upgrade after delegation updates") - err = k.TriggerRedemptionRate(ctx, zone) - if err != nil { - return err - } - } - } return nil } diff --git a/x/interchainstaking/keeper/ibc_packet_handlers_test.go b/x/interchainstaking/keeper/ibc_packet_handlers_test.go index d419cd77c..26bf776e9 100644 --- a/x/interchainstaking/keeper/ibc_packet_handlers_test.go +++ b/x/interchainstaking/keeper/ibc_packet_handlers_test.go @@ -892,7 +892,6 @@ func (suite *KeeperTestSuite) TestHandleWithdrawRewards() { { name: "try to decrement when waitgroup = 0", setup: func(ctx sdk.Context, quicksilver *app.Quicksilver, zone *types.Zone) { - zone.SetWithdrawalWaitgroup(quicksilver.Logger(), 0, "init") quicksilver.InterchainstakingKeeper.SetZone(ctx, zone) }, checks: func(ctx sdk.Context, quicksilver *app.Quicksilver, zone *types.Zone) {}, @@ -908,8 +907,6 @@ func (suite *KeeperTestSuite) TestHandleWithdrawRewards() { { name: "valid case with balances != 0", setup: func(ctx sdk.Context, quicksilver *app.Quicksilver, zone *types.Zone) { - zone.SetWithdrawalWaitgroup(quicksilver.Logger(), 1, "init") - balances := sdk.NewCoins( sdk.NewCoin( zone.BaseDenom, @@ -932,7 +929,6 @@ func (suite *KeeperTestSuite) TestHandleWithdrawRewards() { { name: "valid case trigger redemption rate and check if delegatorAddress == performanceAddress", setup: func(ctx sdk.Context, quicksilver *app.Quicksilver, zone *types.Zone) { - zone.SetWithdrawalWaitgroup(quicksilver.Logger(), 1, "init") quicksilver.InterchainstakingKeeper.SetZone(ctx, zone) }, checks: func(ctx sdk.Context, quicksilver *app.Quicksilver, zone *types.Zone) { @@ -952,8 +948,6 @@ func (suite *KeeperTestSuite) TestHandleWithdrawRewards() { { name: "valid case trigger redemption rate and without checking if delegatorAddress == performanceAddress", setup: func(ctx sdk.Context, quicksilver *app.Quicksilver, zone *types.Zone) { - zone.SetWithdrawalWaitgroup(quicksilver.Logger(), 0, "init") - quicksilver.InterchainstakingKeeper.SetZone(ctx, zone) }, checks: func(ctx sdk.Context, quicksilver *app.Quicksilver, zone *types.Zone) {}, msg: func(zone *types.Zone) sdk.Msg { @@ -3000,7 +2994,6 @@ func (suite *KeeperTestSuite) TestReceiveAckForWithdrawReward() { if !found { suite.Fail("unable to retrieve zone for test") } - zone.SetWithdrawalWaitgroup(quicksilver.Logger(), 1, "init") quicksilver.InterchainstakingKeeper.SetZone(ctx, &zone) withdrawReward := &distrtypes.MsgWithdrawDelegatorReward{ @@ -4829,9 +4822,6 @@ func (suite *KeeperTestSuite) TestHandleFailedDelegate_Batch_OK() { zone, found := app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) suite.True(found) - zone.SetWithdrawalWaitgroup(app.Logger(), 100, "init") - app.InterchainstakingKeeper.SetZone(ctx, &zone) - vals := app.InterchainstakingKeeper.GetValidatorAddresses(ctx, suite.chainB.ChainID) msg := stakingtypes.MsgDelegate{DelegatorAddress: zone.DelegationAddress.Address, ValidatorAddress: vals[0], Amount: sdk.NewCoin("uatom", sdk.NewInt(100))} var msgMsg sdk.Msg = &msg @@ -4853,9 +4843,6 @@ func (suite *KeeperTestSuite) TestHandleFailedDelegate_PerfAddress_OK() { zone, found := app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) suite.True(found) - zone.SetWithdrawalWaitgroup(app.Logger(), 100, "init") - app.InterchainstakingKeeper.SetZone(ctx, &zone) - vals := app.InterchainstakingKeeper.GetValidatorAddresses(ctx, suite.chainB.ChainID) msg := stakingtypes.MsgDelegate{DelegatorAddress: zone.PerformanceAddress.Address, ValidatorAddress: vals[0], Amount: sdk.NewCoin("uatom", sdk.NewInt(100))} var msgMsg sdk.Msg = &msg @@ -4878,9 +4865,6 @@ func (suite *KeeperTestSuite) TestHandleFailedDelegate_NotBatch_OK() { zone, found := app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) suite.True(found) - zone.SetWithdrawalWaitgroup(app.Logger(), 100, "init") - app.InterchainstakingKeeper.SetZone(ctx, &zone) - vals := app.InterchainstakingKeeper.GetValidatorAddresses(ctx, suite.chainB.ChainID) msg := stakingtypes.MsgDelegate{DelegatorAddress: zone.DelegationAddress.Address, ValidatorAddress: vals[0], Amount: sdk.NewCoin("uatom", sdk.NewInt(100))} var msgMsg sdk.Msg = &msg @@ -4903,8 +4887,6 @@ func (suite *KeeperTestSuite) TestHandleFailedDelegate_BatchTriggerRR_OK() { zone, found := app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) suite.True(found) - zone.SetWithdrawalWaitgroup(app.Logger(), 1, "init") - app.InterchainstakingKeeper.SetZone(ctx, &zone) preQueries := app.InterchainQueryKeeper.AllQueries(ctx) vals := app.InterchainstakingKeeper.GetValidatorAddresses(ctx, suite.chainB.ChainID) @@ -4947,12 +4929,6 @@ func (suite *KeeperTestSuite) TestHandleFailedDelegate_BadAddr_Fail() { app := suite.GetQuicksilverApp(suite.chainA) ctx := suite.chainA.GetContext() - zone, found := app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) - suite.True(found) - - zone.SetWithdrawalWaitgroup(app.Logger(), 100, "init") - app.InterchainstakingKeeper.SetZone(ctx, &zone) - vals := app.InterchainstakingKeeper.GetValidatorAddresses(ctx, suite.chainB.ChainID) msg := stakingtypes.MsgDelegate{DelegatorAddress: addressutils.GenerateAddressForTestWithPrefix("cosmos"), ValidatorAddress: vals[0], Amount: sdk.NewCoin("uatom", sdk.NewInt(100))} var msgMsg sdk.Msg = &msg @@ -4970,9 +4946,6 @@ func (suite *KeeperTestSuite) TestHandleFailedDelegate_BadMsg_Fail() { zone, found := app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) suite.True(found) - zone.SetWithdrawalWaitgroup(app.Logger(), 100, "init") - app.InterchainstakingKeeper.SetZone(ctx, &zone) - vals := app.InterchainstakingKeeper.GetValidatorAddresses(ctx, suite.chainB.ChainID) msg := stakingtypes.MsgBeginRedelegate{DelegatorAddress: zone.DelegationAddress.Address, ValidatorSrcAddress: vals[0], ValidatorDstAddress: vals[1], Amount: sdk.NewCoin("uatom", sdk.NewInt(100))} var msgMsg sdk.Msg = &msg diff --git a/x/interchainstaking/keeper/redemptions.go b/x/interchainstaking/keeper/redemptions.go index f1766dfbc..986367cdd 100644 --- a/x/interchainstaking/keeper/redemptions.go +++ b/x/interchainstaking/keeper/redemptions.go @@ -1,6 +1,7 @@ package keeper import ( + "crypto/sha256" "errors" "fmt" "sort" @@ -237,13 +238,14 @@ func (k *Keeper) HandleQueuedUnbondings(ctx sdk.Context, zone *types.Zone, epoch var msgs []sdk.Msg for _, valoper := range utils.Keys(coinsOutPerValidator) { if !coinsOutPerValidator[valoper].Amount.IsZero() { - msgs = append(msgs, &stakingtypes.MsgUndelegate{DelegatorAddress: zone.DelegationAddress.Address, ValidatorAddress: valoper, Amount: coinsOutPerValidator[valoper]}) + msg := &stakingtypes.MsgUndelegate{DelegatorAddress: zone.DelegationAddress.Address, ValidatorAddress: valoper, Amount: coinsOutPerValidator[valoper]} + msgs = append(msgs, msg) k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, zone.ChainId, - fmt.Sprintf("%s/%s", types.EpochWithdrawalMemo(epoch), valoper), - "unbondAck", + fmt.Sprintf("unbond/%s/%s", valoper, sha256.Sum256(msg.GetSignBytes())), + "", emtypes.EventTypeICAUnbond, emtypes.EventStatusActive, nil, @@ -266,11 +268,6 @@ func (k *Keeper) HandleQueuedUnbondings(ctx sdk.Context, zone *types.Zone, epoch } } - // if err = zone.IncrementWithdrawalWaitgroup(k.Logger(ctx), uint32(len(msgs)), "trigger unbonding messages"); err != nil { - // return err - // } - //k.SetZone(ctx, zone) - return nil } diff --git a/x/interchainstaking/types/zones.go b/x/interchainstaking/types/zones.go index 1fafdd3b6..1136dd0da 100644 --- a/x/interchainstaking/types/zones.go +++ b/x/interchainstaking/types/zones.go @@ -6,8 +6,6 @@ import ( "fmt" "strings" - "github.com/tendermint/tendermint/libs/log" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/quicksilver-zone/quicksilver/utils/addressutils" @@ -43,31 +41,6 @@ func (z *Zone) GetDelegationAccount() (*ICAAccount, error) { return z.DelegationAddress, nil } -func (z *Zone) SetWithdrawalWaitgroup(logger log.Logger, num uint32, reason string) { - logger.Info("setting withdrawal waitgroup", "zone", z.ChainId, "existing", z.WithdrawalWaitgroup, "new", num, "reason", reason) - z.WithdrawalWaitgroup = num -} - -func (z *Zone) DecrementWithdrawalWaitgroup(logger log.Logger, num uint32, reason string) error { - if z.WithdrawalWaitgroup-num > z.WithdrawalWaitgroup { // underflow - logger.Error("error decrementing withdrawal waitgroup: uint32 underflow ", "zone", z.ChainId, "existing", z.WithdrawalWaitgroup, "decrement", num, "reason", reason) - return errors.New("unable to decrement the withdrawal waitgroup below 0") - } - logger.Info("decrementing withdrawal waitgroup", "zone", z.ChainId, "existing", z.WithdrawalWaitgroup, "decrement", num, "new", z.WithdrawalWaitgroup-num, "reason", reason) - z.WithdrawalWaitgroup -= num - return nil -} - -func (z *Zone) IncrementWithdrawalWaitgroup(logger log.Logger, num uint32, reason string) error { - if z.WithdrawalWaitgroup+num < z.WithdrawalWaitgroup { // overflow - logger.Error("error incrementing withdrawal waitgroup: uint32 overflow ", "zone", z.ChainId, "existing", z.WithdrawalWaitgroup, "increment", num, "reason", reason) - return errors.New("unable to increment the withdrawal waitgroup above 4294967295") - } - logger.Info("incrementing withdrawal waitgroup", "zone", z.ChainId, "existing", z.WithdrawalWaitgroup, "increment", num, "new", z.WithdrawalWaitgroup+num, "reason", reason) - z.WithdrawalWaitgroup += num - return nil -} - // ValidateCoinsForZone checks whether an inbound denomination is valid for this zone. // valid coins comprise: // - non-lsm: staking denom only (z.BaseDenom) diff --git a/x/interchainstaking/types/zones_test.go b/x/interchainstaking/types/zones_test.go index 6968ec1b5..3e1243732 100644 --- a/x/interchainstaking/types/zones_test.go +++ b/x/interchainstaking/types/zones_test.go @@ -4,7 +4,6 @@ import ( "testing" "github.com/stretchr/testify/require" - "github.com/tendermint/tendermint/libs/log" sdk "github.com/cosmos/cosmos-sdk/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" @@ -39,19 +38,6 @@ func TestGetDelegationAccount(t *testing.T) { require.Nil(t, acc2) } -func TestDecrementWithdrawalWg(t *testing.T) { - testlog := log.NewNopLogger() - zone := types.Zone{WithdrawalWaitgroup: 0} - oldWg := zone.GetWithdrawalWaitgroup() - require.NoError(t, zone.IncrementWithdrawalWaitgroup(testlog, 1, "test increment")) - firstWg := zone.GetWithdrawalWaitgroup() - require.Equal(t, oldWg+1, firstWg) - require.NoError(t, zone.DecrementWithdrawalWaitgroup(testlog, 1, "test decrement")) - secondWg := zone.GetWithdrawalWaitgroup() - require.Equal(t, firstWg-1, secondWg) - require.Error(t, zone.DecrementWithdrawalWaitgroup(testlog, 1, "test decrement error")) -} - func TestValidateCoinsForZone(t *testing.T) { zone := types.Zone{ConnectionId: "connection-0", ChainId: "cosmoshub-4", AccountPrefix: "cosmos", LocalDenom: "uqatom", BaseDenom: "uatom", Is_118: true} valAddresses := map[string]bool{ From 734351f3ea655b1aa0b388154427676d7812b8f2 Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Wed, 17 Apr 2024 19:42:24 +0100 Subject: [PATCH 08/19] working ics em integration --- x/interchainstaking/keeper/keeper.go | 1 + 1 file changed, 1 insertion(+) diff --git a/x/interchainstaking/keeper/keeper.go b/x/interchainstaking/keeper/keeper.go index daf082553..4c9ecf022 100644 --- a/x/interchainstaking/keeper/keeper.go +++ b/x/interchainstaking/keeper/keeper.go @@ -711,6 +711,7 @@ func (k *Keeper) UpdateRedemptionRate(ctx sdk.Context, zone *types.Zone, epochRe zone.LastRedemptionRate = zone.RedemptionRate zone.RedemptionRate = ratio k.SetZone(ctx, zone) + k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, zone.ChainId, "trigger_rr") } func (k *Keeper) OverrideRedemptionRateNoCap(ctx sdk.Context, zone *types.Zone) { From 64c35bfa1f71a66c2437d73f48f1f2e1ac3846f3 Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Tue, 23 Apr 2024 13:23:51 +0100 Subject: [PATCH 09/19] wip pr --- app/keepers/keepers.go | 4 + docker-compose.yml | 3 +- scripts/simple-test.sh | 6 - x/eventmanager/keeper/events.go | 17 +- x/eventmanager/keeper/events_test.go | 27 +-- x/eventmanager/keeper/keeper.go | 2 - x/eventmanager/keeper/keeper_test.go | 2 +- x/eventmanager/types/codec.go | 2 +- x/eventmanager/types/conditions.go | 3 +- x/eventmanager/types/fields.go | 3 +- x/eventmanager/types/keys.go | 10 +- x/interchainstaking/keeper/events.go | 1 - x/interchainstaking/keeper/validators.go | 10 + x/participationrewards/keeper/allocations.go | 76 +++++++ x/participationrewards/keeper/callbacks.go | 2 + x/participationrewards/keeper/distribution.go | 26 +-- x/participationrewards/keeper/events.go | 93 +++++++++ x/participationrewards/keeper/hooks.go | 76 ++++--- x/participationrewards/keeper/keeper.go | 7 +- .../keeper/rewards_validatorSelection.go | 99 ++++----- .../keeper/rewards_validatorSelection_test.go | 116 ++++------- .../keeper/submodule_liquid.go | 3 +- .../keeper/submodule_osmosis.go | 14 ++ x/participationrewards/types/allocations.go | 43 ---- .../types/allocations_test.go | 190 ------------------ .../types/expected_keepers.go | 8 + x/participationrewards/types/keys.go | 7 +- .../types/participationrewards.go | 17 +- 28 files changed, 414 insertions(+), 453 deletions(-) create mode 100644 x/participationrewards/keeper/allocations.go create mode 100644 x/participationrewards/keeper/events.go delete mode 100644 x/participationrewards/types/allocations.go delete mode 100644 x/participationrewards/types/allocations_test.go diff --git a/app/keepers/keepers.go b/app/keepers/keepers.go index d29a91bfd..d5c9b9e0e 100644 --- a/app/keepers/keepers.go +++ b/app/keepers/keepers.go @@ -412,6 +412,7 @@ func (appKeepers *AppKeepers) InitKeepers( &appKeepers.InterchainQueryKeeper, appKeepers.InterchainstakingKeeper, appKeepers.ClaimsManagerKeeper, + appKeepers.EventManagerKeeper, authtypes.FeeCollectorName, proofOpsFn, selfProofOpsFn, @@ -429,6 +430,9 @@ func (appKeepers *AppKeepers) InitKeepers( panic(err) } + if err := appKeepers.EventManagerKeeper.SetCallbackHandler(participationrewardstypes.ModuleName, appKeepers.ParticipationRewardsKeeper.EventCallbackHandler()); err != nil { + panic(err) + } // Quicksilver Keepers appKeepers.EpochsKeeper = epochskeeper.NewKeeper(appCodec, appKeepers.keys[epochstypes.StoreKey]) appKeepers.ParticipationRewardsKeeper.SetEpochsKeeper(appKeepers.EpochsKeeper) diff --git a/docker-compose.yml b/docker-compose.yml index 9bd39da3c..b6bc28a3f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -98,7 +98,7 @@ services: - osmosisd - start hermes: - image: informalsystems/hermes:v1.8.0 + image: informalsystems/hermes:v1.8.2 hostname: hermes volumes: - ./data/hermes:/home/hermes/.hermes @@ -121,3 +121,4 @@ services: - icq-relayer - run restart: always + diff --git a/scripts/simple-test.sh b/scripts/simple-test.sh index 8144bf1f5..40313b2d2 100755 --- a/scripts/simple-test.sh +++ b/scripts/simple-test.sh @@ -61,12 +61,6 @@ $HERMES_RUN create channel --a-chain $CHAINID_0 --b-chain $CHAINID_1 --a-port tr #$HERMES_RUN create channel --port-a transfer --port-b transfer $CHAINID_0 connection-0 echo "Tranfer channel created" docker-compose up --force-recreate -d hermes -RLY_ADDRESS_3=$($RLY_RUN keys show qstest-1 testkey) -RLY_ADDRESS_4=$($RLY_RUN keys show lstest-1 testkey) -$QS1_EXEC tx bank send val1 $RLY_ADDRESS_3 1000uqck --chain-id $CHAINID_0 -y --keyring-backend=test -$TZ1_1_EXEC tx bank send val2 $RLY_ADDRESS_4 1000uatom --chain-id $CHAINID_1 -y --keyring-backend=test - -docker-compose up --force-recreate -d relayer rm -rf ./icq/keys echo "Launch and configure interchain query daemon" diff --git a/x/eventmanager/keeper/events.go b/x/eventmanager/keeper/events.go index 14785fd75..958ed39ca 100644 --- a/x/eventmanager/keeper/events.go +++ b/x/eventmanager/keeper/events.go @@ -12,15 +12,15 @@ import ( // ---------------------------------------------------------------- -func GenerateEventKey(module, chainId, id string) []byte { - return []byte(module + chainId + id) +func GenerateEventKey(module, chainID, id string) []byte { + return []byte(module + chainID + id) } // GetEvent returns event. -func (k Keeper) GetEvent(ctx sdk.Context, module, chainId, id string) (types.Event, bool) { +func (k Keeper) GetEvent(ctx sdk.Context, module, chainID, id string) (types.Event, bool) { event := types.Event{} store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixEvent) - bz := store.Get(GenerateEventKey(module, chainId, id)) + bz := store.Get(GenerateEventKey(module, chainID, id)) if len(bz) == 0 { return event, false } @@ -37,9 +37,9 @@ func (k Keeper) SetEvent(ctx sdk.Context, event types.Event) { } // DeleteEvent delete event. -func (k Keeper) DeleteEvent(ctx sdk.Context, module, chainId, id string) { +func (k Keeper) DeleteEvent(ctx sdk.Context, module, chainID, id string) { store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixEvent) - store.Delete(GenerateEventKey(module, chainId, id)) + store.Delete(GenerateEventKey(module, chainID, id)) } // IterateEvents iterate through queries. @@ -65,8 +65,8 @@ func (k Keeper) IterateModuleEvents(ctx sdk.Context, module string, fn func(inde k.IteratePrefixedEvents(ctx, []byte(module), fn) } -func (k Keeper) IterateModuleChainEvents(ctx sdk.Context, module string, chainId string, fn func(index int64, event types.Event) (stop bool)) { - k.IteratePrefixedEvents(ctx, []byte(module+chainId), fn) +func (k Keeper) IterateModuleChainEvents(ctx sdk.Context, module string, chainID string, fn func(index int64, event types.Event) (stop bool)) { + k.IteratePrefixedEvents(ctx, []byte(module+chainID), fn) } // AllEvents returns every eventInfo in the store. @@ -112,7 +112,6 @@ func (k Keeper) AddEvent(ctx sdk.Context, condition types.ConditionI, payload []byte, ) { - var err error var conditionAny *codectypes.Any if condition != nil { diff --git a/x/eventmanager/keeper/events_test.go b/x/eventmanager/keeper/events_test.go index 4d53e2f52..1151a4d01 100644 --- a/x/eventmanager/keeper/events_test.go +++ b/x/eventmanager/keeper/events_test.go @@ -9,7 +9,7 @@ import ( "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" ) -var GLOBAL_VAR = 0 +var GlobalVar = 0 // ___________________________________________________________________________________________________ @@ -54,12 +54,12 @@ func (c EventCallbacks) RegisterCallbacks() types.EventCallbacks { // ----------------------------------- func testCallback(k *keeper.Keeper, ctx sdk.Context, args []byte) error { - GLOBAL_VAR = 12345 + GlobalVar = 12345 return nil } func testCallbackWithArgs(k *keeper.Keeper, ctx sdk.Context, args []byte) error { - GLOBAL_VAR = int(args[0]) + GlobalVar = int(args[0]) return nil } @@ -71,7 +71,7 @@ func (suite *KeeperTestSuite) TestEventLifecycle() { callbackHandler := EventCallbacks{&app.EventManagerKeeper, make(map[string]EventCallback, 0)} - app.EventManagerKeeper.SetCallbackHandler(types.ModuleName, callbackHandler) + suite.NoError(app.EventManagerKeeper.SetCallbackHandler(types.ModuleName, callbackHandler)) app.EventManagerKeeper.AddEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test", "testCallback", types.EventTypeICADelegate, types.EventStatusPending, nil, nil) @@ -79,14 +79,14 @@ func (suite *KeeperTestSuite) TestEventLifecycle() { suite.Equal(1, len(events)) - GLOBAL_VAR = 0 + GlobalVar = 0 app.EventManagerKeeper.Trigger(ctx, types.ModuleName, suite.chainB.ChainID) event, found := app.EventManagerKeeper.GetEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test") suite.True(found) - suite.Equal(12345, GLOBAL_VAR) + suite.Equal(12345, GlobalVar) suite.Equal(event.EventStatus, types.EventStatusActive) @@ -103,7 +103,7 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition() { callbackHandler := EventCallbacks{&app.EventManagerKeeper, make(map[string]EventCallback, 0)} - app.EventManagerKeeper.SetCallbackHandler(types.ModuleName, callbackHandler) + suite.NoError(app.EventManagerKeeper.SetCallbackHandler(types.ModuleName, callbackHandler)) condition, err := types.NewConditionAll(ctx, []*types.FieldValue{ {Field: types.FieldModule, Value: types.ModuleName, Operator: types.FieldOperator_EQUAL, Negate: false}, @@ -119,7 +119,7 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition() { suite.Equal(2, len(events)) - GLOBAL_VAR = 0 + GlobalVar = 0 // martCompleted doesn't require an explicit callback app.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, suite.chainB.ChainID, "test1") @@ -131,7 +131,7 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition() { suite.Equal(1, len(events)) suite.True(found) - suite.Equal(12345, GLOBAL_VAR) + suite.Equal(12345, GlobalVar) suite.Equal(event.EventStatus, types.EventStatusActive) @@ -148,7 +148,7 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition2() { callbackHandler := EventCallbacks{&app.EventManagerKeeper, make(map[string]EventCallback, 0)} - app.EventManagerKeeper.SetCallbackHandler(types.ModuleName, callbackHandler) + suite.NoError(app.EventManagerKeeper.SetCallbackHandler(types.ModuleName, callbackHandler)) condition1, err := types.NewConditionAll(ctx, []*types.FieldValue{ {Field: types.FieldModule, Value: types.ModuleName, Operator: types.FieldOperator_EQUAL, Negate: false}, @@ -171,9 +171,10 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition2() { events := app.EventManagerKeeper.AllEvents(ctx) + fmt.Println(events) suite.Equal(3, len(events)) - GLOBAL_VAR = 0 + GlobalVar = 0 // markCompleted doesn't require an explicit callback app.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, suite.chainB.ChainID, "test1") @@ -185,13 +186,13 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition2() { suite.Equal(2, len(events)) - suite.Equal(1, GLOBAL_VAR) + suite.Equal(1, GlobalVar) suite.Equal(event.EventStatus, types.EventStatusActive) app.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, suite.chainB.ChainID, "test") - suite.Equal(2, GLOBAL_VAR) + suite.Equal(2, GlobalVar) events = app.EventManagerKeeper.AllEvents(ctx) diff --git a/x/eventmanager/keeper/keeper.go b/x/eventmanager/keeper/keeper.go index 67c497874..7fa546bfa 100644 --- a/x/eventmanager/keeper/keeper.go +++ b/x/eventmanager/keeper/keeper.go @@ -21,7 +21,6 @@ type Keeper struct { // NewKeeper returns a new instance of zones Keeper. func NewKeeper(cdc codec.Codec, storeKey storetypes.StoreKey) Keeper { - return Keeper{ cdc: cdc, storeKey: storeKey, @@ -48,7 +47,6 @@ func (k Keeper) Logger(ctx sdk.Context) log.Logger { } func (k Keeper) Call(ctx sdk.Context, moduleName string, callbackID string, payload []byte) error { - module, found := k.callbacks[moduleName] if !found { return fmt.Errorf("bad module %s", moduleName) diff --git a/x/eventmanager/keeper/keeper_test.go b/x/eventmanager/keeper/keeper_test.go index 8bee4e9f2..ba7ca66ad 100644 --- a/x/eventmanager/keeper/keeper_test.go +++ b/x/eventmanager/keeper/keeper_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/suite" - ibctesting "github.com/cosmos/ibc-go/v5/testing" + ibctesting "github.com/cosmos/ibc-go/v6/testing" "github.com/quicksilver-zone/quicksilver/app" ) diff --git a/x/eventmanager/types/codec.go b/x/eventmanager/types/codec.go index 159d3bff0..1c42ecb14 100644 --- a/x/eventmanager/types/codec.go +++ b/x/eventmanager/types/codec.go @@ -17,7 +17,7 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { func RegisterInterfaces(registry types.InterfaceRegistry) { registry.RegisterInterface("quicksilver.eventmanager.v1.ConditionI", (*ConditionI)(nil)) - registry.RegisterImplementations((*ConditionI)(nil), &ConditionAll{}, &ConditionAnd{} /*&ConditionAny{},*/, &ConditionOr{}) + registry.RegisterImplementations((*ConditionI)(nil), &ConditionAll{}, &ConditionAnd{}, &ConditionOr{}) } func init() { diff --git a/x/eventmanager/types/conditions.go b/x/eventmanager/types/conditions.go index 8d326e12b..92211ad57 100644 --- a/x/eventmanager/types/conditions.go +++ b/x/eventmanager/types/conditions.go @@ -1,10 +1,11 @@ package types import ( + "github.com/gogo/protobuf/proto" + "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/gogo/protobuf/proto" ) type EMKeeper interface { diff --git a/x/eventmanager/types/fields.go b/x/eventmanager/types/fields.go index 7a7ca3469..ceb48f22d 100644 --- a/x/eventmanager/types/fields.go +++ b/x/eventmanager/types/fields.go @@ -1,7 +1,7 @@ package types import ( - fmt "fmt" + "fmt" "strconv" "strings" ) @@ -35,7 +35,6 @@ func (e Event) ResolveAnyFieldValues(fvs []*FieldValue) (bool, error) { } func (e Event) resolveFieldValue(fv *FieldValue) (bool, error) { - switch { case fv.Field == FieldEventType: if fv.Operator != FieldOperator_EQUAL { diff --git a/x/eventmanager/types/keys.go b/x/eventmanager/types/keys.go index 9c516332c..405f428a3 100644 --- a/x/eventmanager/types/keys.go +++ b/x/eventmanager/types/keys.go @@ -28,6 +28,12 @@ const ( EventTypeICAWithdrawRewards = int32(0x06) EventTypeICADelegate = int32(0x07) EventTypeICAUnbond = int32(0x08) + EventTypeICQGetLatestBlock = int32(0x09) + EventTypeICQOsmosisPool = int32(0x0a) + EventTypeSubmodules = int32(0x0b) + EventTypeCalculateTvls = int32(0x0c) + EventTypeDistributeRewards = int32(0x0d) + FieldEventType = "eventtype" FieldModule = "module" @@ -37,6 +43,4 @@ const ( FieldCallback = "callback" ) -var ( - KeyPrefixEvent = []byte{0x01} -) +var KeyPrefixEvent = []byte{0x01} diff --git a/x/interchainstaking/keeper/events.go b/x/interchainstaking/keeper/events.go index 6655a95d3..c2b1b1bd1 100644 --- a/x/interchainstaking/keeper/events.go +++ b/x/interchainstaking/keeper/events.go @@ -66,7 +66,6 @@ type DelegatorDelegationsParams struct { } func EmitDelegatorDelegations(k *Keeper, ctx sdk.Context, args []byte) error { - var params DelegatorDelegationsParams err := json.Unmarshal(args, ¶ms) if err != nil { diff --git a/x/interchainstaking/keeper/validators.go b/x/interchainstaking/keeper/validators.go index ba3c20843..785f3fb67 100644 --- a/x/interchainstaking/keeper/validators.go +++ b/x/interchainstaking/keeper/validators.go @@ -18,6 +18,16 @@ func (k Keeper) GetValidators(ctx sdk.Context, chainID string) []types.Validator return validators } +// GetValidators returns validators by chainID. +func (k Keeper) GetValidatorsAsMap(ctx sdk.Context, chainID string) map[string]types.Validator { + validators := map[string]types.Validator{} + k.IterateValidators(ctx, chainID, func(_ int64, validator types.Validator) (stop bool) { + validators[validator.ValoperAddress] = validator + return false + }) + return validators +} + // GetValidatorAddresses returns a slice of validator addresses by chainID. func (k Keeper) GetValidatorAddresses(ctx sdk.Context, chainID string) []string { validators := []string{} diff --git a/x/participationrewards/keeper/allocations.go b/x/participationrewards/keeper/allocations.go new file mode 100644 index 000000000..7ea97392c --- /dev/null +++ b/x/participationrewards/keeper/allocations.go @@ -0,0 +1,76 @@ +package keeper + +import ( + "fmt" + + "github.com/cosmos/cosmos-sdk/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/quicksilver-zone/quicksilver/x/participationrewards/types" +) + +// GetHoldingAllocation returns sdk.Coin allocated to the given identifier. +func (k *Keeper) GetHoldingAllocation(ctx sdk.Context, chainID string) sdk.Coin { + value := sdk.Coin{} + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixHoldingAllocation) + bz := store.Get([]byte(chainID)) + if len(bz) == 0 { + return value + } + + k.cdc.MustUnmarshal(bz, &value) + return value +} + +// SetHoldingAllocation sets sdk.Coin allocated as the given identifier. +func (k Keeper) SetHoldingAllocation(ctx sdk.Context, chainID string, value sdk.Coin) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixHoldingAllocation) + bz := k.cdc.MustMarshal(&value) + store.Set([]byte(chainID), bz) +} + +// GetValidatorAllocation returns sdk.Coin allocated to the given identifier. +func (k *Keeper) GetValidatorAllocation(ctx sdk.Context, chainID string) sdk.Coin { + value := sdk.Coin{} + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixValidatorAllocation) + bz := store.Get([]byte(chainID)) + if len(bz) == 0 { + return value + } + + k.cdc.MustUnmarshal(bz, &value) + return value +} + +// SetValidatorAllocation sets sdk.Coin allocated as the given identifier. +func (k Keeper) SetValidatorAllocation(ctx sdk.Context, chainID string, value sdk.Coin) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixValidatorAllocation) + bz := k.cdc.MustMarshal(&value) + store.Set([]byte(chainID), bz) +} + +func (k Keeper) DetermineAllocations(ctx sdk.Context, moduleBalance sdk.Coin, proportions types.DistributionProportions) error { + if moduleBalance.IsNil() || moduleBalance.IsZero() { + return types.ErrNothingToAllocate + } + + if sum := proportions.Total(); !sum.Equal(sdk.OneDec()) { + return fmt.Errorf("%w: got %v", types.ErrInvalidTotalProportions, sum) + } + + // split participation rewards allocations + validatorAllocation := sdk.NewDecFromInt(moduleBalance.Amount).Mul(proportions.ValidatorSelectionAllocation).TruncateInt() + holdingAllocation := sdk.NewDecFromInt(moduleBalance.Amount).Mul(proportions.HoldingsAllocation).TruncateInt() + + // use sum to check total distribution to collect and allocate dust + sum := validatorAllocation.Add(holdingAllocation) + dust := moduleBalance.Amount.Sub(sum) + + // Add dust to validator choice allocation (favors decentralization) + validatorAllocation = validatorAllocation.Add(dust) + + k.SetHoldingAllocation(ctx, types.ModuleName, sdk.NewCoin(moduleBalance.Denom, holdingAllocation)) + k.SetValidatorAllocation(ctx, types.ModuleName, sdk.NewCoin(moduleBalance.Denom, validatorAllocation)) + + return nil +} diff --git a/x/participationrewards/keeper/callbacks.go b/x/participationrewards/keeper/callbacks.go index 81941e96a..59bf4b1c0 100644 --- a/x/participationrewards/keeper/callbacks.go +++ b/x/participationrewards/keeper/callbacks.go @@ -139,6 +139,8 @@ func OsmosisPoolUpdateCallback(ctx sdk.Context, k *Keeper, response []byte, quer } poolID := sdk.BigEndianToUint64(query.Request[1:]) + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, "", fmt.Sprintf("submodule/osmosispool/%d", poolID)) + key := fmt.Sprintf("%d", poolID) data, pool, err := GetAndUnmarshalProtocolData[*types.OsmosisPoolProtocolData](ctx, k, key, types.ProtocolDataTypeOsmosisPool) if err != nil { diff --git a/x/participationrewards/keeper/distribution.go b/x/participationrewards/keeper/distribution.go index 03d8f62cb..82fc11657 100644 --- a/x/participationrewards/keeper/distribution.go +++ b/x/participationrewards/keeper/distribution.go @@ -191,22 +191,18 @@ func (k *Keeper) CalcTokenValues(ctx sdk.Context) (TokenValues, error) { // AllocateZoneRewards executes zone based rewards allocation. This entails // rewards that are proportionally distributed to zones based on the tvl for // each zone relative to the tvl of the QS protocol. -func (k *Keeper) AllocateZoneRewards(ctx sdk.Context, tvs TokenValues, allocation types.RewardsAllocation) error { - k.Logger(ctx).Info("allocateZoneRewards", "token values", tvs, "allocation", allocation) +func (k *Keeper) AllocateZoneRewards(ctx sdk.Context, tvs TokenValues) error { + // <<--- move to callback - if err := k.SetZoneAllocations(ctx, tvs, allocation); err != nil { - return err - } - - k.AllocateValidatorSelectionRewards(ctx) - - return k.AllocateHoldingsRewards(ctx) + return k.AllocateHoldingsRewards(ctx) // << -- move to callback } // SetZoneAllocations returns the proportional zone rewards allocations as a // map indexed by the zone id. -func (k *Keeper) SetZoneAllocations(ctx sdk.Context, tvs TokenValues, allocation types.RewardsAllocation) error { - k.Logger(ctx).Info("setZoneAllocations", "allocation", allocation) +func (k *Keeper) SetZoneAllocations(ctx sdk.Context, tvs TokenValues) error { + holdingAllocation := k.GetHoldingAllocation(ctx, types.ModuleName) + validatorAllocation := k.GetValidatorAllocation(ctx, types.ModuleName) + k.Logger(ctx).Info("setZoneAllocations", "holdingAllocation", holdingAllocation, "validatorAllocation", validatorAllocation) otvl := sdk.ZeroDec() // pass 1: iterate zones - set tvl & calc overall tvl @@ -235,15 +231,13 @@ func (k *Keeper) SetZoneAllocations(ctx sdk.Context, tvs TokenValues, allocation // pass 2: iterate zones - calc zone tvl proportion & set allocations k.icsKeeper.IterateZones(ctx, func(index int64, zone *icstypes.Zone) (stop bool) { if zone.Tvl.IsNil() { - zone.Tvl = sdk.ZeroDec() + return false } zp := zone.Tvl.Quo(otvl) k.Logger(ctx).Info("zone proportion", "zone", zone.ChainId, "proportion", zp) - - zone.ValidatorSelectionAllocation = sdk.NewDecFromInt(allocation.ValidatorSelection).Mul(zp).TruncateInt().Uint64() - zone.HoldingsAllocation = sdk.NewDecFromInt(allocation.Holdings).Mul(zp).TruncateInt().Uint64() - k.icsKeeper.SetZone(ctx, zone) + k.SetValidatorAllocation(ctx, zone.ChainId, sdk.NewCoin(validatorAllocation.Denom, sdk.NewDecFromInt(validatorAllocation.Amount).Mul(zp).TruncateInt())) + k.SetHoldingAllocation(ctx, zone.ChainId, sdk.NewCoin(holdingAllocation.Denom, sdk.NewDecFromInt(holdingAllocation.Amount).Mul(zp).TruncateInt())) return false }) diff --git a/x/participationrewards/keeper/events.go b/x/participationrewards/keeper/events.go new file mode 100644 index 000000000..70d0d2cb9 --- /dev/null +++ b/x/participationrewards/keeper/events.go @@ -0,0 +1,93 @@ +package keeper + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" + "github.com/quicksilver-zone/quicksilver/x/participationrewards/types" +) + +// ___________________________________________________________________________________________________ + +type EventCallback func(*Keeper, sdk.Context, []byte) error + +// Callbacks wrapper struct for interchainstaking keeper. +type EventCallbacks struct { + k *Keeper + callbacks map[string]EventCallback +} + +var _ emtypes.EventCallbacks = EventCallbacks{} + +func (k *Keeper) EventCallbackHandler() EventCallbacks { + return EventCallbacks{k, make(map[string]EventCallback)} +} + +// Call calls callback handler. +func (c EventCallbacks) Call(ctx sdk.Context, id string, args []byte) error { + if !c.Has(id) { + return fmt.Errorf("callback %s not found", id) + } + return c.callbacks[id](c.k, ctx, args) +} + +func (c EventCallbacks) Has(id string) bool { + _, found := c.callbacks[id] + return found +} + +func (c EventCallbacks) AddCallback(id string, fn interface{}) emtypes.EventCallbacks { + c.callbacks[id], _ = fn.(EventCallback) + return c +} + +func (c EventCallbacks) RegisterCallbacks() emtypes.EventCallbacks { + return c. + AddCallback(CalculateValues, EventCallback(CalculateTokenValues)). + AddCallback(Submodules, EventCallback(SubmoduleHooks)). + AddCallback(DistributeRewards, EventCallback(DistributeParticipationRewards)) +} + +const ( + CalculateValues = "CalculateValues" + Submodules = "Submodules" + DistributeRewards = "DistributeRewards" +) + +// ----------------------------------- +// Callback Handlers +// ----------------------------------- + +func CalculateTokenValues(k *Keeper, ctx sdk.Context, args []byte) error { + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, "", "calc_tokens") + + tvs, err := k.CalcTokenValues(ctx) + if err != nil { + return err + } + + err = k.SetZoneAllocations(ctx, tvs) + if err != nil { + return err + } + + k.QueryValidatorDelegationPerformance(ctx) + + return nil +} + +func SubmoduleHooks(k *Keeper, ctx sdk.Context, args []byte) error { + for _, sub := range k.PrSubmodules { + sub.Hooks(ctx, k) + + } + return nil +} + +func DistributeParticipationRewards(k *Keeper, ctx sdk.Context, args []byte) error { + // calculate, based on latest token values + // allocation based on calculations + return nil +} diff --git a/x/participationrewards/keeper/hooks.go b/x/participationrewards/keeper/hooks.go index 6fae26d7e..96b94bf06 100644 --- a/x/participationrewards/keeper/hooks.go +++ b/x/participationrewards/keeper/hooks.go @@ -7,6 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" epochstypes "github.com/quicksilver-zone/quicksilver/x/epochs/types" + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" icstypes "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types" "github.com/quicksilver-zone/quicksilver/x/participationrewards/types" ) @@ -44,29 +45,45 @@ func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, _ int64) SetEpochBlockCallbackID, 0, ) + + k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, connectionData.ChainID, "get_epoch_height", "", emtypes.EventTypeICQGetLatestBlock, emtypes.EventStatusActive, nil, nil) return false }) + condition, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "get_epoch_height", emtypes.FieldOperator_EQUAL, true)), false) + if err != nil { + panic(err) + } + + // add event to ensure submodule hooks are called when the get_epoch_height calls have returned. + k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, "", "submodules", Submodules, emtypes.EventTypeSubmodules, emtypes.EventStatusPending, condition, nil) + k.Logger(ctx).Info("setting self connection data...") - err := k.UpdateSelfConnectionData(ctx) + err = k.UpdateSelfConnectionData(ctx) if err != nil { panic(err) } - k.Logger(ctx).Info("distribute participation rewards...") + condition2, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "submodule", emtypes.FieldOperator_BEGINSWITH, true)), false) + if err != nil { + panic(err) + } - allocation, err := types.GetRewardsAllocations( - k.GetModuleBalance(ctx), - k.GetParams(ctx).DistributionProportions, - ) + conditionAnd, err := emtypes.NewConditionAnd(ctx, condition, condition2) if err != nil { - k.Logger(ctx).Error(err.Error()) + panic(err) } + k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, "", "calc_tokens", CalculateValues, emtypes.EventTypeCalculateTvls, emtypes.EventStatusPending, conditionAnd, nil) - k.Logger(ctx).Info("Triggering submodule hooks") - for _, sub := range k.PrSubmodules { - sub.Hooks(ctx, k) + condition3, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "calc_tokens", emtypes.FieldOperator_EQUAL, true)), false) + if err != nil { + panic(err) + } + conditionAnd2, err := emtypes.NewConditionAnd(ctx, conditionAnd, condition3) + if err != nil { + panic(err) } + k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, "", "distribute_rewards", DistributeRewards, emtypes.EventTypeDistributeRewards, emtypes.EventStatusPending, conditionAnd2, nil) // ensure we archive claims before we return! k.icsKeeper.IterateZones(ctx, func(index int64, zone *icstypes.Zone) (stop bool) { @@ -74,23 +91,36 @@ func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, _ int64) return false }) - tvs, err := k.CalcTokenValues(ctx) - if err != nil { - k.Logger(ctx).Error("unable to calculate token values", "error", err.Error()) - return nil - } + // ascertain validator scores... - if allocation == nil { - // if allocation is unset, then return early to avoid panic - k.Logger(ctx).Error("nil allocation") - return nil - } + // tvs, err := k.CalcTokenValues(ctx) + // if err != nil { + // k.Logger(ctx).Error("unable to calculate token values", "error", err.Error()) + // return nil + // } - if err := k.AllocateZoneRewards(ctx, tvs, *allocation); err != nil { - k.Logger(ctx).Error("unable to allocate: tvl is zero", "error", err.Error()) - return nil + // if allocation == nil { + // // if allocation is unset, then return early to avoid panic + // k.Logger(ctx).Error("nil allocation") + // return nil + // } + + k.Logger(ctx).Info("distribute participation rewards...") + + err = k.DetermineAllocations( + ctx, + k.GetModuleBalance(ctx), + k.GetParams(ctx).DistributionProportions, + ) + if err != nil { + k.Logger(ctx).Error(err.Error()) } + // if err := k.AllocateZoneRewards(ctx, tvs, *allocation); err != nil { // split into calculate a + // k.Logger(ctx).Error("unable to allocate: tvl is zero", "error", err.Error()) + // return nil + // } + // TODO: remove 'lockup' allocation logic. // if !allocation.Lockup.IsZero() { // // at genesis lockup will be disabled, and enabled when ICS is used. diff --git a/x/participationrewards/keeper/keeper.go b/x/participationrewards/keeper/keeper.go index f9e54268a..7ed3c6470 100644 --- a/x/participationrewards/keeper/keeper.go +++ b/x/participationrewards/keeper/keeper.go @@ -51,6 +51,7 @@ type Keeper struct { icsKeeper types.InterchainStakingKeeper epochsKeeper epochskeeper.Keeper ClaimsManagerKeeper types.ClaimsManagerKeeper + EventManagerKeeper types.EventManagerKeeper feeCollectorName string PrSubmodules map[cmtypes.ClaimType]Submodule @@ -71,6 +72,7 @@ func NewKeeper( icqk types.InterchainQueryKeeper, icsk types.InterchainStakingKeeper, cmk types.ClaimsManagerKeeper, + emk types.EventManagerKeeper, feeCollectorName string, proofValidationFn utils.ProofOpsFn, selfProofValidationFn utils.SelfProofOpsFn, @@ -95,6 +97,7 @@ func NewKeeper( IcqKeeper: icqk, icsKeeper: icsk, ClaimsManagerKeeper: cmk, + EventManagerKeeper: emk, feeCollectorName: feeCollectorName, PrSubmodules: LoadSubmodules(), ValidateProofOps: proofValidationFn, @@ -159,14 +162,14 @@ func (k *Keeper) UpdateSelfConnectionData(ctx sdk.Context) error { return nil } -func (k *Keeper) GetModuleBalance(ctx sdk.Context) sdkmath.Int { +func (k *Keeper) GetModuleBalance(ctx sdk.Context) sdk.Coin { denom := k.stakingKeeper.BondDenom(ctx) moduleAddress := k.accountKeeper.GetModuleAddress(types.ModuleName) moduleBalance := k.bankKeeper.GetBalance(ctx, moduleAddress, denom) k.Logger(ctx).Info("module account", "address", moduleAddress, "balance", moduleBalance) - return moduleBalance.Amount + return moduleBalance } func LoadSubmodules() map[cmtypes.ClaimType]Submodule { diff --git a/x/participationrewards/keeper/rewards_validatorSelection.go b/x/participationrewards/keeper/rewards_validatorSelection.go index fc202d75b..852d70106 100644 --- a/x/participationrewards/keeper/rewards_validatorSelection.go +++ b/x/participationrewards/keeper/rewards_validatorSelection.go @@ -4,18 +4,23 @@ import ( "errors" "fmt" + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" + "github.com/quicksilver-zone/quicksilver/utils" + "github.com/quicksilver-zone/quicksilver/utils/addressutils" + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" icstypes "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types" "github.com/quicksilver-zone/quicksilver/x/participationrewards/types" ) -// AllocateValidatorSelectionRewards utilizes IBC to query the performance +// QueryValidatorDelegationPerformance utilizes IBC to query the performance // rewards account for each zone to determine validator performance and // corresponding rewards allocations. Each zone's response is dealt with // individually in a callback. -func (k Keeper) AllocateValidatorSelectionRewards(ctx sdk.Context) { +func (k Keeper) QueryValidatorDelegationPerformance(ctx sdk.Context) { k.icsKeeper.IterateZones(ctx, func(_ int64, zone *icstypes.Zone) (stop bool) { if zone.PerformanceAddress != nil { k.Logger(ctx).Info("zones", "chain_id", zone.ChainId, "performance address", zone.PerformanceAddress.Address) @@ -35,6 +40,8 @@ func (k Keeper) AllocateValidatorSelectionRewards(ctx sdk.Context) { ValidatorSelectionRewardsCallbackID, 0, ) + + k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, zone.ChainId, "validator_performance", "", emtypes.EventTypeICQQueryDelegations, emtypes.EventStatusActive, nil, nil) } return false }) @@ -56,14 +63,14 @@ func (k Keeper) getZoneScores( zs := types.ZoneScore{ ZoneID: zone.ChainId, TotalVotingPower: sdk.NewInt(0), - ValidatorScores: make(map[string]*types.Validator), + ValidatorScores: make(map[string]*types.ValidatorScore), } if err := k.CalcDistributionScores(ctx, zone, &zs); err != nil { return nil, err } - if err := k.CalcOverallScores(ctx, zone, delegatorRewards, &zs); err != nil { + if err := k.CalcPerformanceScores(ctx, zone, delegatorRewards, &zs); err != nil { return nil, err } @@ -81,30 +88,15 @@ func (k Keeper) CalcDistributionScores(ctx sdk.Context, zone icstypes.Zone, zs * return fmt.Errorf("zone %v has no validators", zone.ChainId) } - // calculate total voting power - // and determine minVP/maxVP voting power for zone - maxVP := sdk.NewInt(0) - minVP := sdk.NewInt(999999999999999999) + vps := map[string]math.Int{} for _, zoneVal := range zoneValidators { val := zoneVal if val.VotingPower.IsNegative() { - return fmt.Errorf("unexpected negative voting power for %s", val.ValoperAddress) + continue } // compute zone total voting power zs.TotalVotingPower = zs.TotalVotingPower.Add(val.VotingPower) - if _, exists := zs.ValidatorScores[val.ValoperAddress]; !exists { - zs.ValidatorScores[val.ValoperAddress] = &types.Validator{Validator: &val} - } - - // Set maxVP/minVP - if maxVP.LT(val.VotingPower) { - maxVP = val.VotingPower - k.Logger(ctx).Info("new power maxVP", "maxVP", maxVP, "validator", val.ValoperAddress) - } - if minVP.GT(val.VotingPower) { - minVP = val.VotingPower - k.Logger(ctx).Info("new power minVP", "minVP", minVP, "validator", val.ValoperAddress) - } + vps[val.ValoperAddress] = val.VotingPower } k.Logger(ctx).Info("zone voting power", "zone", zone.ChainId, "total voting power", zs.TotalVotingPower) @@ -116,31 +108,22 @@ func (k Keeper) CalcDistributionScores(ctx sdk.Context, zone icstypes.Zone, zs * } // calculate power percentage and normalized distribution scores - maxp := sdk.NewDecFromInt(maxVP).Quo(sdk.NewDecFromInt(zs.TotalVotingPower)) - minp := sdk.NewDecFromInt(minVP).Quo(sdk.NewDecFromInt(zs.TotalVotingPower)) - for _, vs := range zs.ValidatorScores { - // calculate power percentage - vs.PowerPercentage = sdk.NewDecFromInt(vs.VotingPower).Quo(sdk.NewDecFromInt(zs.TotalVotingPower)) - - // calculate normalized distribution score - vs.DistributionScore = sdk.NewDec(1).Sub( - vs.PowerPercentage.Sub(minp).Mul( - sdk.NewDec(1).Quo(maxp), - ), - ) + for _, valoper := range utils.Keys[math.Int](vps) { + vpPercent := sdk.NewDecFromInt(vps[valoper]).Quo(sdk.NewDecFromInt(zs.TotalVotingPower)) + zs.ValidatorScores[valoper] = &types.ValidatorScore{DistributionScore: sdk.NewDec(1).Quo(vpPercent)} k.Logger(ctx).Debug( "validator score", - "validator", vs.ValoperAddress, - "power percentage", vs.PowerPercentage, - "distribution score", vs.DistributionScore, + "validator", valoper, + "power percentage", vpPercent, + "distribution score", zs.ValidatorScores[valoper].DistributionScore, ) } return nil } -// CalcOverallScores calculates the overall validator scores for the given zone +// CalcPerformanceScores calculates he overall validator scores for the given zone // based on the combination of performance score and distribution score. // // The performance score is first calculated based on validator rewards earned @@ -152,7 +135,7 @@ func (k Keeper) CalcDistributionScores(ctx sdk.Context, zone icstypes.Zone, zs * // // On completion a msg is submitted to withdraw the zone performance rewards, // resetting zone performance scoring for the next epoch. -func (k Keeper) CalcOverallScores( +func (k Keeper) CalcPerformanceScores( ctx sdk.Context, zone icstypes.Zone, delegatorRewards distrtypes.QueryDelegationTotalRewardsResponse, @@ -180,8 +163,9 @@ func (k Keeper) CalcOverallScores( "expected", expected, ) + maxScore := sdk.ZeroDec() + msgs := make([]sdk.Msg, 0) - limit := sdk.NewDec(1.0) for _, reward := range rewards { vs, exists := zs.ValidatorScores[reward.ValidatorAddress] if !exists { @@ -189,23 +173,31 @@ func (k Keeper) CalcOverallScores( continue } - vs.PerformanceScore = reward.Reward.AmountOf(zone.BaseDenom).Quo(expected) - if vs.PerformanceScore.GT(limit) { - vs.PerformanceScore = limit + rootScore := reward.Reward.AmountOf(zone.BaseDenom).Quo(expected) + vs.PerformanceScore = rootScore.Mul(rootScore) + if vs.PerformanceScore.GT(maxScore) { + maxScore = vs.PerformanceScore } - k.Logger(ctx).Info("performance score", "validator", vs.ValoperAddress, "performance", vs.PerformanceScore) + } - // calculate and set overall score - vs.Score = vs.DistributionScore.Mul(vs.PerformanceScore) - k.Logger(ctx).Info("overall score", "validator", vs.ValoperAddress, "overall", vs.Score) - if err := k.icsKeeper.SetValidator(ctx, zone.ChainId, *(vs.Validator)); err != nil { - k.Logger(ctx).Error("unable to set score for validator", "validator", vs.ValoperAddress) + for _, reward := range rewards { + vs := zs.ValidatorScores[reward.ValidatorAddress] + vs.PerformanceScore = vs.PerformanceScore.Quo(maxScore) + k.Logger(ctx).Info("overall score", "validator", reward.ValidatorAddress, "distribution", vs.DistributionScore, "performance", vs.PerformanceScore, "total", vs.TotalScore()) + val, found := k.icsKeeper.GetValidator(ctx, zone.ChainId, addressutils.MustValAddressFromBech32(reward.ValidatorAddress, "")) + if !found { + k.Logger(ctx).Error("unable to find validator", "validator", reward.ValidatorAddress) + } else { + val.Score = vs.TotalScore() + if err := k.icsKeeper.SetValidator(ctx, zone.ChainId, val); err != nil { + k.Logger(ctx).Error("unable to set score for validator", "validator", reward.ValidatorAddress) + } } // prepare validator performance withdrawal msg msg := &distrtypes.MsgWithdrawDelegatorReward{ DelegatorAddress: zone.PerformanceAddress.GetAddress(), - ValidatorAddress: vs.ValoperAddress, + ValidatorAddress: reward.ValidatorAddress, } msgs = append(msgs, msg) } @@ -218,9 +210,6 @@ func (k Keeper) CalcOverallScores( } } - // update zone with validator scores - k.icsKeeper.SetZone(ctx, &zone) - return nil } @@ -249,8 +238,8 @@ func (k Keeper) CalcUserValidatorSelectionAllocations( // calc overall user score score := sdk.ZeroDec() if vs, exists := zs.ValidatorScores[intent.ValoperAddress]; exists { - if !vs.Score.IsNil() { - score = intent.Weight.Mul(vs.Score) + if !vs.TotalScore().IsNil() { + score = intent.Weight.Mul(vs.TotalScore()) } } k.Logger(ctx).Info("user score for validator", "user", di.GetDelegator(), "validator", intent.GetValoperAddress(), "score", score) diff --git a/x/participationrewards/keeper/rewards_validatorSelection_test.go b/x/participationrewards/keeper/rewards_validatorSelection_test.go index 02c58be97..a22504ad0 100644 --- a/x/participationrewards/keeper/rewards_validatorSelection_test.go +++ b/x/participationrewards/keeper/rewards_validatorSelection_test.go @@ -21,7 +21,7 @@ func (suite *KeeperTestSuite) TestCalcUserValidatorSelectionAllocations() { tests := []struct { name string malleate func(sdk.Context, *app.Quicksilver) - validatorScores func(sdk.Context, *app.Quicksilver, string) map[string]*types.Validator + validatorScores func(sdk.Context, *app.Quicksilver, string) map[string]*types.ValidatorScore want func(denom string) []types.UserAllocation }{ { @@ -35,7 +35,7 @@ func (suite *KeeperTestSuite) TestCalcUserValidatorSelectionAllocations() { zone.ValidatorSelectionAllocation = 0 appA.InterchainstakingKeeper.SetZone(ctx, &zone) }, - validatorScores: func(context sdk.Context, quicksilver *app.Quicksilver, s string) map[string]*types.Validator { + validatorScores: func(context sdk.Context, quicksilver *app.Quicksilver, s string) map[string]*types.ValidatorScore { return nil }, want: func(denom string) []types.UserAllocation { return []types.UserAllocation{} }, @@ -59,16 +59,14 @@ func (suite *KeeperTestSuite) TestCalcUserValidatorSelectionAllocations() { appA.InterchainstakingKeeper.SetZone(ctx, &zone) }, - validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.Validator { - validatorScores := make(map[string]*types.Validator) + validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.ValidatorScore { + validatorScores := make(map[string]*types.ValidatorScore) validators := appA.InterchainstakingKeeper.GetValidators(ctx, chainId) for i := range validators { validators[i].Score = sdk.NewDec(1) - validatorScores[validators[i].ValoperAddress] = &types.Validator{ - PowerPercentage: sdk.NewDec(1), + validatorScores[validators[i].ValoperAddress] = &types.ValidatorScore{ DistributionScore: sdk.NewDec(1), PerformanceScore: sdk.NewDec(1), - Validator: &validators[i], } } return validatorScores @@ -92,17 +90,15 @@ func (suite *KeeperTestSuite) TestCalcUserValidatorSelectionAllocations() { appA.InterchainstakingKeeper.SetDelegatorIntent(ctx, &zone, icstypes.DelegatorIntent{Delegator: user1.String(), Intents: validatorIntents}, true) appA.InterchainstakingKeeper.SetDelegatorIntent(ctx, &zone, icstypes.DelegatorIntent{Delegator: user2.String(), Intents: validatorIntents}, true) }, - validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.Validator { - validatorScores := make(map[string]*types.Validator) + validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.ValidatorScore { + validatorScores := make(map[string]*types.ValidatorScore) validators := appA.InterchainstakingKeeper.GetValidators(ctx, chainId) for i := range validators { validators[i].Score = sdk.NewDec(1) - validatorScores[validators[i].ValoperAddress] = &types.Validator{ - PowerPercentage: sdk.NewDec(1), + validatorScores[validators[i].ValoperAddress] = &types.ValidatorScore{ DistributionScore: sdk.NewDec(1), PerformanceScore: sdk.NewDec(1), - Validator: &validators[i], } } return validatorScores @@ -138,17 +134,15 @@ func (suite *KeeperTestSuite) TestCalcUserValidatorSelectionAllocations() { appA.InterchainstakingKeeper.SetDelegatorIntent(ctx, &zone, icstypes.DelegatorIntent{Delegator: user1.String(), Intents: validatorIntentsA}, true) appA.InterchainstakingKeeper.SetDelegatorIntent(ctx, &zone, icstypes.DelegatorIntent{Delegator: user2.String(), Intents: validatorIntentsB}, true) }, - validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.Validator { - validatorScores := make(map[string]*types.Validator) + validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.ValidatorScore { + validatorScores := make(map[string]*types.ValidatorScore) validators := appA.InterchainstakingKeeper.GetValidators(ctx, chainId) for i := range validators { validators[i].Score = sdk.NewDec(1) - validatorScores[validators[i].ValoperAddress] = &types.Validator{ - PowerPercentage: sdk.NewDec(1), + validatorScores[validators[i].ValoperAddress] = &types.ValidatorScore{ DistributionScore: sdk.NewDec(1), PerformanceScore: sdk.NewDec(1), - Validator: &validators[i], } } return validatorScores @@ -184,17 +178,15 @@ func (suite *KeeperTestSuite) TestCalcUserValidatorSelectionAllocations() { appA.InterchainstakingKeeper.SetDelegatorIntent(ctx, &zone, icstypes.DelegatorIntent{Delegator: user1.String(), Intents: validatorIntentsA}, true) appA.InterchainstakingKeeper.SetDelegatorIntent(ctx, &zone, icstypes.DelegatorIntent{Delegator: user2.String(), Intents: validatorIntentsB}, true) }, - validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.Validator { - validatorScores := make(map[string]*types.Validator) + validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.ValidatorScore { + validatorScores := make(map[string]*types.ValidatorScore) validators := appA.InterchainstakingKeeper.GetValidators(ctx, chainId) for i := range validators { validators[i].Score = sdk.NewDec(1) - validatorScores[validators[i].ValoperAddress] = &types.Validator{ - PowerPercentage: sdk.NewDec(1), + validatorScores[validators[i].ValoperAddress] = &types.ValidatorScore{ DistributionScore: sdk.NewDec(1), PerformanceScore: sdk.NewDec(1), - Validator: &validators[i], } } return validatorScores @@ -251,7 +243,7 @@ func (suite *KeeperTestSuite) TestCalcDistributionScores() { tests := []struct { name string malleate func(sdk.Context, *app.Quicksilver) - validatorScores func(sdk.Context, *app.Quicksilver, string) map[string]*types.Validator + validatorScores func(sdk.Context, *app.Quicksilver, string) map[string]*types.ValidatorScore verify func(sdk.Context, *app.Quicksilver, types.ZoneScore) wantErr bool }{ @@ -272,7 +264,7 @@ func (suite *KeeperTestSuite) TestCalcDistributionScores() { appA.InterchainstakingKeeper.SetZone(ctx, &zone) }, - validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.Validator { + validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.ValidatorScore { return nil }, verify: func(context sdk.Context, quicksilver *app.Quicksilver, score types.ZoneScore) { @@ -298,17 +290,15 @@ func (suite *KeeperTestSuite) TestCalcDistributionScores() { appA.InterchainstakingKeeper.SetZone(ctx, &zone) }, - validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.Validator { - validatorScores := make(map[string]*types.Validator) + validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.ValidatorScore { + validatorScores := make(map[string]*types.ValidatorScore) validators := appA.InterchainstakingKeeper.GetValidators(ctx, chainId) for i := range validators { validators[i].Score = sdk.NewDec(1) - validatorScores[validators[i].ValoperAddress] = &types.Validator{ - PowerPercentage: sdk.NewDec(1), + validatorScores[validators[i].ValoperAddress] = &types.ValidatorScore{ DistributionScore: sdk.NewDec(1), PerformanceScore: sdk.NewDec(1), - Validator: &validators[i], } } return validatorScores @@ -335,30 +325,24 @@ func (suite *KeeperTestSuite) TestCalcDistributionScores() { appA.InterchainstakingKeeper.SetZone(ctx, &zone) }, - validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.Validator { - validatorScores := make(map[string]*types.Validator) + validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.ValidatorScore { + validatorScores := make(map[string]*types.ValidatorScore) vals := appA.InterchainstakingKeeper.GetValidators(ctx, chainId) (&vals[0]).VotingPower = sdk.NewInt(10) - validatorScores[vals[0].ValoperAddress] = &types.Validator{ - PowerPercentage: sdk.NewDec(1), + validatorScores[vals[0].ValoperAddress] = &types.ValidatorScore{ DistributionScore: sdk.NewDec(1), PerformanceScore: sdk.NewDec(1), - Validator: &vals[0], } (&vals[1]).VotingPower = sdk.NewInt(20) - validatorScores[vals[1].ValoperAddress] = &types.Validator{ - PowerPercentage: sdk.NewDec(1), + validatorScores[vals[1].ValoperAddress] = &types.ValidatorScore{ DistributionScore: sdk.NewDec(1), PerformanceScore: sdk.NewDec(1), - Validator: &vals[1], } (&vals[2]).VotingPower = sdk.NewInt(30) - validatorScores[vals[2].ValoperAddress] = &types.Validator{ - PowerPercentage: sdk.NewDec(1), + validatorScores[vals[2].ValoperAddress] = &types.ValidatorScore{ DistributionScore: sdk.NewDec(1), PerformanceScore: sdk.NewDec(1), - Validator: &vals[2], } return validatorScores }, @@ -367,10 +351,6 @@ func (suite *KeeperTestSuite) TestCalcDistributionScores() { validators := appA.InterchainstakingKeeper.GetValidators(ctx, zs.ZoneID) - suite.Equal(strings.TrimRight(zs.ValidatorScores[validators[0].ValoperAddress].PowerPercentage.String(), "0"), "0.1") - suite.Equal(strings.TrimRight(zs.ValidatorScores[validators[1].ValoperAddress].PowerPercentage.String(), "0"), "0.2") - suite.Equal(strings.TrimRight(zs.ValidatorScores[validators[2].ValoperAddress].PowerPercentage.String(), "0"), "0.3") - suite.Equal(zs.ValidatorScores[validators[0].ValoperAddress].DistributionScore, sdk.NewDec(1)) suite.Equal(strings.TrimRight(zs.ValidatorScores[validators[1].ValoperAddress].DistributionScore.String(), "0"), "0.75") suite.Equal(strings.TrimRight(zs.ValidatorScores[validators[2].ValoperAddress].DistributionScore.String(), "0"), "0.5") @@ -417,7 +397,7 @@ func (suite *KeeperTestSuite) TestCalcOverallScores() { tests := []struct { name string malleate func(sdk.Context, *app.Quicksilver) - validatorScores func(sdk.Context, *app.Quicksilver, string) map[string]*types.Validator + validatorScores func(sdk.Context, *app.Quicksilver, string) map[string]*types.ValidatorScore delegatorRewards func(sdk.Context, *app.Quicksilver, string) distributiontypes.QueryDelegationTotalRewardsResponse verify func(types.ZoneScore, []distributiontypes.DelegationDelegatorReward, []icstypes.Validator) wantErr bool @@ -426,7 +406,7 @@ func (suite *KeeperTestSuite) TestCalcOverallScores() { name: "nil delegation rewards", malleate: func(context sdk.Context, quicksilver *app.Quicksilver) { }, - validatorScores: func(context sdk.Context, quicksilver *app.Quicksilver, s string) map[string]*types.Validator { + validatorScores: func(context sdk.Context, quicksilver *app.Quicksilver, s string) map[string]*types.ValidatorScore { return nil }, delegatorRewards: func(_ sdk.Context, _ *app.Quicksilver, _ string) distributiontypes.QueryDelegationTotalRewardsResponse { @@ -440,7 +420,7 @@ func (suite *KeeperTestSuite) TestCalcOverallScores() { name: "zero total rewards", malleate: func(context sdk.Context, quicksilver *app.Quicksilver) { }, - validatorScores: func(context sdk.Context, quicksilver *app.Quicksilver, s string) map[string]*types.Validator { + validatorScores: func(context sdk.Context, quicksilver *app.Quicksilver, s string) map[string]*types.ValidatorScore { return nil }, delegatorRewards: func(ctx sdk.Context, appA *app.Quicksilver, chainID string) distributiontypes.QueryDelegationTotalRewardsResponse { @@ -463,15 +443,13 @@ func (suite *KeeperTestSuite) TestCalcOverallScores() { appA.InterchainstakingKeeper.SetZone(ctx, &zone) }, - validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.Validator { - validatorScores := make(map[string]*types.Validator) + validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.ValidatorScore { + validatorScores := make(map[string]*types.ValidatorScore) val := appA.InterchainstakingKeeper.GetValidators(ctx, chainId)[1] - validatorScores[val.ValoperAddress] = &types.Validator{ - PowerPercentage: sdk.NewDec(1), + validatorScores[val.ValoperAddress] = &types.ValidatorScore{ DistributionScore: sdk.NewDec(3), PerformanceScore: sdk.NewDec(619), - Validator: &val, } return validatorScores @@ -488,8 +466,8 @@ func (suite *KeeperTestSuite) TestCalcOverallScores() { verify: func(zs types.ZoneScore, delegatorRewards []distributiontypes.DelegationDelegatorReward, validators []icstypes.Validator) { suite.True(zs.ValidatorScores[delegatorRewards[0].ValidatorAddress] == nil) suite.Equal(zs.ValidatorScores[delegatorRewards[1].ValidatorAddress].PerformanceScore, sdk.NewDec(1)) - suite.Equal(zs.ValidatorScores[delegatorRewards[1].ValidatorAddress].Score, sdk.NewDec(3)) - suite.Equal(zs.ValidatorScores[delegatorRewards[1].ValidatorAddress].Score, validators[1].Score) + suite.Equal(zs.ValidatorScores[delegatorRewards[1].ValidatorAddress].TotalScore(), sdk.NewDec(3)) + suite.Equal(zs.ValidatorScores[delegatorRewards[1].ValidatorAddress].TotalScore(), validators[1].Score) }, }, { @@ -503,27 +481,21 @@ func (suite *KeeperTestSuite) TestCalcOverallScores() { appA.InterchainstakingKeeper.SetZone(ctx, &zone) }, - validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.Validator { - validatorScores := make(map[string]*types.Validator) + validatorScores: func(ctx sdk.Context, appA *app.Quicksilver, chainId string) map[string]*types.ValidatorScore { + validatorScores := make(map[string]*types.ValidatorScore) vals := appA.InterchainstakingKeeper.GetValidators(ctx, chainId) - validatorScores[vals[0].ValoperAddress] = &types.Validator{ - PowerPercentage: sdk.NewDec(1), + validatorScores[vals[0].ValoperAddress] = &types.ValidatorScore{ DistributionScore: sdk.NewDec(1), PerformanceScore: sdk.NewDec(1), - Validator: &vals[0], } - validatorScores[vals[1].ValoperAddress] = &types.Validator{ - PowerPercentage: sdk.NewDec(1), + validatorScores[vals[1].ValoperAddress] = &types.ValidatorScore{ DistributionScore: sdk.NewDec(5), PerformanceScore: sdk.NewDec(1), - Validator: &vals[1], } - validatorScores[vals[2].ValoperAddress] = &types.Validator{ - PowerPercentage: sdk.NewDec(1), + validatorScores[vals[2].ValoperAddress] = &types.ValidatorScore{ DistributionScore: sdk.NewDec(7), PerformanceScore: sdk.NewDec(1), - Validator: &vals[2], } return validatorScores }, @@ -538,16 +510,16 @@ func (suite *KeeperTestSuite) TestCalcOverallScores() { }, verify: func(zs types.ZoneScore, delegatorRewards []distributiontypes.DelegationDelegatorReward, validators []icstypes.Validator) { suite.Equal(strings.TrimRight(zs.ValidatorScores[delegatorRewards[0].ValidatorAddress].PerformanceScore.String(), "0"), "0.5") - suite.Equal(strings.TrimRight(zs.ValidatorScores[delegatorRewards[0].ValidatorAddress].Score.String(), "0"), "0.5") - suite.Equal(zs.ValidatorScores[delegatorRewards[0].ValidatorAddress].Score, validators[0].Score) + suite.Equal(strings.TrimRight(zs.ValidatorScores[delegatorRewards[0].ValidatorAddress].TotalScore().String(), "0"), "0.5") + suite.Equal(zs.ValidatorScores[delegatorRewards[0].ValidatorAddress].TotalScore(), validators[0].Score) suite.Equal(zs.ValidatorScores[delegatorRewards[1].ValidatorAddress].PerformanceScore, sdk.NewDec(1)) - suite.Equal(zs.ValidatorScores[delegatorRewards[1].ValidatorAddress].Score, sdk.NewDec(5)) - suite.Equal(zs.ValidatorScores[delegatorRewards[1].ValidatorAddress].Score, validators[1].Score) + suite.Equal(zs.ValidatorScores[delegatorRewards[1].ValidatorAddress].TotalScore(), sdk.NewDec(5)) + suite.Equal(zs.ValidatorScores[delegatorRewards[1].ValidatorAddress].TotalScore(), validators[1].Score) suite.Equal(zs.ValidatorScores[delegatorRewards[2].ValidatorAddress].PerformanceScore, sdk.NewDec(1)) - suite.Equal(zs.ValidatorScores[delegatorRewards[2].ValidatorAddress].Score, sdk.NewDec(7)) - suite.Equal(zs.ValidatorScores[delegatorRewards[2].ValidatorAddress].Score, validators[2].Score) + suite.Equal(zs.ValidatorScores[delegatorRewards[2].ValidatorAddress].TotalScore(), sdk.NewDec(7)) + suite.Equal(zs.ValidatorScores[delegatorRewards[2].ValidatorAddress].TotalScore(), validators[2].Score) }, }, } @@ -581,7 +553,7 @@ func (suite *KeeperTestSuite) TestCalcOverallScores() { delegatorRewards := tt.delegatorRewards(ctx, appA, zone.ChainId) - err := appA.ParticipationRewardsKeeper.CalcOverallScores(ctx, zone, delegatorRewards, &zs) + err := appA.ParticipationRewardsKeeper.CalcPerformanceScores(ctx, zone, delegatorRewards, &zs) suite.Equal(err != nil, tt.wantErr) tt.verify(zs, delegatorRewards.Rewards, appA.InterchainstakingKeeper.GetValidators(ctx, zone.ChainId)) diff --git a/x/participationrewards/keeper/submodule_liquid.go b/x/participationrewards/keeper/submodule_liquid.go index 086012a71..0d96b47f6 100644 --- a/x/participationrewards/keeper/submodule_liquid.go +++ b/x/participationrewards/keeper/submodule_liquid.go @@ -19,8 +19,7 @@ type LiquidTokensModule struct{} var _ Submodule = &LiquidTokensModule{} -func (*LiquidTokensModule) Hooks(_ sdk.Context, _ *Keeper) { -} +func (*LiquidTokensModule) Hooks(_ sdk.Context, _ *Keeper) {} func (*LiquidTokensModule) ValidateClaim(ctx sdk.Context, k *Keeper, msg *types.MsgSubmitClaim) (math.Int, error) { // message diff --git a/x/participationrewards/keeper/submodule_osmosis.go b/x/participationrewards/keeper/submodule_osmosis.go index 987fac777..ba100c2a7 100644 --- a/x/participationrewards/keeper/submodule_osmosis.go +++ b/x/participationrewards/keeper/submodule_osmosis.go @@ -19,6 +19,7 @@ import ( osmolockup "github.com/quicksilver-zone/quicksilver/third-party-chains/osmosis-types/lockup" "github.com/quicksilver-zone/quicksilver/utils" "github.com/quicksilver-zone/quicksilver/utils/addressutils" + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" "github.com/quicksilver-zone/quicksilver/x/participationrewards/types" ) @@ -71,6 +72,19 @@ func (m *OsmosisModule) Hooks(ctx sdk.Context, k *Keeper) { OsmosisPoolUpdateCallbackID, 0, ) // query pool data + + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + "", + fmt.Sprintf("submodule/osmosispool/%d", pool.PoolID), + "", + emtypes.EventTypeICQOsmosisPool, + emtypes.EventStatusActive, + nil, + nil, + ) + return false }) } diff --git a/x/participationrewards/types/allocations.go b/x/participationrewards/types/allocations.go deleted file mode 100644 index 4e6810fcf..000000000 --- a/x/participationrewards/types/allocations.go +++ /dev/null @@ -1,43 +0,0 @@ -package types - -import ( - "fmt" - - "cosmossdk.io/math" - - sdk "github.com/cosmos/cosmos-sdk/types" -) - -type RewardsAllocation struct { - ValidatorSelection math.Int - Holdings math.Int - Lockup math.Int -} - -// GetRewardsAllocations returns an instance of rewardsAllocation with values -// set according to the given moduleBalance and distribution proportions. -func GetRewardsAllocations(moduleBalance math.Int, proportions DistributionProportions) (*RewardsAllocation, error) { - if moduleBalance.IsNil() || moduleBalance.IsZero() { - return nil, ErrNothingToAllocate - } - - if sum := proportions.Total(); !sum.Equal(sdk.OneDec()) { - return nil, fmt.Errorf("%w: got %v", ErrInvalidTotalProportions, sum) - } - - var allocation RewardsAllocation - - // split participation rewards allocations - allocation.ValidatorSelection = sdk.NewDecFromInt(moduleBalance).Mul(proportions.ValidatorSelectionAllocation).TruncateInt() - allocation.Holdings = sdk.NewDecFromInt(moduleBalance).Mul(proportions.HoldingsAllocation).TruncateInt() - allocation.Lockup = sdk.NewDecFromInt(moduleBalance).Mul(proportions.LockupAllocation).TruncateInt() - - // use sum to check total distribution to collect and allocate dust - sum := allocation.Lockup.Add(allocation.ValidatorSelection).Add(allocation.Holdings) - dust := moduleBalance.Sub(sum) - - // Add dust to validator choice allocation (favors decentralization) - allocation.ValidatorSelection = allocation.ValidatorSelection.Add(dust) - - return &allocation, nil -} diff --git a/x/participationrewards/types/allocations_test.go b/x/participationrewards/types/allocations_test.go deleted file mode 100644 index 525a11be0..000000000 --- a/x/participationrewards/types/allocations_test.go +++ /dev/null @@ -1,190 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "cosmossdk.io/math" - - sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/quicksilver-zone/quicksilver/x/participationrewards/types" -) - -func TestGetRewardsAllocations(t *testing.T) { - type args struct { - moduleBalance math.Int - proportions types.DistributionProportions - } - tests := []struct { - name string - args args - want *types.RewardsAllocation - wantErr string - }{ - { - "empty_params", - args{}, - nil, - "balance is zero, nothing to allocate", - }, - { - "invalid_no_balance", - args{ - sdk.NewInt(0), - types.DistributionProportions{ - ValidatorSelectionAllocation: sdk.MustNewDecFromStr("0.34"), - HoldingsAllocation: sdk.MustNewDecFromStr("0.33"), - LockupAllocation: sdk.MustNewDecFromStr("0.33"), - }, - }, - nil, - "balance is zero, nothing to allocate", - }, - { - "invalid_proportions_gt", - args{ - sdk.NewInt(1000000000), - types.DistributionProportions{ - ValidatorSelectionAllocation: sdk.MustNewDecFromStr("0.5"), - HoldingsAllocation: sdk.MustNewDecFromStr("0.5"), - LockupAllocation: sdk.MustNewDecFromStr("0.5"), - }, - }, - nil, - "total distribution proportions must be 1.0: got 1.50", - }, - { - "invalid_proportions_lt", - args{ - sdk.NewInt(1000000000), - types.DistributionProportions{ - ValidatorSelectionAllocation: sdk.MustNewDecFromStr("0.3"), - HoldingsAllocation: sdk.MustNewDecFromStr("0.3"), - LockupAllocation: sdk.MustNewDecFromStr("0.3"), - }, - }, - nil, - "total distribution proportions must be 1.0: got 0.90", - }, - { - "valid", - args{ - sdk.NewInt(1000000000), - types.DistributionProportions{ - ValidatorSelectionAllocation: sdk.MustNewDecFromStr("0.34"), - HoldingsAllocation: sdk.MustNewDecFromStr("0.33"), - LockupAllocation: sdk.MustNewDecFromStr("0.33"), - }, - }, - &types.RewardsAllocation{ - ValidatorSelection: sdk.NewInt(340000000), - Holdings: sdk.NewInt(330000000), - Lockup: sdk.NewInt(330000000), - }, - "", - }, - { - "valid", - args{ - sdk.NewInt(1000000000), - types.DistributionProportions{ - ValidatorSelectionAllocation: sdk.MustNewDecFromStr("0.5"), - HoldingsAllocation: sdk.MustNewDecFromStr("0.25"), - LockupAllocation: sdk.MustNewDecFromStr("0.25"), - }, - }, - &types.RewardsAllocation{ - ValidatorSelection: sdk.NewInt(500000000), - Holdings: sdk.NewInt(250000000), - Lockup: sdk.NewInt(250000000), - }, - "", - }, - { - "valid", - args{ - sdk.NewInt(1000000000), - types.DistributionProportions{ - ValidatorSelectionAllocation: sdk.MustNewDecFromStr("0.6"), - HoldingsAllocation: sdk.MustNewDecFromStr("0.4"), - LockupAllocation: sdk.MustNewDecFromStr("0"), - }, - }, - &types.RewardsAllocation{ - ValidatorSelection: sdk.NewInt(600000000), - Holdings: sdk.NewInt(400000000), - Lockup: sdk.NewInt(0), - }, - "", - }, - { - "valid", - args{ - sdk.NewInt(164133471813), - types.DistributionProportions{ - ValidatorSelectionAllocation: sdk.MustNewDecFromStr("0.34"), - HoldingsAllocation: sdk.MustNewDecFromStr("0.33"), - LockupAllocation: sdk.MustNewDecFromStr("0.33"), - }, - }, - &types.RewardsAllocation{ - ValidatorSelection: sdk.NewInt(55805380417), - Holdings: sdk.NewInt(54164045698), - Lockup: sdk.NewInt(54164045698), - }, - "", - }, - { - "valid", - args{ - sdk.NewInt(164133471813), - types.DistributionProportions{ - ValidatorSelectionAllocation: sdk.MustNewDecFromStr("0.5"), - HoldingsAllocation: sdk.MustNewDecFromStr("0.25"), - LockupAllocation: sdk.MustNewDecFromStr("0.25"), - }, - }, - &types.RewardsAllocation{ - ValidatorSelection: sdk.NewInt(82066735907), - Holdings: sdk.NewInt(41033367953), - Lockup: sdk.NewInt(41033367953), - }, - "", - }, - { - "valid", - args{ - sdk.NewInt(164133471813), - types.DistributionProportions{ - ValidatorSelectionAllocation: sdk.MustNewDecFromStr("0.6"), - HoldingsAllocation: sdk.MustNewDecFromStr("0.4"), - LockupAllocation: sdk.MustNewDecFromStr("0"), - }, - }, - &types.RewardsAllocation{ - ValidatorSelection: sdk.NewInt(98480083088), - Holdings: sdk.NewInt(65653388725), - Lockup: sdk.NewInt(0), - }, - "", - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := types.GetRewardsAllocations(tt.args.moduleBalance, tt.args.proportions) - if tt.wantErr != "" { - require.Error(t, err) - require.Nil(t, got) - require.Contains(t, err.Error(), tt.wantErr) - t.Logf("Error: %v", err) - return - } - - require.NoError(t, err) - require.NotNil(t, got) - require.Equal(t, tt.want, got) - }) - } -} diff --git a/x/participationrewards/types/expected_keepers.go b/x/participationrewards/types/expected_keepers.go index 20eecd187..87520cd2b 100644 --- a/x/participationrewards/types/expected_keepers.go +++ b/x/participationrewards/types/expected_keepers.go @@ -9,6 +9,7 @@ import ( ibctmtypes "github.com/cosmos/ibc-go/v6/modules/light-clients/07-tendermint/types" claimsmanagertypes "github.com/quicksilver-zone/quicksilver/x/claimsmanager/types" + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" interchainquerytypes "github.com/quicksilver-zone/quicksilver/x/interchainquery/types" interchainstakingtypes "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types" ) @@ -75,6 +76,13 @@ type InterchainStakingKeeper interface { GetDelegationsInProcess(ctx sdk.Context, chainID string) sdkmath.Int IterateDelegatorIntents(ctx sdk.Context, zone *interchainstakingtypes.Zone, snapshot bool, fn func(index int64, intent interchainstakingtypes.DelegatorIntent) (stop bool)) GetValidators(ctx sdk.Context, chainID string) []interchainstakingtypes.Validator + GetValidatorsAsMap(ctx sdk.Context, chainID string) map[string]interchainstakingtypes.Validator SetValidator(ctx sdk.Context, chainID string, val interchainstakingtypes.Validator) error GetLocalAddressMap(ctx sdk.Context, remoteAddress sdk.AccAddress, chainID string) (sdk.AccAddress, bool) + GetValidator(ctx sdk.Context, chainID string, address []byte) (interchainstakingtypes.Validator, bool) +} + +type EventManagerKeeper interface { + AddEvent(ctx sdk.Context, module, chainID, identifier, callback string, eventType, status int32, condtion emtypes.ConditionI, payload []byte) + MarkCompleted(ctx sdk.Context, module string, chainID string, identifier string) } diff --git a/x/participationrewards/types/keys.go b/x/participationrewards/types/keys.go index 7045280b5..5a2a16e83 100644 --- a/x/participationrewards/types/keys.go +++ b/x/participationrewards/types/keys.go @@ -24,7 +24,12 @@ const ( ProofTypeLPFarm = "lpfarm" ) -var KeyPrefixProtocolData = []byte{0x00} +var ( + KeyPrefixProtocolData = []byte{0x00} + KeyPrefixHoldingAllocation = []byte{0x01} + KeyPrefixValidatorAllocation = []byte{0x02} + KeyPrefixValues = []byte{0x03} +) func GetProtocolDataKey(pdType ProtocolDataType, key []byte) []byte { if pdType < 0 { diff --git a/x/participationrewards/types/participationrewards.go b/x/participationrewards/types/participationrewards.go index c23b67d52..26c4bae50 100644 --- a/x/participationrewards/types/participationrewards.go +++ b/x/participationrewards/types/participationrewards.go @@ -9,8 +9,6 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" - - icstypes "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types" ) const ( @@ -135,18 +133,19 @@ type UserAllocation struct { type ZoneScore struct { ZoneID string // chainID TotalVotingPower math.Int - ValidatorScores map[string]*Validator + ValidatorScores map[string]*ValidatorScore } -// Validator is an internal struct to track transient state for the calculation -// of zone scores. It contains all relevant Validator scoring metrics with a -// pointer reference to the actual Validator (embedded). -type Validator struct { - PowerPercentage sdk.Dec +// ValidatorScore is an internal struct to track transient state for the calculation +// of zone scores. It contains all relevant ValidatorScore scoring metrics with a +// pointer reference to the actual ValidatorScore (embedded). +type ValidatorScore struct { PerformanceScore sdk.Dec DistributionScore sdk.Dec +} - *icstypes.Validator +func (v *ValidatorScore) TotalScore() sdk.Dec { + return v.PerformanceScore.Add(v.DistributionScore) } // UserScore is an internal struct to track transient state for rewards From 5b8762eedbadfd393c1d06af90de4572cc1227e5 Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Wed, 24 Apr 2024 23:24:32 +0100 Subject: [PATCH 10/19] finish participation rewards integration with em --- x/eventmanager/types/keys.go | 34 ++++++----- x/participationrewards/keeper/callbacks.go | 15 +++++ .../keeper/submodule_umee.go | 61 ++++++++++++++++++- 3 files changed, 93 insertions(+), 17 deletions(-) diff --git a/x/eventmanager/types/keys.go b/x/eventmanager/types/keys.go index 405f428a3..19e0e58d1 100644 --- a/x/eventmanager/types/keys.go +++ b/x/eventmanager/types/keys.go @@ -19,21 +19,25 @@ const ( EventStatusActive = int32(1) EventStatusPending = int32(2) - EventTypeUnspecified = int32(0x00) - EventTypeICQQueryRewards = int32(0x01) - EventTypeICQQueryDelegations = int32(0x02) - EventTypeICQQueryDelegation = int32(0x03) - EventTypeICQAccountBalances = int32(0x04) - EventTypeICQAccountBalance = int32(0x05) - EventTypeICAWithdrawRewards = int32(0x06) - EventTypeICADelegate = int32(0x07) - EventTypeICAUnbond = int32(0x08) - EventTypeICQGetLatestBlock = int32(0x09) - EventTypeICQOsmosisPool = int32(0x0a) - EventTypeSubmodules = int32(0x0b) - EventTypeCalculateTvls = int32(0x0c) - EventTypeDistributeRewards = int32(0x0d) - + EventTypeUnspecified = int32(0x00) + EventTypeICQQueryRewards = int32(0x01) + EventTypeICQQueryDelegations = int32(0x02) + EventTypeICQQueryDelegation = int32(0x03) + EventTypeICQAccountBalances = int32(0x04) + EventTypeICQAccountBalance = int32(0x05) + EventTypeICAWithdrawRewards = int32(0x06) + EventTypeICADelegate = int32(0x07) + EventTypeICAUnbond = int32(0x08) + EventTypeICQGetLatestBlock = int32(0x09) + EventTypeICQOsmosisPool = int32(0x0a) + EventTypeSubmodules = int32(0x0b) + EventTypeCalculateTvls = int32(0x0c) + EventTypeDistributeRewards = int32(0x0d) + EventTypeICQUmeeUTokenSupply = int32(0x0e) + EventTypeICQUmeeInterestScalar = int32(0x0f) + EventTypeICQUmeeLeverageBalance = int32(0x10) + EventTypeICQUmeeReserves = int32(0x11) + EventTypeICQUmeeTotalBorrows = int32(0x12) FieldEventType = "eventtype" FieldModule = "module" diff --git a/x/participationrewards/keeper/callbacks.go b/x/participationrewards/keeper/callbacks.go index 59bf4b1c0..f9e754f6e 100644 --- a/x/participationrewards/keeper/callbacks.go +++ b/x/participationrewards/keeper/callbacks.go @@ -211,6 +211,8 @@ func UmeeReservesUpdateCallback(ctx sdk.Context, k *Keeper, response []byte, que } denom := umeetypes.DenomFromKey(query.Request, umeetypes.KeyPrefixReserveAmount) + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, "", fmt.Sprintf("submodule/umeereserves/%s", denom)) + data, reserves, err := GetAndUnmarshalProtocolData[*types.UmeeReservesProtocolData](ctx, k, denom, types.ProtocolDataTypeUmeeReserves) if err != nil { return err @@ -241,6 +243,8 @@ func UmeeTotalBorrowsUpdateCallback(ctx sdk.Context, k *Keeper, response []byte, } denom := umeetypes.DenomFromKey(query.Request, umeetypes.KeyPrefixAdjustedTotalBorrow) + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, "", fmt.Sprintf("submodule/umeetotalborrows/%s", denom)) + data, borrows, err := GetAndUnmarshalProtocolData[*types.UmeeTotalBorrowsProtocolData](ctx, k, denom, types.ProtocolDataTypeUmeeTotalBorrows) if err != nil { return err @@ -271,6 +275,8 @@ func UmeeInterestScalarUpdateCallback(ctx sdk.Context, k *Keeper, response []byt } denom := umeetypes.DenomFromKey(query.Request, umeetypes.KeyPrefixInterestScalar) + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, "", fmt.Sprintf("submodule/umeeinterestscalar/%s", denom)) + data, interest, err := GetAndUnmarshalProtocolData[*types.UmeeInterestScalarProtocolData](ctx, k, denom, types.ProtocolDataTypeUmeeInterestScalar) if err != nil { return err @@ -301,6 +307,8 @@ func UmeeUTokenSupplyUpdateCallback(ctx sdk.Context, k *Keeper, response []byte, } denom := umeetypes.DenomFromKey(query.Request, umeetypes.KeyPrefixUtokenSupply) + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, "", fmt.Sprintf("submodule/umeeutokensupply/%s", denom)) + data, supply, err := GetAndUnmarshalProtocolData[*types.UmeeUTokenSupplyProtocolData](ctx, k, denom, types.ProtocolDataTypeUmeeUTokenSupply) if err != nil { return err @@ -331,6 +339,8 @@ func UmeeLeverageModuleBalanceUpdateCallback(ctx sdk.Context, k *Keeper, respons return err } + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, "", fmt.Sprintf("submodule/umeeleveragebalance/%s", denom)) + balanceCoin, err := bankkeeper.UnmarshalBalanceCompat(k.cdc, response, denom) if err != nil { return err @@ -357,6 +367,11 @@ func UmeeLeverageModuleBalanceUpdateCallback(ctx sdk.Context, k *Keeper, respons // SetEpochBlockCallback records the block height of the registered zone at the epoch boundary. func SetEpochBlockCallback(ctx sdk.Context, k *Keeper, args []byte, query icqtypes.Query) error { + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, query.ChainId, "get_epoch_height") + data, ok := k.GetProtocolData(ctx, types.ProtocolDataTypeConnection, query.ChainId) + if !ok { + return fmt.Errorf("unable to find protocol data for connection/%s", query.ChainId) + } k.Logger(ctx).Debug("epoch callback called") data, connectionData, err := GetAndUnmarshalProtocolData[*types.ConnectionProtocolData](ctx, k, query.ChainId, types.ProtocolDataTypeConnection) if err != nil { diff --git a/x/participationrewards/keeper/submodule_umee.go b/x/participationrewards/keeper/submodule_umee.go index 9f3cf9868..844137db3 100644 --- a/x/participationrewards/keeper/submodule_umee.go +++ b/x/participationrewards/keeper/submodule_umee.go @@ -17,6 +17,7 @@ import ( "github.com/quicksilver-zone/quicksilver/utils" "github.com/quicksilver-zone/quicksilver/utils/addressutils" cmtypes "github.com/quicksilver-zone/quicksilver/x/claimsmanager/types" + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" icstypes "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types" "github.com/quicksilver-zone/quicksilver/x/participationrewards/types" ) @@ -71,8 +72,21 @@ func (UmeeModule) Hooks(ctx sdk.Context, k *Keeper) { UmeeReservesUpdateCallbackID, 0, ) // query reserve data + + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + "", + fmt.Sprintf("submodule/umeereserves/%s", reserves.Denom), + "", + emtypes.EventTypeICQUmeeReserves, + emtypes.EventStatusActive, + nil, + nil, + ) return false }) + // umee-types interest scalar update k.IteratePrefixedProtocolDatas(ctx, types.GetPrefixProtocolDataKey(types.ProtocolDataTypeUmeeInterestScalar), func(idx int64, _ []byte, data types.ProtocolData) bool { iinterest, err := types.UnmarshalProtocolData(types.ProtocolDataTypeUmeeInterestScalar, data.Data) @@ -93,7 +107,17 @@ func (UmeeModule) Hooks(ctx sdk.Context, k *Keeper) { UmeeInterestScalarUpdateCallbackID, 0, ) // query interest data - + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + "", + fmt.Sprintf("submodule/umeeinterestscalar/%s", interest.Denom), + "", + emtypes.EventTypeICQUmeeInterestScalar, + emtypes.EventStatusActive, + nil, + nil, + ) return false }) // umee-types utoken supply update @@ -116,6 +140,17 @@ func (UmeeModule) Hooks(ctx sdk.Context, k *Keeper) { UmeeUTokenSupplyUpdateCallbackID, 0, ) // query utoken supply + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + "", + fmt.Sprintf("submodule/umeeutokensupply/%s", supply.Denom), + "", + emtypes.EventTypeICQUmeeUTokenSupply, + emtypes.EventStatusActive, + nil, + nil, + ) return false }) @@ -142,6 +177,18 @@ func (UmeeModule) Hooks(ctx sdk.Context, k *Keeper) { 0, ) // query leverage module balance + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + "", + fmt.Sprintf("submodule/umeeleveragebalance/%s", balance.Denom), + "", + emtypes.EventTypeICQUmeeLeverageBalance, + emtypes.EventStatusActive, + nil, + nil, + ) + return false }) // umee-types total borrowed update @@ -164,7 +211,17 @@ func (UmeeModule) Hooks(ctx sdk.Context, k *Keeper) { UmeeTotalBorrowsUpdateCallbackID, 0, ) // query leverage module balance - + k.EventManagerKeeper.AddEvent( + ctx, + types.ModuleName, + "", + fmt.Sprintf("submodule/umeetotalborrows/%s", borrows.Denom), + "", + emtypes.EventTypeICQUmeeTotalBorrows, + emtypes.EventStatusActive, + nil, + nil, + ) return false }) } From d42ef24d6d03a8c8c2eb3f80ba45316dfc711b7a Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Wed, 1 May 2024 19:25:15 +0100 Subject: [PATCH 11/19] fix b0rked merge --- app/keepers/keepers.go | 1 + 1 file changed, 1 insertion(+) diff --git a/app/keepers/keepers.go b/app/keepers/keepers.go index d5c9b9e0e..c3b58a382 100644 --- a/app/keepers/keepers.go +++ b/app/keepers/keepers.go @@ -433,6 +433,7 @@ func (appKeepers *AppKeepers) InitKeepers( if err := appKeepers.EventManagerKeeper.SetCallbackHandler(participationrewardstypes.ModuleName, appKeepers.ParticipationRewardsKeeper.EventCallbackHandler()); err != nil { panic(err) } + // Quicksilver Keepers appKeepers.EpochsKeeper = epochskeeper.NewKeeper(appCodec, appKeepers.keys[epochstypes.StoreKey]) appKeepers.ParticipationRewardsKeeper.SetEpochsKeeper(appKeepers.EpochsKeeper) From de1d99328b49ff7098889ff69ef376d10f6fab6b Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Wed, 1 May 2024 19:25:35 +0100 Subject: [PATCH 12/19] fix ibc version; fix tests --- x/eventmanager/keeper/events_test.go | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/x/eventmanager/keeper/events_test.go b/x/eventmanager/keeper/events_test.go index 1151a4d01..c12b248f6 100644 --- a/x/eventmanager/keeper/events_test.go +++ b/x/eventmanager/keeper/events_test.go @@ -73,11 +73,13 @@ func (suite *KeeperTestSuite) TestEventLifecycle() { suite.NoError(app.EventManagerKeeper.SetCallbackHandler(types.ModuleName, callbackHandler)) + preEvents := len(app.EventManagerKeeper.AllEvents(ctx)) + app.EventManagerKeeper.AddEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test", "testCallback", types.EventTypeICADelegate, types.EventStatusPending, nil, nil) events := app.EventManagerKeeper.AllEvents(ctx) - suite.Equal(1, len(events)) + suite.Equal(preEvents+1, len(events)) GlobalVar = 0 @@ -94,7 +96,7 @@ func (suite *KeeperTestSuite) TestEventLifecycle() { events = app.EventManagerKeeper.AllEvents(ctx) - suite.Equal(0, len(events)) + suite.Equal(preEvents, len(events)) } func (suite *KeeperTestSuite) TestEventLifecycleWithCondition() { @@ -105,6 +107,8 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition() { suite.NoError(app.EventManagerKeeper.SetCallbackHandler(types.ModuleName, callbackHandler)) + preEvents := len(app.EventManagerKeeper.AllEvents(ctx)) + condition, err := types.NewConditionAll(ctx, []*types.FieldValue{ {Field: types.FieldModule, Value: types.ModuleName, Operator: types.FieldOperator_EQUAL, Negate: false}, {Field: types.FieldEventStatus, Value: fmt.Sprintf("%d", types.EventStatusActive), Operator: types.FieldOperator_EQUAL, Negate: false}, @@ -117,18 +121,18 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition() { events := app.EventManagerKeeper.AllEvents(ctx) - suite.Equal(2, len(events)) + suite.Equal(preEvents+2, len(events)) GlobalVar = 0 - // martCompleted doesn't require an explicit callback + // markCompleted doesn't require an explicit callback app.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, suite.chainB.ChainID, "test1") event, found := app.EventManagerKeeper.GetEvent(ctx, types.ModuleName, suite.chainB.ChainID, "test") events = app.EventManagerKeeper.AllEvents(ctx) - suite.Equal(1, len(events)) + suite.Equal(preEvents+1, len(events)) suite.True(found) suite.Equal(12345, GlobalVar) @@ -139,7 +143,7 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition() { events = app.EventManagerKeeper.AllEvents(ctx) - suite.Equal(0, len(events)) + suite.Equal(preEvents, len(events)) } func (suite *KeeperTestSuite) TestEventLifecycleWithCondition2() { @@ -150,6 +154,8 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition2() { suite.NoError(app.EventManagerKeeper.SetCallbackHandler(types.ModuleName, callbackHandler)) + preEvents := len(app.EventManagerKeeper.AllEvents(ctx)) + condition1, err := types.NewConditionAll(ctx, []*types.FieldValue{ {Field: types.FieldModule, Value: types.ModuleName, Operator: types.FieldOperator_EQUAL, Negate: false}, {Field: types.FieldEventType, Value: fmt.Sprintf("%d", types.EventTypeICAUnbond), Operator: types.FieldOperator_EQUAL, Negate: false}, @@ -172,7 +178,7 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition2() { events := app.EventManagerKeeper.AllEvents(ctx) fmt.Println(events) - suite.Equal(3, len(events)) + suite.Equal(preEvents+3, len(events)) GlobalVar = 0 @@ -184,7 +190,7 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition2() { events = app.EventManagerKeeper.AllEvents(ctx) - suite.Equal(2, len(events)) + suite.Equal(preEvents+2, len(events)) suite.Equal(1, GlobalVar) @@ -196,11 +202,11 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition2() { events = app.EventManagerKeeper.AllEvents(ctx) - suite.Equal(1, len(events)) + suite.Equal(preEvents+1, len(events)) app.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, suite.chainB.ChainID, "test2") events = app.EventManagerKeeper.AllEvents(ctx) - suite.Equal(0, len(events)) + suite.Equal(preEvents, len(events)) } From 051b383e2e3a70b41e403c466e5386c41d11f364 Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Wed, 8 May 2024 14:47:17 +0100 Subject: [PATCH 13/19] fixy fixy --- x/eventmanager/keeper/events_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/x/eventmanager/keeper/events_test.go b/x/eventmanager/keeper/events_test.go index c12b248f6..ce8ad639d 100644 --- a/x/eventmanager/keeper/events_test.go +++ b/x/eventmanager/keeper/events_test.go @@ -177,7 +177,6 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition2() { events := app.EventManagerKeeper.AllEvents(ctx) - fmt.Println(events) suite.Equal(preEvents+3, len(events)) GlobalVar = 0 From 8042dbb6afe47bebff2e8378aa5356f7b3dbf6d8 Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Mon, 13 May 2024 19:37:02 +0100 Subject: [PATCH 14/19] fix some tests WIP --- x/eventmanager/keeper/events.go | 17 ++- x/interchainstaking/keeper/callbacks_test.go | 106 ++++++++++-------- .../keeper/ibc_packet_handlers_test.go | 29 +++-- 3 files changed, 93 insertions(+), 59 deletions(-) diff --git a/x/eventmanager/keeper/events.go b/x/eventmanager/keeper/events.go index 958ed39ca..458777fc4 100644 --- a/x/eventmanager/keeper/events.go +++ b/x/eventmanager/keeper/events.go @@ -28,6 +28,17 @@ func (k Keeper) GetEvent(ctx sdk.Context, module, chainID, id string) (types.Eve return event, true } +func (k Keeper) GetEvents(ctx sdk.Context, module, chainID, prefix string) ([]types.Event, int) { + events := make([]types.Event, 0) + + k.IteratePrefixedEvents(ctx, []byte(module+chainID+prefix), func(index int64, event types.Event) (stop bool) { + events = append(events, event) + return false + }) + + return events, len(events) +} + // SetEvent set event. func (k Keeper) SetEvent(ctx sdk.Context, event types.Event) { key := GenerateEventKey(event.Module, event.ChainId, event.Identifier) @@ -71,12 +82,12 @@ func (k Keeper) IterateModuleChainEvents(ctx sdk.Context, module string, chainID // AllEvents returns every eventInfo in the store. func (k Keeper) AllEvents(ctx sdk.Context) []types.Event { - queries := []types.Event{} + events := []types.Event{} k.IteratePrefixedEvents(ctx, nil, func(_ int64, eventInfo types.Event) (stop bool) { - queries = append(queries, eventInfo) + events = append(events, eventInfo) return false }) - return queries + return events } func (k Keeper) MarkCompleted(ctx sdk.Context, module string, chainID string, identifier string) { diff --git a/x/interchainstaking/keeper/callbacks_test.go b/x/interchainstaking/keeper/callbacks_test.go index b1f340122..ef2b4f60a 100644 --- a/x/interchainstaking/keeper/callbacks_test.go +++ b/x/interchainstaking/keeper/callbacks_test.go @@ -2504,60 +2504,52 @@ func (suite *KeeperTestSuite) TestDepositLsmTxCallbackFailOnNonMatchingValidator func (suite *KeeperTestSuite) TestDelegationAccountBalancesCallback() { tcs := []struct { - Name string - PreviousBalance sdk.Coins - IncomingBalance sdk.Coins - ExpectedQueryCount int - ExpectedWaitgroup uint32 + Name string + PreviousBalance sdk.Coins + IncomingBalance sdk.Coins + ExpectedCount int }{ { - Name: "initial nil, incoming uqck", - PreviousBalance: sdk.NewCoins(), - IncomingBalance: sdk.NewCoins(sdk.NewCoin("uqck", sdk.NewInt(1))), - ExpectedQueryCount: 1, // uqck - ExpectedWaitgroup: 1, + Name: "initial nil, incoming uqck", + PreviousBalance: sdk.NewCoins(), + IncomingBalance: sdk.NewCoins(sdk.NewCoin("uqck", sdk.NewInt(1))), + ExpectedCount: 1, // uqck }, { - Name: "initial uqck, incoming uqck", - PreviousBalance: sdk.NewCoins(sdk.NewCoin("uqck", sdk.NewInt(1))), - IncomingBalance: sdk.NewCoins(sdk.NewCoin("uqck", sdk.NewInt(1))), - ExpectedQueryCount: 1, // uqck - ExpectedWaitgroup: 1, + Name: "initial uqck, incoming uqck", + PreviousBalance: sdk.NewCoins(sdk.NewCoin("uqck", sdk.NewInt(1))), + IncomingBalance: sdk.NewCoins(sdk.NewCoin("uqck", sdk.NewInt(1))), + ExpectedCount: 1, // uqck }, { - Name: "initial uqck, incoming lsm", - PreviousBalance: sdk.NewCoins(sdk.NewCoin("uqck", sdk.NewInt(1))), - IncomingBalance: sdk.NewCoins(sdk.NewCoin(addressutils.GenerateAddressForTestWithPrefix("cosmosvaloper")+"/1", sdk.NewInt(1))), - ExpectedQueryCount: 2, // uqck - ExpectedWaitgroup: 2, + Name: "initial uqck, incoming lsm", + PreviousBalance: sdk.NewCoins(sdk.NewCoin("uqck", sdk.NewInt(1))), + IncomingBalance: sdk.NewCoins(sdk.NewCoin(addressutils.GenerateAddressForTestWithPrefix("cosmosvaloper")+"/1", sdk.NewInt(1))), + ExpectedCount: 2, // uqck + lsm share }, { - Name: "initial uqck, incoming lsm + qck", - PreviousBalance: sdk.NewCoins(sdk.NewCoin("uqck", sdk.NewInt(1))), - IncomingBalance: sdk.NewCoins(sdk.NewCoin(addressutils.GenerateAddressForTestWithPrefix("cosmosvaloper")+"/1", sdk.NewInt(1)), sdk.NewCoin("uqck", sdk.NewInt(1))), - ExpectedQueryCount: 2, // uqck - ExpectedWaitgroup: 2, + Name: "initial uqck, incoming lsm + qck", + PreviousBalance: sdk.NewCoins(sdk.NewCoin("uqck", sdk.NewInt(1))), + IncomingBalance: sdk.NewCoins(sdk.NewCoin(addressutils.GenerateAddressForTestWithPrefix("cosmosvaloper")+"/1", sdk.NewInt(1)), sdk.NewCoin("uqck", sdk.NewInt(1))), + ExpectedCount: 2, // uqck + lsm share }, { - Name: "initial lsm, incoming uqck", - PreviousBalance: sdk.NewCoins(sdk.NewCoin(addressutils.GenerateAddressForTestWithPrefix("cosmosvaloper")+"/1", sdk.NewInt(1))), - IncomingBalance: sdk.NewCoins(sdk.NewCoin("uqck", sdk.NewInt(1))), - ExpectedQueryCount: 2, // uqck - ExpectedWaitgroup: 2, + Name: "initial lsm, incoming uqck", + PreviousBalance: sdk.NewCoins(sdk.NewCoin(addressutils.GenerateAddressForTestWithPrefix("cosmosvaloper")+"/1", sdk.NewInt(1))), + IncomingBalance: sdk.NewCoins(sdk.NewCoin("uqck", sdk.NewInt(1))), + ExpectedCount: 2, // uqck + lsm share }, { - Name: "initial uqck, incoming nil", - PreviousBalance: sdk.NewCoins(sdk.NewCoin("uqck", sdk.NewInt(1))), - IncomingBalance: sdk.NewCoins(), - ExpectedQueryCount: 1, // uqck - ExpectedWaitgroup: 1, + Name: "initial uqck, incoming nil", + PreviousBalance: sdk.NewCoins(sdk.NewCoin("uqck", sdk.NewInt(1))), + IncomingBalance: sdk.NewCoins(), + ExpectedCount: 1, // uqck }, { - Name: "initial nil, incoming nil", - PreviousBalance: sdk.NewCoins(), - IncomingBalance: sdk.NewCoins(), - ExpectedQueryCount: 0, // uqck - ExpectedWaitgroup: 0, + Name: "initial nil, incoming nil", + PreviousBalance: sdk.NewCoins(), + IncomingBalance: sdk.NewCoins(), + ExpectedCount: 0, }, } @@ -2588,8 +2580,9 @@ func (suite *KeeperTestSuite) TestDelegationAccountBalancesCallback() { suite.Require().NoError(err) // refetch zone - zone, _ = app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) - suite.Require().Equal(t.ExpectedWaitgroup, zone.GetWithdrawalWaitgroup()) + + _, count := app.EventManagerKeeper.GetEvents(ctx, icstypes.ModuleName, suite.chainB.ChainID, "query_delegationaccountbalance_epoch/") + suite.Equal(t.ExpectedCount, count) _, addr, err := bech32.DecodeAndConvert(zone.DelegationAddress.Address) suite.Require().NoError(err) @@ -2713,7 +2706,16 @@ func (suite *KeeperTestSuite) TestDelegationAccountBalanceCallback() { ctx = suite.chainA.GetContext() zone, _ = app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) - suite.Equal(uint32(5), zone.GetWithdrawalWaitgroup()) // initial 2 is reduced to 1, but incremented by 4 (4x delegation messages) == 5 + + _, found := app.EventManagerKeeper.GetEvent(ctx, icstypes.ModuleName, zone.ChainId, "query_delegationaccountbalance_epoch/uatom") + + suite.False(found) + + for _, valoperAddress := range app.InterchainstakingKeeper.GetValidatorAddresses(ctx, zone.ChainId) { + _, count := app.EventManagerKeeper.GetEvents(ctx, icstypes.ModuleName, zone.ChainId, fmt.Sprintf("delegation/%s", valoperAddress)) + suite.Equal(1, count) + } + suite.Equal(sdk.NewInt(500_000_000), zone.DelegationAddress.Balance.AmountOf("uatom")) }) } @@ -2747,7 +2749,14 @@ func (suite *KeeperTestSuite) TestDelegationAccountBalanceCallbackLSM() { ctx = suite.chainA.GetContext() zone, _ = app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) - suite.Equal(uint32(2), zone.GetWithdrawalWaitgroup()) // initial 2 is reduced to 1, but incremented by 1 (1x redeem token messages) == 2 + + _, found := app.EventManagerKeeper.GetEvent(ctx, icstypes.ModuleName, zone.ChainId, "query_delegationaccountbalance_epoch/uatom") + + suite.False(found) + + _, count := app.EventManagerKeeper.GetEvents(ctx, icstypes.ModuleName, zone.ChainId, fmt.Sprintf("delegation/%s", valOper)) + suite.Equal(1, count) + suite.Equal(sdk.NewInt(500), zone.DelegationAddress.Balance.AmountOf("uatom")) suite.Equal(sdk.NewInt(10), zone.DelegationAddress.Balance.AmountOf(denom)) }) @@ -2785,7 +2794,14 @@ func (suite *KeeperTestSuite) TestDelegationAccountBalanceCallbackLSMBadZone() { ctx = suite.chainA.GetContext() zone, _ = app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) - suite.Equal(uint32(1), zone.GetWithdrawalWaitgroup()) // initial 2 is reduced to 1, and not incremented (no wg increment for sendToWithdrawal) + + _, found := app.EventManagerKeeper.GetEvent(ctx, icstypes.ModuleName, zone.ChainId, "query_delegationaccountbalance_epoch/uatom") + + suite.False(found) + + _, count := app.EventManagerKeeper.GetEvents(ctx, icstypes.ModuleName, zone.ChainId, fmt.Sprintf("delegation/%s", valOper)) + suite.Equal(0, count) + suite.Equal(sdk.NewInt(500), zone.DelegationAddress.Balance.AmountOf("uatom")) suite.Equal(sdk.NewInt(10), zone.DelegationAddress.Balance.AmountOf(denom)) suite.Equal(1, len(txk.Txs)) diff --git a/x/interchainstaking/keeper/ibc_packet_handlers_test.go b/x/interchainstaking/keeper/ibc_packet_handlers_test.go index 26bf776e9..9fe24289b 100644 --- a/x/interchainstaking/keeper/ibc_packet_handlers_test.go +++ b/x/interchainstaking/keeper/ibc_packet_handlers_test.go @@ -2,6 +2,7 @@ package keeper_test import ( "context" + "crypto/sha256" "errors" "fmt" "testing" @@ -31,6 +32,7 @@ import ( "github.com/quicksilver-zone/quicksilver/utils/addressutils" "github.com/quicksilver-zone/quicksilver/utils/randomutils" cmtypes "github.com/quicksilver-zone/quicksilver/x/claimsmanager/types" + emtypes "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types" lsmstakingtypes "github.com/quicksilver-zone/quicksilver/x/lsmtypes" ) @@ -4824,13 +4826,15 @@ func (suite *KeeperTestSuite) TestHandleFailedDelegate_Batch_OK() { vals := app.InterchainstakingKeeper.GetValidatorAddresses(ctx, suite.chainB.ChainID) msg := stakingtypes.MsgDelegate{DelegatorAddress: zone.DelegationAddress.Address, ValidatorAddress: vals[0], Amount: sdk.NewCoin("uatom", sdk.NewInt(100))} + hash := sha256.Sum256(msg.GetSignBytes()) + app.EventManagerKeeper.AddEvent(ctx, types.ModuleName, suite.chainB.ChainID, fmt.Sprintf("delegation/%s/%x", msg.ValidatorAddress, hash), "", emtypes.EventTypeICADelegate, emtypes.EventStatusActive, nil, nil) + var msgMsg sdk.Msg = &msg err := app.InterchainstakingKeeper.HandleFailedDelegate(ctx, msgMsg, "batch/12345678") suite.NoError(err) - zone, found = app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) - suite.True(found) - suite.Equal(uint32(99), zone.GetWithdrawalWaitgroup()) + _, count := app.EventManagerKeeper.GetEvents(ctx, types.ModuleName, suite.chainB.ChainID, fmt.Sprintf("delegation/%s/%x", msg.ValidatorAddress, hash)) + suite.Equal(0, count) } func (suite *KeeperTestSuite) TestHandleFailedDelegate_PerfAddress_OK() { @@ -4845,14 +4849,16 @@ func (suite *KeeperTestSuite) TestHandleFailedDelegate_PerfAddress_OK() { vals := app.InterchainstakingKeeper.GetValidatorAddresses(ctx, suite.chainB.ChainID) msg := stakingtypes.MsgDelegate{DelegatorAddress: zone.PerformanceAddress.Address, ValidatorAddress: vals[0], Amount: sdk.NewCoin("uatom", sdk.NewInt(100))} + + hash := sha256.Sum256(msg.GetSignBytes()) + app.EventManagerKeeper.AddEvent(ctx, types.ModuleName, suite.chainB.ChainID, fmt.Sprintf("delegation/%s/%x", msg.ValidatorAddress, hash), "", emtypes.EventTypeICADelegate, emtypes.EventStatusActive, nil, nil) + var msgMsg sdk.Msg = &msg err := app.InterchainstakingKeeper.HandleFailedDelegate(ctx, msgMsg, "batch/12345678") suite.NoError(err) - zone, found = app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) - suite.True(found) - // delegator was perf address, no change in waitgroup - suite.Equal(uint32(100), zone.GetWithdrawalWaitgroup()) + _, count := app.EventManagerKeeper.GetEvents(ctx, types.ModuleName, suite.chainB.ChainID, fmt.Sprintf("delegation/%s/%x", msg.ValidatorAddress, hash)) + suite.Equal(1, count) // performance delegation callback does not delete event (no event would be created in the first place) } func (suite *KeeperTestSuite) TestHandleFailedDelegate_NotBatch_OK() { @@ -4867,14 +4873,15 @@ func (suite *KeeperTestSuite) TestHandleFailedDelegate_NotBatch_OK() { vals := app.InterchainstakingKeeper.GetValidatorAddresses(ctx, suite.chainB.ChainID) msg := stakingtypes.MsgDelegate{DelegatorAddress: zone.DelegationAddress.Address, ValidatorAddress: vals[0], Amount: sdk.NewCoin("uatom", sdk.NewInt(100))} + hash := sha256.Sum256(msg.GetSignBytes()) + app.EventManagerKeeper.AddEvent(ctx, types.ModuleName, suite.chainB.ChainID, fmt.Sprintf("delegation/%s/%x", msg.ValidatorAddress, hash), "", emtypes.EventTypeICADelegate, emtypes.EventStatusActive, nil, nil) + var msgMsg sdk.Msg = &msg err := app.InterchainstakingKeeper.HandleFailedDelegate(ctx, msgMsg, randomutils.GenerateRandomHashAsHex(32)) suite.NoError(err) - zone, found = app.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) - suite.True(found) - // memo was not a batch id, so don't decrement withdrawal wg - suite.Equal(uint32(100), zone.GetWithdrawalWaitgroup()) + _, count := app.EventManagerKeeper.GetEvents(ctx, types.ModuleName, suite.chainB.ChainID, fmt.Sprintf("delegation/%s/%x", msg.ValidatorAddress, hash)) + suite.Equal(0, count) } func (suite *KeeperTestSuite) TestHandleFailedDelegate_BatchTriggerRR_OK() { From 4aedb4a46dfee3c186d2fd6f8dc8c633a14688e5 Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Wed, 22 May 2024 16:00:13 +0100 Subject: [PATCH 15/19] handle validator perf delegations per zone, to save iterating through zones again --- x/participationrewards/keeper/distribution.go | 9 -- x/participationrewards/keeper/events.go | 6 +- x/participationrewards/keeper/hooks.go | 92 +++++++++---------- .../keeper/rewards_validatorSelection.go | 46 +++++----- 4 files changed, 63 insertions(+), 90 deletions(-) diff --git a/x/participationrewards/keeper/distribution.go b/x/participationrewards/keeper/distribution.go index 82fc11657..602f7e537 100644 --- a/x/participationrewards/keeper/distribution.go +++ b/x/participationrewards/keeper/distribution.go @@ -188,15 +188,6 @@ func (k *Keeper) CalcTokenValues(ctx sdk.Context) (TokenValues, error) { return tvs, nil } -// AllocateZoneRewards executes zone based rewards allocation. This entails -// rewards that are proportionally distributed to zones based on the tvl for -// each zone relative to the tvl of the QS protocol. -func (k *Keeper) AllocateZoneRewards(ctx sdk.Context, tvs TokenValues) error { - // <<--- move to callback - - return k.AllocateHoldingsRewards(ctx) // << -- move to callback -} - // SetZoneAllocations returns the proportional zone rewards allocations as a // map indexed by the zone id. func (k *Keeper) SetZoneAllocations(ctx sdk.Context, tvs TokenValues) error { diff --git a/x/participationrewards/keeper/events.go b/x/participationrewards/keeper/events.go index 70d0d2cb9..bef34a200 100644 --- a/x/participationrewards/keeper/events.go +++ b/x/participationrewards/keeper/events.go @@ -73,21 +73,17 @@ func CalculateTokenValues(k *Keeper, ctx sdk.Context, args []byte) error { return err } - k.QueryValidatorDelegationPerformance(ctx) - return nil } func SubmoduleHooks(k *Keeper, ctx sdk.Context, args []byte) error { for _, sub := range k.PrSubmodules { sub.Hooks(ctx, k) - } return nil } func DistributeParticipationRewards(k *Keeper, ctx sdk.Context, args []byte) error { - // calculate, based on latest token values - // allocation based on calculations + k.AllocateHoldingsRewards(ctx) return nil } diff --git a/x/participationrewards/keeper/hooks.go b/x/participationrewards/keeper/hooks.go index 96b94bf06..64036de61 100644 --- a/x/participationrewards/keeper/hooks.go +++ b/x/participationrewards/keeper/hooks.go @@ -28,6 +28,7 @@ func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, _ int64) iConnectionData, err := types.UnmarshalProtocolData(types.ProtocolDataTypeConnection, data.Data) if err != nil { k.Logger(ctx).Error("Error unmarshalling protocol data") + return false } connectionData, _ := iConnectionData.(*types.ConnectionProtocolData) if connectionData.ChainID == ctx.ChainID() { @@ -50,85 +51,74 @@ func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, _ int64) return false }) - condition, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "get_epoch_height", emtypes.FieldOperator_EQUAL, true)), false) + k.icsKeeper.IterateZones(ctx, func(index int64, zone *icstypes.Zone) (stop bool) { + // ensure we archive claims before we return! + k.ClaimsManagerKeeper.ArchiveAndGarbageCollectClaims(ctx, zone.ChainId) + // send validator performance query + k.QueryValidatorDelegationPerformance(ctx, zone) + return false + }) + + k.Logger(ctx).Info("setting self connection data...") + err := k.UpdateSelfConnectionData(ctx) if err != nil { panic(err) } - // add event to ensure submodule hooks are called when the get_epoch_height calls have returned. - k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, "", "submodules", Submodules, emtypes.EventTypeSubmodules, emtypes.EventStatusPending, condition, nil) + k.Logger(ctx).Info("allocate participation rewards...") - k.Logger(ctx).Info("setting self connection data...") - err = k.UpdateSelfConnectionData(ctx) + // determine allocations splits the balance of the module between holding/usage and validatorSelection rewards. + err = k.DetermineAllocations( + ctx, + k.GetModuleBalance(ctx), + k.GetParams(ctx).DistributionProportions, + ) if err != nil { - panic(err) + k.Logger(ctx).Error(err.Error()) } - condition2, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "submodule", emtypes.FieldOperator_BEGINSWITH, true)), false) + conditionGetEpochHeight, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "get_epoch_height", emtypes.FieldOperator_EQUAL, true)), false) if err != nil { panic(err) } - conditionAnd, err := emtypes.NewConditionAnd(ctx, condition, condition2) + conditionValidatorPerformance, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "validator_performance", emtypes.FieldOperator_EQUAL, true)), false) if err != nil { panic(err) } - k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, "", "calc_tokens", CalculateValues, emtypes.EventTypeCalculateTvls, emtypes.EventStatusPending, conditionAnd, nil) - condition3, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "calc_tokens", emtypes.FieldOperator_EQUAL, true)), false) + conditionSubmodulePre, err := emtypes.NewConditionAnd(ctx, conditionGetEpochHeight, conditionValidatorPerformance) if err != nil { panic(err) } - conditionAnd2, err := emtypes.NewConditionAnd(ctx, conditionAnd, condition3) + + // add event to ensure submodule hooks are called when the validator_performance and get_epoch_height calls have returned. + k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, "", "submodules", Submodules, emtypes.EventTypeSubmodules, emtypes.EventStatusPending, conditionSubmodulePre, nil) + + conditionSubmoduleComplete, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "submodule", emtypes.FieldOperator_BEGINSWITH, true)), false) if err != nil { panic(err) } - k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, "", "distribute_rewards", DistributeRewards, emtypes.EventTypeDistributeRewards, emtypes.EventStatusPending, conditionAnd2, nil) - - // ensure we archive claims before we return! - k.icsKeeper.IterateZones(ctx, func(index int64, zone *icstypes.Zone) (stop bool) { - k.ClaimsManagerKeeper.ArchiveAndGarbageCollectClaims(ctx, zone.ChainId) - return false - }) - - // ascertain validator scores... - - // tvs, err := k.CalcTokenValues(ctx) - // if err != nil { - // k.Logger(ctx).Error("unable to calculate token values", "error", err.Error()) - // return nil - // } - // if allocation == nil { - // // if allocation is unset, then return early to avoid panic - // k.Logger(ctx).Error("nil allocation") - // return nil - // } - - k.Logger(ctx).Info("distribute participation rewards...") + conditionCalcTokensPre, err := emtypes.NewConditionAnd(ctx, conditionSubmodulePre, conditionSubmoduleComplete) + if err != nil { + panic(err) + } + // add calc_tokens event to be triggered on satisfaction of all submodule*, validator_performance, and get_epoch_height calls events. + k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, "", "calc_tokens", CalculateValues, emtypes.EventTypeCalculateTvls, emtypes.EventStatusPending, conditionCalcTokensPre, nil) - err = k.DetermineAllocations( - ctx, - k.GetModuleBalance(ctx), - k.GetParams(ctx).DistributionProportions, - ) + conditionCalcTokensComplete, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "calc_tokens", emtypes.FieldOperator_EQUAL, true)), false) if err != nil { - k.Logger(ctx).Error(err.Error()) + panic(err) + } + conditionDistributeRewardsPre, err := emtypes.NewConditionAnd(ctx, conditionCalcTokensPre, conditionCalcTokensComplete) + if err != nil { + panic(err) } - // if err := k.AllocateZoneRewards(ctx, tvs, *allocation); err != nil { // split into calculate a - // k.Logger(ctx).Error("unable to allocate: tvl is zero", "error", err.Error()) - // return nil - // } + // add distribute_rewards event to trigger on completion of get_epoch_height, validator_performance, submodule* and calc_token events. + k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, "", "distribute_rewards", DistributeRewards, emtypes.EventTypeDistributeRewards, emtypes.EventStatusPending, conditionDistributeRewardsPre, nil) - // TODO: remove 'lockup' allocation logic. - // if !allocation.Lockup.IsZero() { - // // at genesis lockup will be disabled, and enabled when ICS is used. - // if err := k.AllocateLockupRewards(ctx, allocation.Lockup); err != nil { - // k.Logger(ctx).Error(err.Error()) - // return err - // } - // } return nil } diff --git a/x/participationrewards/keeper/rewards_validatorSelection.go b/x/participationrewards/keeper/rewards_validatorSelection.go index 852d70106..d21d5644e 100644 --- a/x/participationrewards/keeper/rewards_validatorSelection.go +++ b/x/participationrewards/keeper/rewards_validatorSelection.go @@ -20,31 +20,27 @@ import ( // rewards account for each zone to determine validator performance and // corresponding rewards allocations. Each zone's response is dealt with // individually in a callback. -func (k Keeper) QueryValidatorDelegationPerformance(ctx sdk.Context) { - k.icsKeeper.IterateZones(ctx, func(_ int64, zone *icstypes.Zone) (stop bool) { - if zone.PerformanceAddress != nil { - k.Logger(ctx).Info("zones", "chain_id", zone.ChainId, "performance address", zone.PerformanceAddress.Address) - - // obtain zone performance account rewards - rewardsQuery := distrtypes.QueryDelegationTotalRewardsRequest{DelegatorAddress: zone.PerformanceAddress.Address} - bz := k.cdc.MustMarshal(&rewardsQuery) - - k.IcqKeeper.MakeRequest( - ctx, - zone.ConnectionId, - zone.ChainId, - "cosmos.distribution.v1beta1.Query/DelegationTotalRewards", - bz, - sdk.NewInt(-1), - types.ModuleName, - ValidatorSelectionRewardsCallbackID, - 0, - ) - - k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, zone.ChainId, "validator_performance", "", emtypes.EventTypeICQQueryDelegations, emtypes.EventStatusActive, nil, nil) - } - return false - }) +func (k Keeper) QueryValidatorDelegationPerformance(ctx sdk.Context, zone *icstypes.Zone) { + if zone.PerformanceAddress != nil { + k.Logger(ctx).Info("zones", "chain_id", zone.ChainId, "performance address", zone.PerformanceAddress.Address) + + // obtain zone performance account rewards + rewardsQuery := distrtypes.QueryDelegationTotalRewardsRequest{DelegatorAddress: zone.PerformanceAddress.Address} + bz := k.cdc.MustMarshal(&rewardsQuery) + + k.IcqKeeper.MakeRequest( + ctx, + zone.ConnectionId, + zone.ChainId, + "cosmos.distribution.v1beta1.Query/DelegationTotalRewards", + bz, + sdk.NewInt(-1), + types.ModuleName, + ValidatorSelectionRewardsCallbackID, + 0, + ) + k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, zone.ChainId, "validator_performance", "", emtypes.EventTypeICQQueryDelegations, emtypes.EventStatusActive, nil, nil) + } } // getZoneScores returns an instance of zoneScore containing the calculated From 2ba95a7de769871d9f0b616471a94a29f3bcb78d Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Wed, 5 Jun 2024 15:58:04 +0100 Subject: [PATCH 16/19] add missing callback for validatorselection --- x/participationrewards/keeper/callbacks.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x/participationrewards/keeper/callbacks.go b/x/participationrewards/keeper/callbacks.go index f9e754f6e..7265050c9 100644 --- a/x/participationrewards/keeper/callbacks.go +++ b/x/participationrewards/keeper/callbacks.go @@ -97,6 +97,8 @@ func ValidatorSelectionRewardsCallback(ctx sdk.Context, k *Keeper, response []by return err } + defer k.EventManagerKeeper.MarkCompleted(ctx, types.ModuleName, query.ChainId, "validator_performance") + k.Logger(ctx).Info( "callback zone score", "zone", zs.ZoneID, From 77314ce9cf1e93cdcb6d05207115df5ff3cb5e2d Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Mon, 17 Jun 2024 16:57:44 +0100 Subject: [PATCH 17/19] wip --- go.work.sum | 1 + .../quicksilver/eventmanager/v1/genesis.proto | 33 +- x/eventmanager/keeper/abci.go | 23 + x/eventmanager/keeper/events.go | 33 +- x/eventmanager/keeper/events_test.go | 12 +- x/eventmanager/types/codec.go | 2 +- x/eventmanager/types/conditions.go | 55 +- x/eventmanager/types/genesis.pb.go | 524 ++++++++++++++++-- x/eventmanager/types/keys.go | 1 + .../types/{fields.go => resolver.go} | 20 +- x/interchainstaking/keeper/events.go | 32 +- x/interchainstaking/keeper/hooks.go | 2 +- x/interchainstaking/keeper/redemptions.go | 55 +- x/interchainstaking/types/expected_keepers.go | 2 + x/participationrewards/keeper/hooks.go | 8 +- 15 files changed, 697 insertions(+), 106 deletions(-) create mode 100644 x/eventmanager/keeper/abci.go rename x/eventmanager/types/{fields.go => resolver.go} (85%) diff --git a/go.work.sum b/go.work.sum index a074ecc83..d7c3d4d4e 100644 --- a/go.work.sum +++ b/go.work.sum @@ -988,6 +988,7 @@ github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= diff --git a/proto/quicksilver/eventmanager/v1/genesis.proto b/proto/quicksilver/eventmanager/v1/genesis.proto index 5e9d22b75..82b6db201 100644 --- a/proto/quicksilver/eventmanager/v1/genesis.proto +++ b/proto/quicksilver/eventmanager/v1/genesis.proto @@ -4,6 +4,7 @@ package quicksilver.eventmanager.v1; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; +import "google/protobuf/timestamp.proto"; option go_package = "github.com/quicksilver-zone/quicksilver/x/eventmanager/types"; @@ -17,17 +18,32 @@ message Event { bytes payload = 7; google.protobuf.Any execute_condition = 8 [(cosmos_proto.accepts_interface) = "quicksilver.interchainstaking.ConditionI"]; int64 emitted_height = 9; + google.protobuf.Timestamp expiry_time = 10 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = true + ]; } // GenesisState defines the eventmanager module's genesis state. message GenesisState {} enum FieldOperator { - UNSPECIFIED = 0; - EQUAL = 1; - CONTAINS = 2; - BEGINSWITH = 3; - ENDSWITH = 4; + option (gogoproto.goproto_enum_prefix) = false; + FIELD_OPERATOR_UNSPECIFIED = 0; + FIELD_OPERATOR_EQUAL = 1; + FIELD_OPERATOR_CONTAINS = 2; + FIELD_OPERATOR_BEGINSWITH = 3; + FIELD_OPERATOR_ENDSWITH = 4; +} + +enum Comparator { + option (gogoproto.goproto_enum_prefix) = false; + COMPARATOR_UNSPECIFIED = 0; + COMPARATOR_EQUAL = 1; + COMPARATOR_GREATER_THAN = 2; + COMPARATOR_LESS_THAN = 3; + COMPARATOR_GREATER_THAN_OR_EQUAL = 4; + COMPARATOR_LESS_THAN_OR_EQUAL = 5; } message FieldValue { @@ -47,6 +63,13 @@ message ConditionAll { bool negate = 2; } +message ConditionCount { + repeated FieldValue fields = 1; + Comparator comparator = 2; + int64 value = 3; + bool negate = 4; +} + message ConditionAnd { google.protobuf.Any condition1 = 1 [(cosmos_proto.accepts_interface) = "quicksilver.interchainstaking.ConditionI"]; google.protobuf.Any condition2 = 2 [(cosmos_proto.accepts_interface) = "quicksilver.interchainstaking.ConditionI"]; diff --git a/x/eventmanager/keeper/abci.go b/x/eventmanager/keeper/abci.go new file mode 100644 index 000000000..1abe6ef4b --- /dev/null +++ b/x/eventmanager/keeper/abci.go @@ -0,0 +1,23 @@ +package keeper + +import ( + "time" + + "github.com/cosmos/cosmos-sdk/telemetry" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" +) + +func (k Keeper) EndBlocker(ctx sdk.Context) { + // delete expired events, and allow triggers to be executed. + defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyEndBlocker) + k.IteratePrefixedEvents(ctx, nil, func(_ int64, eventInfo types.Event) (stop bool) { + if eventInfo.ExpiryTime.Before(ctx.BlockTime()) { + k.Logger(ctx).Info("deleting expired event", "module", eventInfo.Module, "id", eventInfo.Identifier, "chain", eventInfo.ChainId) + k.DeleteEvent(ctx, eventInfo.Module, eventInfo.ChainId, eventInfo.Identifier) + } + return false + }) + + k.TriggerAll(ctx) +} diff --git a/x/eventmanager/keeper/events.go b/x/eventmanager/keeper/events.go index 458777fc4..2b42e1fe4 100644 --- a/x/eventmanager/keeper/events.go +++ b/x/eventmanager/keeper/events.go @@ -2,6 +2,7 @@ package keeper import ( "fmt" + "time" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/store/prefix" @@ -96,8 +97,8 @@ func (k Keeper) MarkCompleted(ctx sdk.Context, module string, chainID string, id k.Trigger(ctx, module, chainID) } -func (k Keeper) Trigger(ctx sdk.Context, module string, chainID string) { - k.IterateModuleChainEvents(ctx, module, chainID, func(_ int64, e types.Event) (stop bool) { +func (k Keeper) GetTriggerFn(ctx sdk.Context) func(_ int64, e types.Event) (stop bool) { + return func(_ int64, e types.Event) (stop bool) { if e.EventStatus == types.EventStatusPending { res, err := e.CanExecute(ctx, &k) if err != nil { @@ -114,7 +115,33 @@ func (k Keeper) Trigger(ctx sdk.Context, module string, chainID string) { } } return false - }) + } +} + +func (k Keeper) Trigger(ctx sdk.Context, module string, chainID string) { + k.IterateModuleChainEvents(ctx, module, chainID, k.GetTriggerFn(ctx)) +} + +func (k Keeper) TriggerAll(ctx sdk.Context) { + k.IteratePrefixedEvents(ctx, nil, k.GetTriggerFn(ctx)) +} + +func (k Keeper) AddEventWithExpiry(ctx sdk.Context, module, chainID, identifier string, eventType, status int32, expiry time.Time) { + // expiring events cannot have callbacks + event := types.Event{ + ChainId: chainID, + Module: module, + Identifier: identifier, + EventType: eventType, + Callback: "", + Payload: nil, + EventStatus: status, + ExecuteCondition: nil, + EmittedHeight: ctx.BlockHeight(), + ExpiryTime: &expiry, + } + + k.SetEvent(ctx, event) } func (k Keeper) AddEvent(ctx sdk.Context, diff --git a/x/eventmanager/keeper/events_test.go b/x/eventmanager/keeper/events_test.go index ce8ad639d..17fff3f8d 100644 --- a/x/eventmanager/keeper/events_test.go +++ b/x/eventmanager/keeper/events_test.go @@ -110,8 +110,8 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition() { preEvents := len(app.EventManagerKeeper.AllEvents(ctx)) condition, err := types.NewConditionAll(ctx, []*types.FieldValue{ - {Field: types.FieldModule, Value: types.ModuleName, Operator: types.FieldOperator_EQUAL, Negate: false}, - {Field: types.FieldEventStatus, Value: fmt.Sprintf("%d", types.EventStatusActive), Operator: types.FieldOperator_EQUAL, Negate: false}, + {Field: types.FieldModule, Value: types.ModuleName, Operator: types.FIELD_OPERATOR_EQUAL, Negate: false}, + {Field: types.FieldEventStatus, Value: fmt.Sprintf("%d", types.EventStatusActive), Operator: types.FIELD_OPERATOR_EQUAL, Negate: false}, }, true) suite.NoError(err) @@ -157,14 +157,14 @@ func (suite *KeeperTestSuite) TestEventLifecycleWithCondition2() { preEvents := len(app.EventManagerKeeper.AllEvents(ctx)) condition1, err := types.NewConditionAll(ctx, []*types.FieldValue{ - {Field: types.FieldModule, Value: types.ModuleName, Operator: types.FieldOperator_EQUAL, Negate: false}, - {Field: types.FieldEventType, Value: fmt.Sprintf("%d", types.EventTypeICAUnbond), Operator: types.FieldOperator_EQUAL, Negate: false}, + {Field: types.FieldModule, Value: types.ModuleName, Operator: types.FIELD_OPERATOR_EQUAL, Negate: false}, + {Field: types.FieldEventType, Value: fmt.Sprintf("%d", types.EventTypeICAUnbond), Operator: types.FIELD_OPERATOR_EQUAL, Negate: false}, }, true) suite.NoError(err) condition2, err := types.NewConditionAll(ctx, []*types.FieldValue{ - {Field: types.FieldModule, Value: types.ModuleName, Operator: types.FieldOperator_EQUAL, Negate: false}, - {Field: types.FieldEventType, Value: fmt.Sprintf("%d", types.EventTypeICADelegate), Operator: types.FieldOperator_EQUAL, Negate: false}, + {Field: types.FieldModule, Value: types.ModuleName, Operator: types.FIELD_OPERATOR_EQUAL, Negate: false}, + {Field: types.FieldEventType, Value: fmt.Sprintf("%d", types.EventTypeICADelegate), Operator: types.FIELD_OPERATOR_EQUAL, Negate: false}, }, true) suite.NoError(err) diff --git a/x/eventmanager/types/codec.go b/x/eventmanager/types/codec.go index 1c42ecb14..a3e2cf3e4 100644 --- a/x/eventmanager/types/codec.go +++ b/x/eventmanager/types/codec.go @@ -17,7 +17,7 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { func RegisterInterfaces(registry types.InterfaceRegistry) { registry.RegisterInterface("quicksilver.eventmanager.v1.ConditionI", (*ConditionI)(nil)) - registry.RegisterImplementations((*ConditionI)(nil), &ConditionAll{}, &ConditionAnd{}, &ConditionOr{}) + registry.RegisterImplementations((*ConditionI)(nil), &ConditionAll{}, &ConditionAnd{}, &ConditionOr{}, &ConditionCount{}) } func init() { diff --git a/x/eventmanager/types/conditions.go b/x/eventmanager/types/conditions.go index 92211ad57..adc90d68e 100644 --- a/x/eventmanager/types/conditions.go +++ b/x/eventmanager/types/conditions.go @@ -18,6 +18,19 @@ type ConditionI interface { Resolve(ctx sdk.Context, k EMKeeper) (bool, error) } +// CanExecute determines whether a +func (e *Event) CanExecute(ctx sdk.Context, k EMKeeper) (bool, error) { + if e.ExecuteCondition == nil { + return true, nil + } + var condition ConditionI + err := k.GetCodec().UnpackAny(e.ExecuteCondition, &condition) + if err != nil { + return false, err + } + return condition.Resolve(ctx, k) +} + // type ConditionExistsAny struct { // Fields []types.KV // negate bool @@ -124,15 +137,37 @@ func NewConditionOr(ctx sdk.Context, condition1, condition2 ConditionI) (*Condit return &ConditionOr{anyc1, anyc2}, nil } -// CanExecute determines whether a -func (e *Event) CanExecute(ctx sdk.Context, k EMKeeper) (bool, error) { - if e.ExecuteCondition == nil { - return true, nil - } - var condition ConditionI - err := k.GetCodec().UnpackAny(e.ExecuteCondition, &condition) - if err != nil { - return false, err +func NewConditionCount(ctx sdk.Context, fields []*FieldValue, comparator Comparator, count int64, negate bool) (*ConditionCount, error) { + return &ConditionCount{fields, comparator, count, negate}, nil +} + +func (c ConditionCount) Resolve(ctx sdk.Context, k EMKeeper) (bool, error) { + count := 0 + var err error + k.IteratePrefixedEvents(ctx, nil, func(index int64, event Event) (stop bool) { + res, err := event.ResolveAllFieldValues(c.Fields) + if err != nil { + return true + } + if res { + count++ + } + return false + }) + + out := false + switch c.Comparator { + case COMPARATOR_EQUAL: + out = count == int(c.Value) + case COMPARATOR_GREATER_THAN: + out = count > int(c.Value) + case COMPARATOR_LESS_THAN: + out = count < int(c.Value) + case COMPARATOR_GREATER_THAN_OR_EQUAL: + out = count >= int(c.Value) + case COMPARATOR_LESS_THAN_OR_EQUAL: + out = count <= int(c.Value) } - return condition.Resolve(ctx, k) + + return c.Negate != out, err } diff --git a/x/eventmanager/types/genesis.pb.go b/x/eventmanager/types/genesis.pb.go index d41a240a1..0f2940a6a 100644 --- a/x/eventmanager/types/genesis.pb.go +++ b/x/eventmanager/types/genesis.pb.go @@ -9,15 +9,19 @@ import ( types "github.com/cosmos/cosmos-sdk/codec/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" + time "time" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf +var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -28,27 +32,27 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type FieldOperator int32 const ( - FieldOperator_UNSPECIFIED FieldOperator = 0 - FieldOperator_EQUAL FieldOperator = 1 - FieldOperator_CONTAINS FieldOperator = 2 - FieldOperator_BEGINSWITH FieldOperator = 3 - FieldOperator_ENDSWITH FieldOperator = 4 + FIELD_OPERATOR_UNSPECIFIED FieldOperator = 0 + FIELD_OPERATOR_EQUAL FieldOperator = 1 + FIELD_OPERATOR_CONTAINS FieldOperator = 2 + FIELD_OPERATOR_BEGINSWITH FieldOperator = 3 + FIELD_OPERATOR_ENDSWITH FieldOperator = 4 ) var FieldOperator_name = map[int32]string{ - 0: "UNSPECIFIED", - 1: "EQUAL", - 2: "CONTAINS", - 3: "BEGINSWITH", - 4: "ENDSWITH", + 0: "FIELD_OPERATOR_UNSPECIFIED", + 1: "FIELD_OPERATOR_EQUAL", + 2: "FIELD_OPERATOR_CONTAINS", + 3: "FIELD_OPERATOR_BEGINSWITH", + 4: "FIELD_OPERATOR_ENDSWITH", } var FieldOperator_value = map[string]int32{ - "UNSPECIFIED": 0, - "EQUAL": 1, - "CONTAINS": 2, - "BEGINSWITH": 3, - "ENDSWITH": 4, + "FIELD_OPERATOR_UNSPECIFIED": 0, + "FIELD_OPERATOR_EQUAL": 1, + "FIELD_OPERATOR_CONTAINS": 2, + "FIELD_OPERATOR_BEGINSWITH": 3, + "FIELD_OPERATOR_ENDSWITH": 4, } func (x FieldOperator) String() string { @@ -59,6 +63,43 @@ func (FieldOperator) EnumDescriptor() ([]byte, []int) { return fileDescriptor_74127b30ab787dbd, []int{0} } +type Comparator int32 + +const ( + COMPARATOR_UNSPECIFIED Comparator = 0 + COMPARATOR_EQUAL Comparator = 1 + COMPARATOR_GREATER_THAN Comparator = 2 + COMPARATOR_LESS_THAN Comparator = 3 + COMPARATOR_GREATER_THAN_OR_EQUAL Comparator = 4 + COMPARATOR_LESS_THAN_OR_EQUAL Comparator = 5 +) + +var Comparator_name = map[int32]string{ + 0: "COMPARATOR_UNSPECIFIED", + 1: "COMPARATOR_EQUAL", + 2: "COMPARATOR_GREATER_THAN", + 3: "COMPARATOR_LESS_THAN", + 4: "COMPARATOR_GREATER_THAN_OR_EQUAL", + 5: "COMPARATOR_LESS_THAN_OR_EQUAL", +} + +var Comparator_value = map[string]int32{ + "COMPARATOR_UNSPECIFIED": 0, + "COMPARATOR_EQUAL": 1, + "COMPARATOR_GREATER_THAN": 2, + "COMPARATOR_LESS_THAN": 3, + "COMPARATOR_GREATER_THAN_OR_EQUAL": 4, + "COMPARATOR_LESS_THAN_OR_EQUAL": 5, +} + +func (x Comparator) String() string { + return proto.EnumName(Comparator_name, int32(x)) +} + +func (Comparator) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_74127b30ab787dbd, []int{1} +} + type Event struct { ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` EventType int32 `protobuf:"varint,2,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"` @@ -69,6 +110,7 @@ type Event struct { Payload []byte `protobuf:"bytes,7,opt,name=payload,proto3" json:"payload,omitempty"` ExecuteCondition *types.Any `protobuf:"bytes,8,opt,name=execute_condition,json=executeCondition,proto3" json:"execute_condition,omitempty"` EmittedHeight int64 `protobuf:"varint,9,opt,name=emitted_height,json=emittedHeight,proto3" json:"emitted_height,omitempty"` + ExpiryTime *time.Time `protobuf:"bytes,10,opt,name=expiry_time,json=expiryTime,proto3,stdtime" json:"expiry_time,omitempty"` } func (m *Event) Reset() { *m = Event{} } @@ -167,6 +209,13 @@ func (m *Event) GetEmittedHeight() int64 { return 0 } +func (m *Event) GetExpiryTime() *time.Time { + if m != nil { + return m.ExpiryTime + } + return nil +} + // GenesisState defines the eventmanager module's genesis state. type GenesisState struct { } @@ -262,7 +311,7 @@ func (m *FieldValue) GetOperator() FieldOperator { if m != nil { return m.Operator } - return FieldOperator_UNSPECIFIED + return FIELD_OPERATOR_UNSPECIFIED } func (m *FieldValue) GetNegate() bool { @@ -376,6 +425,74 @@ func (m *ConditionAll) GetNegate() bool { return false } +type ConditionCount struct { + Fields []*FieldValue `protobuf:"bytes,1,rep,name=fields,proto3" json:"fields,omitempty"` + Comparator Comparator `protobuf:"varint,2,opt,name=comparator,proto3,enum=quicksilver.eventmanager.v1.Comparator" json:"comparator,omitempty"` + Value int64 `protobuf:"varint,3,opt,name=value,proto3" json:"value,omitempty"` + Negate bool `protobuf:"varint,4,opt,name=negate,proto3" json:"negate,omitempty"` +} + +func (m *ConditionCount) Reset() { *m = ConditionCount{} } +func (m *ConditionCount) String() string { return proto.CompactTextString(m) } +func (*ConditionCount) ProtoMessage() {} +func (*ConditionCount) Descriptor() ([]byte, []int) { + return fileDescriptor_74127b30ab787dbd, []int{5} +} +func (m *ConditionCount) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ConditionCount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ConditionCount.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ConditionCount) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConditionCount.Merge(m, src) +} +func (m *ConditionCount) XXX_Size() int { + return m.Size() +} +func (m *ConditionCount) XXX_DiscardUnknown() { + xxx_messageInfo_ConditionCount.DiscardUnknown(m) +} + +var xxx_messageInfo_ConditionCount proto.InternalMessageInfo + +func (m *ConditionCount) GetFields() []*FieldValue { + if m != nil { + return m.Fields + } + return nil +} + +func (m *ConditionCount) GetComparator() Comparator { + if m != nil { + return m.Comparator + } + return COMPARATOR_UNSPECIFIED +} + +func (m *ConditionCount) GetValue() int64 { + if m != nil { + return m.Value + } + return 0 +} + +func (m *ConditionCount) GetNegate() bool { + if m != nil { + return m.Negate + } + return false +} + type ConditionAnd struct { Condition1 *types.Any `protobuf:"bytes,1,opt,name=condition1,proto3" json:"condition1,omitempty"` Condition2 *types.Any `protobuf:"bytes,2,opt,name=condition2,proto3" json:"condition2,omitempty"` @@ -385,7 +502,7 @@ func (m *ConditionAnd) Reset() { *m = ConditionAnd{} } func (m *ConditionAnd) String() string { return proto.CompactTextString(m) } func (*ConditionAnd) ProtoMessage() {} func (*ConditionAnd) Descriptor() ([]byte, []int) { - return fileDescriptor_74127b30ab787dbd, []int{5} + return fileDescriptor_74127b30ab787dbd, []int{6} } func (m *ConditionAnd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -437,7 +554,7 @@ func (m *ConditionOr) Reset() { *m = ConditionOr{} } func (m *ConditionOr) String() string { return proto.CompactTextString(m) } func (*ConditionOr) ProtoMessage() {} func (*ConditionOr) Descriptor() ([]byte, []int) { - return fileDescriptor_74127b30ab787dbd, []int{6} + return fileDescriptor_74127b30ab787dbd, []int{7} } func (m *ConditionOr) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -482,11 +599,13 @@ func (m *ConditionOr) GetCondition2() *types.Any { func init() { proto.RegisterEnum("quicksilver.eventmanager.v1.FieldOperator", FieldOperator_name, FieldOperator_value) + proto.RegisterEnum("quicksilver.eventmanager.v1.Comparator", Comparator_name, Comparator_value) proto.RegisterType((*Event)(nil), "quicksilver.eventmanager.v1.Event") proto.RegisterType((*GenesisState)(nil), "quicksilver.eventmanager.v1.GenesisState") proto.RegisterType((*FieldValue)(nil), "quicksilver.eventmanager.v1.FieldValue") proto.RegisterType((*ConditionAny)(nil), "quicksilver.eventmanager.v1.ConditionAny") proto.RegisterType((*ConditionAll)(nil), "quicksilver.eventmanager.v1.ConditionAll") + proto.RegisterType((*ConditionCount)(nil), "quicksilver.eventmanager.v1.ConditionCount") proto.RegisterType((*ConditionAnd)(nil), "quicksilver.eventmanager.v1.ConditionAnd") proto.RegisterType((*ConditionOr)(nil), "quicksilver.eventmanager.v1.ConditionOr") } @@ -496,48 +615,60 @@ func init() { } var fileDescriptor_74127b30ab787dbd = []byte{ - // 645 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x54, 0xcd, 0x6e, 0xd3, 0x4c, - 0x14, 0xcd, 0x24, 0x4d, 0x9a, 0xdc, 0xa4, 0xf9, 0xf2, 0x8d, 0x2a, 0xe4, 0x16, 0x61, 0x85, 0x48, - 0x08, 0x53, 0x51, 0x5b, 0x0d, 0x5b, 0x24, 0x94, 0xb6, 0x69, 0x6b, 0x09, 0xa5, 0xe0, 0xf4, 0x47, - 0x62, 0x13, 0x39, 0xf6, 0xd4, 0x19, 0xd5, 0x99, 0x09, 0xf6, 0x38, 0x6a, 0x78, 0x0a, 0x96, 0x3c, - 0x08, 0x0f, 0x81, 0x58, 0x75, 0x03, 0x62, 0x89, 0xda, 0x1d, 0x4f, 0x81, 0x3c, 0x76, 0x22, 0x67, - 0x01, 0x6c, 0xca, 0x86, 0x9d, 0xcf, 0xb9, 0x73, 0xef, 0x99, 0x73, 0x7c, 0x35, 0xf0, 0xe4, 0x6d, - 0x44, 0x9d, 0xcb, 0x90, 0xfa, 0x53, 0x12, 0x18, 0x64, 0x4a, 0x98, 0x18, 0xdb, 0xcc, 0xf6, 0x48, - 0x60, 0x4c, 0x77, 0x0c, 0x8f, 0x30, 0x12, 0xd2, 0x50, 0x9f, 0x04, 0x5c, 0x70, 0x7c, 0x3f, 0x73, - 0x54, 0xcf, 0x1e, 0xd5, 0xa7, 0x3b, 0x9b, 0x1b, 0x0e, 0x0f, 0xc7, 0x3c, 0x1c, 0xc8, 0xa3, 0x46, - 0x02, 0x92, 0xbe, 0xcd, 0x75, 0x8f, 0x7b, 0x3c, 0xe1, 0xe3, 0xaf, 0x94, 0xdd, 0xf0, 0x38, 0xf7, - 0x7c, 0x62, 0x48, 0x34, 0x8c, 0x2e, 0x0c, 0x9b, 0xcd, 0x92, 0x52, 0xeb, 0x47, 0x1e, 0x8a, 0xdd, - 0x78, 0x3e, 0xde, 0x80, 0xb2, 0x33, 0xb2, 0x29, 0x1b, 0x50, 0x57, 0x41, 0x4d, 0xa4, 0x55, 0xac, - 0x55, 0x89, 0x4d, 0x17, 0x3f, 0x00, 0x90, 0x77, 0x18, 0x88, 0xd9, 0x84, 0x28, 0xf9, 0x26, 0xd2, - 0x8a, 0x56, 0x45, 0x32, 0x27, 0xb3, 0x09, 0xc1, 0x2a, 0x00, 0x75, 0x09, 0x13, 0xf4, 0x82, 0x92, - 0x40, 0x29, 0xc8, 0xde, 0x0c, 0x83, 0x1f, 0x42, 0x2d, 0x69, 0x0f, 0x85, 0x2d, 0xa2, 0x50, 0x59, - 0x91, 0x03, 0xaa, 0x92, 0xeb, 0x4b, 0x0a, 0xdf, 0x83, 0xd2, 0x98, 0xbb, 0x91, 0x4f, 0x94, 0xa2, - 0x6c, 0x4f, 0x11, 0xde, 0x84, 0xb2, 0x63, 0xfb, 0xfe, 0xd0, 0x76, 0x2e, 0x95, 0x92, 0xac, 0x2c, - 0x30, 0x56, 0x60, 0x75, 0x62, 0xcf, 0x7c, 0x6e, 0xbb, 0xca, 0x6a, 0x13, 0x69, 0x35, 0x6b, 0x0e, - 0x31, 0x87, 0xff, 0xc9, 0x15, 0x71, 0x22, 0x41, 0x06, 0x0e, 0x67, 0x2e, 0x15, 0x94, 0x33, 0xa5, - 0xdc, 0x44, 0x5a, 0xb5, 0xbd, 0xae, 0x27, 0x59, 0xe8, 0xf3, 0x2c, 0xf4, 0x0e, 0x9b, 0xed, 0x3e, - 0xfd, 0xfc, 0x71, 0x5b, 0xcb, 0x46, 0x4e, 0x99, 0x20, 0x81, 0xb4, 0x1f, 0x0a, 0xfb, 0x92, 0x32, - 0x4f, 0xdf, 0x9b, 0x0f, 0x32, 0xad, 0x46, 0x3a, 0x7c, 0x41, 0xe1, 0x47, 0x50, 0x27, 0x63, 0x2a, - 0x04, 0x71, 0x07, 0x23, 0x42, 0xbd, 0x91, 0x50, 0x2a, 0x4d, 0xa4, 0x15, 0xac, 0xb5, 0x94, 0x3d, - 0x92, 0x64, 0xab, 0x0e, 0xb5, 0xc3, 0xe4, 0x37, 0xc7, 0xb6, 0x49, 0xeb, 0x03, 0x02, 0x38, 0xa0, - 0xc4, 0x77, 0xcf, 0x6c, 0x3f, 0x22, 0x78, 0x1d, 0x8a, 0x17, 0x31, 0x4a, 0xe3, 0x4f, 0x40, 0xcc, - 0x4e, 0xe3, 0xb2, 0xcc, 0xbd, 0x62, 0x25, 0x00, 0x1f, 0x40, 0x99, 0x4f, 0x48, 0x60, 0x0b, 0x9e, - 0x24, 0x5e, 0x6f, 0x6f, 0xe9, 0xbf, 0xd9, 0x19, 0x5d, 0xca, 0x1c, 0xa7, 0x1d, 0xd6, 0xa2, 0x37, - 0x0e, 0x9e, 0x11, 0xcf, 0x16, 0x44, 0xfe, 0x95, 0xb2, 0x95, 0xa2, 0x96, 0x07, 0xb5, 0x85, 0xbd, - 0x0e, 0x9b, 0xe1, 0x17, 0x50, 0x92, 0xd7, 0x09, 0x15, 0xd4, 0x2c, 0x68, 0xd5, 0xf6, 0xe3, 0x3f, - 0xab, 0x49, 0x53, 0x56, 0xda, 0x96, 0x11, 0xca, 0xff, 0x5a, 0xc8, 0xf7, 0xff, 0x9e, 0xd0, 0x57, - 0xb4, 0x64, 0xc9, 0xc5, 0x43, 0x80, 0xc5, 0x76, 0xec, 0xc8, 0xcc, 0xef, 0x66, 0x3d, 0x32, 0x53, - 0x97, 0x34, 0xda, 0xf2, 0x42, 0x77, 0xad, 0xd1, 0x6e, 0x7d, 0x41, 0x50, 0x5d, 0x94, 0x8e, 0x83, - 0x7f, 0xc5, 0xd7, 0xd6, 0x39, 0xac, 0x2d, 0x6d, 0x2d, 0xfe, 0x0f, 0xaa, 0xa7, 0xbd, 0xfe, 0xab, - 0xee, 0x9e, 0x79, 0x60, 0x76, 0xf7, 0x1b, 0x39, 0x5c, 0x81, 0x62, 0xf7, 0xf5, 0x69, 0xe7, 0x65, - 0x03, 0xe1, 0x1a, 0x94, 0xf7, 0x8e, 0x7b, 0x27, 0x1d, 0xb3, 0xd7, 0x6f, 0xe4, 0x71, 0x1d, 0x60, - 0xb7, 0x7b, 0x68, 0xf6, 0xfa, 0xe7, 0xe6, 0xc9, 0x51, 0xa3, 0x10, 0x57, 0xbb, 0xbd, 0xfd, 0x04, - 0xad, 0xec, 0x9e, 0x7d, 0xba, 0x51, 0xd1, 0xf5, 0x8d, 0x8a, 0xbe, 0xdf, 0xa8, 0xe8, 0xfd, 0xad, - 0x9a, 0xbb, 0xbe, 0x55, 0x73, 0xdf, 0x6e, 0xd5, 0xdc, 0x9b, 0xe7, 0x1e, 0x15, 0xa3, 0x68, 0xa8, - 0x3b, 0x7c, 0x6c, 0x64, 0xee, 0xbc, 0xfd, 0x8e, 0x33, 0x92, 0x25, 0x8c, 0xab, 0xe5, 0xf7, 0x3b, - 0x7e, 0x17, 0xc3, 0x61, 0x49, 0x1a, 0x7f, 0xf6, 0x33, 0x00, 0x00, 0xff, 0xff, 0x47, 0xaf, 0xe5, - 0x26, 0xe8, 0x05, 0x00, 0x00, + // 837 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x56, 0xcf, 0x6f, 0xe3, 0x44, + 0x14, 0xce, 0x24, 0x4d, 0x9b, 0xbe, 0x74, 0xab, 0x30, 0x8a, 0x16, 0x37, 0xab, 0xba, 0xd9, 0x08, + 0x44, 0xa8, 0x58, 0x47, 0x0d, 0x57, 0x24, 0x94, 0xa6, 0x6e, 0x6b, 0xa9, 0x24, 0xc5, 0xc9, 0x2e, + 0x12, 0x17, 0xcb, 0xb1, 0xa7, 0xee, 0xa8, 0xb6, 0xc7, 0xd8, 0xe3, 0xa8, 0xe1, 0x2f, 0xe0, 0xb8, + 0x47, 0xee, 0x5c, 0xb8, 0x22, 0xf1, 0x27, 0x70, 0xa8, 0x38, 0xed, 0x05, 0xc4, 0x09, 0x50, 0xfb, + 0x8f, 0x20, 0x8f, 0x5d, 0xd7, 0x2d, 0xed, 0x72, 0xa0, 0x5c, 0xb8, 0xf5, 0x7d, 0xdf, 0xfb, 0xde, + 0x8f, 0xf9, 0x9e, 0xd5, 0xc0, 0x87, 0x5f, 0xc5, 0xd4, 0x3a, 0x8b, 0xa8, 0x3b, 0x27, 0x61, 0x8f, + 0xcc, 0x89, 0xcf, 0x3d, 0xd3, 0x37, 0x1d, 0x12, 0xf6, 0xe6, 0x3b, 0x3d, 0x87, 0xf8, 0x24, 0xa2, + 0x91, 0x12, 0x84, 0x8c, 0x33, 0xfc, 0xac, 0x90, 0xaa, 0x14, 0x53, 0x95, 0xf9, 0x4e, 0x6b, 0xc3, + 0x62, 0x91, 0xc7, 0x22, 0x43, 0xa4, 0xf6, 0xd2, 0x20, 0xd5, 0xb5, 0x9a, 0x0e, 0x73, 0x58, 0x8a, + 0x27, 0x7f, 0x65, 0xe8, 0x86, 0xc3, 0x98, 0xe3, 0x92, 0x9e, 0x88, 0x66, 0xf1, 0x49, 0xcf, 0xf4, + 0x17, 0x19, 0xb5, 0x75, 0x97, 0xe2, 0xd4, 0x23, 0x11, 0x37, 0xbd, 0x20, 0x4d, 0xe8, 0xfc, 0x50, + 0x81, 0xaa, 0x9a, 0x0c, 0x80, 0x37, 0xa0, 0x66, 0x9d, 0x9a, 0xd4, 0x37, 0xa8, 0x2d, 0xa1, 0x36, + 0xea, 0xae, 0xea, 0x2b, 0x22, 0xd6, 0x6c, 0xbc, 0x09, 0x20, 0x86, 0x34, 0xf8, 0x22, 0x20, 0x52, + 0xb9, 0x8d, 0xba, 0x55, 0x7d, 0x55, 0x20, 0xd3, 0x45, 0x40, 0xb0, 0x0c, 0x40, 0x6d, 0xe2, 0x73, + 0x7a, 0x42, 0x49, 0x28, 0x55, 0x84, 0xb6, 0x80, 0xe0, 0xe7, 0xb0, 0x96, 0xca, 0x23, 0x6e, 0xf2, + 0x38, 0x92, 0x96, 0x44, 0x81, 0xba, 0xc0, 0x26, 0x02, 0xc2, 0x4f, 0x61, 0xd9, 0x63, 0x76, 0xec, + 0x12, 0xa9, 0x2a, 0xe4, 0x59, 0x84, 0x5b, 0x50, 0xb3, 0x4c, 0xd7, 0x9d, 0x99, 0xd6, 0x99, 0xb4, + 0x2c, 0x98, 0x3c, 0xc6, 0x12, 0xac, 0x04, 0xe6, 0xc2, 0x65, 0xa6, 0x2d, 0xad, 0xb4, 0x51, 0x77, + 0x4d, 0xbf, 0x0e, 0x31, 0x83, 0x77, 0xc8, 0x39, 0xb1, 0x62, 0x4e, 0x0c, 0x8b, 0xf9, 0x36, 0xe5, + 0x94, 0xf9, 0x52, 0xad, 0x8d, 0xba, 0xf5, 0x7e, 0x53, 0x49, 0x5f, 0x44, 0xb9, 0x7e, 0x11, 0x65, + 0xe0, 0x2f, 0x76, 0x3f, 0xfa, 0xf9, 0xc7, 0x17, 0xdd, 0xa2, 0x27, 0xd4, 0xe7, 0x24, 0x14, 0xeb, + 0x47, 0xdc, 0x3c, 0xa3, 0xbe, 0xa3, 0x0c, 0xaf, 0x0b, 0x69, 0x7a, 0x23, 0x2b, 0x9e, 0x43, 0xf8, + 0x7d, 0x58, 0x27, 0x1e, 0xe5, 0x9c, 0xd8, 0xc6, 0x29, 0xa1, 0xce, 0x29, 0x97, 0x56, 0xdb, 0xa8, + 0x5b, 0xd1, 0x9f, 0x64, 0xe8, 0xa1, 0x00, 0xb1, 0x0a, 0x75, 0x72, 0x1e, 0xd0, 0x70, 0x61, 0x24, + 0x36, 0x48, 0x20, 0x26, 0x6a, 0xfd, 0x6d, 0xa2, 0xe9, 0xb5, 0x47, 0xbb, 0xb5, 0x8b, 0xdf, 0xb7, + 0xd0, 0xeb, 0x3f, 0xb6, 0x90, 0x0e, 0xa9, 0x30, 0xa1, 0x3a, 0xeb, 0xb0, 0x76, 0x90, 0x9e, 0x53, + 0xf2, 0x7a, 0xa4, 0xf3, 0x2d, 0x02, 0xd8, 0xa7, 0xc4, 0xb5, 0x5f, 0x99, 0x6e, 0x4c, 0x70, 0x13, + 0xaa, 0x27, 0x49, 0x94, 0xb9, 0x98, 0x06, 0x09, 0x3a, 0x4f, 0x68, 0x61, 0xdf, 0xaa, 0x9e, 0x06, + 0x78, 0x1f, 0x6a, 0x2c, 0x20, 0xa1, 0xc9, 0x59, 0x6a, 0xdc, 0x7a, 0x7f, 0x5b, 0x79, 0xcb, 0x6d, + 0x2a, 0xa2, 0xcd, 0x38, 0x53, 0xe8, 0xb9, 0x36, 0xf1, 0xcf, 0x27, 0x8e, 0xc9, 0x89, 0x30, 0xb7, + 0xa6, 0x67, 0x51, 0xc7, 0x81, 0xb5, 0xfc, 0x95, 0x06, 0xfe, 0x02, 0x7f, 0x0a, 0xcb, 0x62, 0x9c, + 0x48, 0x42, 0xed, 0x4a, 0xb7, 0xde, 0xff, 0xe0, 0x9f, 0xbb, 0x89, 0xa5, 0xf4, 0x4c, 0x56, 0x68, + 0x54, 0x7e, 0xb8, 0x91, 0xeb, 0xfe, 0x77, 0x8d, 0x2e, 0x10, 0xac, 0xe7, 0x9d, 0x86, 0x2c, 0xf6, + 0xf9, 0xbf, 0xef, 0x75, 0x00, 0x60, 0x31, 0x2f, 0x30, 0x53, 0x1f, 0xca, 0xc2, 0x87, 0xb7, 0x17, + 0x19, 0xe6, 0xe9, 0x7a, 0x41, 0x7a, 0x63, 0x72, 0x45, 0x9c, 0x5f, 0x66, 0xf2, 0x43, 0xe6, 0xfc, + 0x8a, 0x6e, 0xb9, 0x63, 0xe3, 0x59, 0x32, 0x47, 0x16, 0xef, 0x88, 0xf3, 0x79, 0x9c, 0x0f, 0xa6, + 0x50, 0xf5, 0x56, 0x8f, 0xbe, 0xd8, 0xf5, 0xb1, 0x7b, 0xf4, 0x3b, 0xbf, 0x20, 0xa8, 0xe7, 0xd4, + 0x38, 0xfc, 0xbf, 0xec, 0xb5, 0xfd, 0x3d, 0x82, 0x27, 0xb7, 0xbe, 0x40, 0x2c, 0x43, 0x6b, 0x5f, + 0x53, 0x8f, 0xf6, 0x8c, 0xf1, 0xb1, 0xaa, 0x0f, 0xa6, 0x63, 0xdd, 0x78, 0x39, 0x9a, 0x1c, 0xab, + 0x43, 0x6d, 0x5f, 0x53, 0xf7, 0x1a, 0x25, 0x2c, 0x41, 0xf3, 0x0e, 0xaf, 0x7e, 0xfe, 0x72, 0x70, + 0xd4, 0x40, 0xf8, 0x19, 0xbc, 0x7b, 0x87, 0x19, 0x8e, 0x47, 0xd3, 0x81, 0x36, 0x9a, 0x34, 0xca, + 0x78, 0x13, 0x36, 0xee, 0x90, 0xbb, 0xea, 0x81, 0x36, 0x9a, 0x7c, 0xa1, 0x4d, 0x0f, 0x1b, 0x95, + 0x7b, 0xb4, 0xea, 0x68, 0x2f, 0x25, 0x97, 0x5a, 0x4b, 0xdf, 0x7c, 0x27, 0x97, 0xb6, 0x7f, 0x42, + 0x00, 0x37, 0x47, 0x8a, 0x5b, 0xf0, 0x74, 0x38, 0xfe, 0xec, 0x78, 0x70, 0xdf, 0x8c, 0x4d, 0x68, + 0x14, 0xb8, 0xc2, 0x7c, 0x05, 0xf4, 0x40, 0x57, 0x07, 0x53, 0x55, 0x37, 0xa6, 0x87, 0x83, 0x51, + 0xa3, 0x9c, 0xac, 0x55, 0x20, 0x8f, 0xd4, 0xc9, 0x24, 0x65, 0x2a, 0xf8, 0x3d, 0x68, 0x3f, 0x20, + 0x33, 0xf2, 0xe2, 0x4b, 0xf8, 0x39, 0x6c, 0xde, 0xa7, 0xbf, 0x49, 0xa9, 0xa6, 0x6b, 0xec, 0xbe, + 0xba, 0xb8, 0x94, 0xd1, 0x9b, 0x4b, 0x19, 0xfd, 0x79, 0x29, 0xa3, 0xd7, 0x57, 0x72, 0xe9, 0xcd, + 0x95, 0x5c, 0xfa, 0xed, 0x4a, 0x2e, 0x7d, 0xf9, 0x89, 0x43, 0xf9, 0x69, 0x3c, 0x53, 0x2c, 0xe6, + 0xf5, 0x0a, 0x66, 0xbe, 0xf8, 0x9a, 0xf9, 0xa4, 0x08, 0xf4, 0xce, 0x6f, 0xff, 0x16, 0x48, 0xfe, + 0x85, 0x46, 0xb3, 0x65, 0x71, 0x11, 0x1f, 0xff, 0x15, 0x00, 0x00, 0xff, 0xff, 0xe4, 0x72, 0xba, + 0xd4, 0x34, 0x08, 0x00, 0x00, } func (m *Event) Marshal() (dAtA []byte, err error) { @@ -560,6 +691,16 @@ func (m *Event) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.ExpiryTime != nil { + n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.ExpiryTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.ExpiryTime):]) + if err1 != nil { + return 0, err1 + } + i -= n1 + i = encodeVarintGenesis(dAtA, i, uint64(n1)) + i-- + dAtA[i] = 0x52 + } if m.EmittedHeight != 0 { i = encodeVarintGenesis(dAtA, i, uint64(m.EmittedHeight)) i-- @@ -794,6 +935,63 @@ func (m *ConditionAll) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ConditionCount) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ConditionCount) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConditionCount) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Negate { + i-- + if m.Negate { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } + if m.Value != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.Value)) + i-- + dAtA[i] = 0x18 + } + if m.Comparator != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.Comparator)) + i-- + dAtA[i] = 0x10 + } + if len(m.Fields) > 0 { + for iNdEx := len(m.Fields) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Fields[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *ConditionAnd) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -938,6 +1136,10 @@ func (m *Event) Size() (n int) { if m.EmittedHeight != 0 { n += 1 + sovGenesis(uint64(m.EmittedHeight)) } + if m.ExpiryTime != nil { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.ExpiryTime) + n += 1 + l + sovGenesis(uint64(l)) + } return n } @@ -1009,6 +1211,30 @@ func (m *ConditionAll) Size() (n int) { return n } +func (m *ConditionCount) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Fields) > 0 { + for _, e := range m.Fields { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if m.Comparator != 0 { + n += 1 + sovGenesis(uint64(m.Comparator)) + } + if m.Value != 0 { + n += 1 + sovGenesis(uint64(m.Value)) + } + if m.Negate { + n += 2 + } + return n +} + func (m *ConditionAnd) Size() (n int) { if m == nil { return 0 @@ -1333,6 +1559,42 @@ func (m *Event) Unmarshal(dAtA []byte) error { break } } + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpiryTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ExpiryTime == nil { + m.ExpiryTime = new(time.Time) + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(m.ExpiryTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) @@ -1765,6 +2027,148 @@ func (m *ConditionAll) Unmarshal(dAtA []byte) error { } return nil } +func (m *ConditionCount) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ConditionCount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ConditionCount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Fields", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Fields = append(m.Fields, &FieldValue{}) + if err := m.Fields[len(m.Fields)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Comparator", wireType) + } + m.Comparator = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Comparator |= Comparator(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + m.Value = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Value |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Negate", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Negate = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ConditionAnd) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/eventmanager/types/keys.go b/x/eventmanager/types/keys.go index 19e0e58d1..f98c9f63b 100644 --- a/x/eventmanager/types/keys.go +++ b/x/eventmanager/types/keys.go @@ -38,6 +38,7 @@ const ( EventTypeICQUmeeLeverageBalance = int32(0x10) EventTypeICQUmeeReserves = int32(0x11) EventTypeICQUmeeTotalBorrows = int32(0x12) + EventTypeUnbond = int32(0x13) FieldEventType = "eventtype" FieldModule = "module" diff --git a/x/eventmanager/types/fields.go b/x/eventmanager/types/resolver.go similarity index 85% rename from x/eventmanager/types/fields.go rename to x/eventmanager/types/resolver.go index ceb48f22d..2f10e0e0b 100644 --- a/x/eventmanager/types/fields.go +++ b/x/eventmanager/types/resolver.go @@ -37,7 +37,7 @@ func (e Event) ResolveAnyFieldValues(fvs []*FieldValue) (bool, error) { func (e Event) resolveFieldValue(fv *FieldValue) (bool, error) { switch { case fv.Field == FieldEventType: - if fv.Operator != FieldOperator_EQUAL { + if fv.Operator != FIELD_OPERATOR_EQUAL { return false, fmt.Errorf("bad operator %d for field %s", fv.Operator, fv.Field) } v, err := strconv.ParseInt(fv.Value, 10, 32) @@ -49,7 +49,7 @@ func (e Event) resolveFieldValue(fv *FieldValue) (bool, error) { } return fv.Negate, nil case fv.Field == FieldEventStatus: - if fv.Operator != FieldOperator_EQUAL { + if fv.Operator != FIELD_OPERATOR_EQUAL { return false, fmt.Errorf("bad operator %d for field %s", fv.Operator, fv.Field) } v, err := strconv.ParseInt(fv.Value, 10, 32) @@ -91,13 +91,13 @@ func (e Event) resolveFieldValue(fv *FieldValue) (bool, error) { func compare(operator FieldOperator, testValue, value string) (bool, error) { switch operator { - case FieldOperator_EQUAL: + case FIELD_OPERATOR_EQUAL: return testValue == value, nil - case FieldOperator_CONTAINS: + case FIELD_OPERATOR_CONTAINS: return strings.Contains(value, testValue), nil - case FieldOperator_BEGINSWITH: + case FIELD_OPERATOR_BEGINSWITH: return strings.HasPrefix(value, testValue), nil - case FieldOperator_ENDSWITH: + case FIELD_OPERATOR_ENDSWITH: return strings.HasSuffix(value, testValue), nil default: return false, fmt.Errorf("unrecognised operator %d", operator) @@ -109,19 +109,19 @@ func NewFieldValues(fields ...*FieldValue) []*FieldValue { } func FieldEqual(field, value string) *FieldValue { - return NewFieldValue(field, value, FieldOperator_EQUAL, false) + return NewFieldValue(field, value, FIELD_OPERATOR_EQUAL, false) } func FieldNotEqual(field, value string) *FieldValue { - return NewFieldValue(field, value, FieldOperator_EQUAL, true) + return NewFieldValue(field, value, FIELD_OPERATOR_EQUAL, true) } func FieldBegins(field, value string) *FieldValue { - return NewFieldValue(field, value, FieldOperator_BEGINSWITH, false) + return NewFieldValue(field, value, FIELD_OPERATOR_BEGINSWITH, false) } func FieldEnds(field, value string) *FieldValue { - return NewFieldValue(field, value, FieldOperator_ENDSWITH, false) + return NewFieldValue(field, value, FIELD_OPERATOR_ENDSWITH, false) } func NewFieldValue(field, value string, operator FieldOperator, negate bool) *FieldValue { diff --git a/x/interchainstaking/keeper/events.go b/x/interchainstaking/keeper/events.go index c2b1b1bd1..15e6f118d 100644 --- a/x/interchainstaking/keeper/events.go +++ b/x/interchainstaking/keeper/events.go @@ -47,12 +47,16 @@ func (c EventCallbacks) AddCallback(id string, fn interface{}) emtypes.EventCall func (c EventCallbacks) RegisterCallbacks() emtypes.EventCallbacks { return c. AddCallback(ICQEmitDelegatorDelegations, EventCallback(EmitDelegatorDelegations)). - AddCallback(TriggerCalculateRedemptionRate, EventCallback(CalculateRedemptionRate)) + AddCallback(TriggerCalculateRedemptionRate, EventCallback(CalculateRedemptionRate)). + AddCallback(ExecuteQueuedUnbondingsCb, EventCallback(ExecuteQueuedUnbondings)). + AddCallback(DistributeUnbondingsCb, EventCallback(DistributeUnbondings)) } const ( ICQEmitDelegatorDelegations = "ICQEmitDelegatorDelegations" TriggerCalculateRedemptionRate = "CalculateRedemptionRate" + ExecuteQueuedUnbondingsCb = "ExecuteQueuedUnbondings" + DistributeUnbondingsCb = "DistributeUnbondings" ) // ----------------------------------- @@ -93,3 +97,29 @@ func CalculateRedemptionRate(k *Keeper, ctx sdk.Context, args []byte) error { } return k.TriggerRedemptionRate(ctx, &zone) } + +type UnbondingsParams struct { + Epoch uint64 + Zone string + Rate sdk.Dec +} + +func ExecuteQueuedUnbondings(k *Keeper, ctx sdk.Context, args []byte) error { + var params UnbondingsParams + err := json.Unmarshal(args, ¶ms) + if err != nil { + return err + } + k.HandleQueuedUnbondings(ctx, params.Zone, int64(params.Epoch), params.Rate) + return nil +} + +func DistributeUnbondings(k *Keeper, ctx sdk.Context, args []byte) error { + var params UnbondingsParams + err := json.Unmarshal(args, ¶ms) + if err != nil { + return err + } + k.PayoutUnbondings(ctx, params.Epoch, params.Zone) + return nil +} diff --git a/x/interchainstaking/keeper/hooks.go b/x/interchainstaking/keeper/hooks.go index ceb1d6474..6cfa52fac 100644 --- a/x/interchainstaking/keeper/hooks.go +++ b/x/interchainstaking/keeper/hooks.go @@ -107,7 +107,7 @@ func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, epochNum return false }) - if err := k.HandleQueuedUnbondings(ctx, zone, epochNumber); err != nil { + if err := k.ScheduleQueuedUnbondings(ctx, zone, epochNumber); err != nil { // we can and need not panic here; logging the error is sufficient. // an error here is not expected, but also not terminal. // we don't return on failure here as we still want to attempt diff --git a/x/interchainstaking/keeper/redemptions.go b/x/interchainstaking/keeper/redemptions.go index 986367cdd..2e38adb45 100644 --- a/x/interchainstaking/keeper/redemptions.go +++ b/x/interchainstaking/keeper/redemptions.go @@ -2,6 +2,8 @@ package keeper import ( "crypto/sha256" + "encoding/binary" + "encoding/json" "errors" "fmt" "sort" @@ -146,10 +148,34 @@ func (k *Keeper) GetUnlockedTokensForZone(ctx sdk.Context, zone *types.Zone) (ma return availablePerValidator, total, nil } +func (k *Keeper) ScheduleQueuedUnbondings(ctx sdk.Context, zone *types.Zone, epoch int64) error { + cond, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.FieldEqual(emtypes.FieldIdentifier, fmt.Sprintf("distribute_unbonding/%d", epoch))), true) + if err != nil { + return err + } + + // can we exec this now if condition is satisfied? + + params := UnbondingsParams{Epoch: uint64(epoch), Zone: zone.ChainId, Rate: sdk.MinDec(zone.RedemptionRate, zone.LastRedemptionRate)} + paramsBytes, err := json.Marshal(params) + if err != nil { + return err + } + k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, zone.ChainId, "schedule_queued_unbondings", ExecuteQueuedUnbondingsCb, emtypes.EventTypeUnbond, emtypes.EventStatusPending, cond, + paramsBytes, + ) + return nil +} + // HandleQueuedUnbondings is called once per epoch to aggregate all queued unbondings into // a single unbond transaction per delegation. -func (k *Keeper) HandleQueuedUnbondings(ctx sdk.Context, zone *types.Zone, epoch int64) error { +func (k *Keeper) HandleQueuedUnbondings(ctx sdk.Context, chainId string, epoch int64, rate sdk.Dec) error { + zone, found := k.GetZone(ctx, chainId) + if !found { + return fmt.Errorf("unable to find zone %s", chainId) + } // total amount coins to withdraw + totalToWithdraw := sdk.NewCoin(zone.BaseDenom, sdk.ZeroInt()) // map of distributions per withdrawal @@ -159,13 +185,13 @@ func (k *Keeper) HandleQueuedUnbondings(ctx sdk.Context, zone *types.Zone, epoch amountToWithdrawPerWithdrawal := make(map[string]sdk.Coin, 0) // find total number of unlockedTokens (not locked by previous redelegations) for the given zone - _, totalAvailable, err := k.GetUnlockedTokensForZone(ctx, zone) + _, totalAvailable, err := k.GetUnlockedTokensForZone(ctx, &zone) if err != nil { return err } // get min of LastRedemptionRate (N-1) and RedemptionRate (N) - rate := sdk.MinDec(zone.LastRedemptionRate, zone.RedemptionRate) + //rate := sdk.MinDec(zone.LastRedemptionRate, zone.RedemptionRate) // iterate all withdrawal records for the zone in the QUEUED state. k.IterateZoneStatusWithdrawalRecords(ctx, zone.ChainId, types.WithdrawStatusQueued, func(idx int64, withdrawal types.WithdrawalRecord) bool { @@ -211,7 +237,7 @@ func (k *Keeper) HandleQueuedUnbondings(ctx sdk.Context, zone *types.Zone, epoch return nil } - tokensAllocatedForWithdrawalPerValidator, err := k.DeterminePlanForUndelegation(ctx, zone, sdk.NewCoins(totalToWithdraw)) + tokensAllocatedForWithdrawalPerValidator, err := k.DeterminePlanForUndelegation(ctx, &zone, sdk.NewCoins(totalToWithdraw)) if err != nil { return err } @@ -244,7 +270,7 @@ func (k *Keeper) HandleQueuedUnbondings(ctx sdk.Context, zone *types.Zone, epoch k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, zone.ChainId, - fmt.Sprintf("unbond/%s/%s", valoper, sha256.Sum256(msg.GetSignBytes())), + fmt.Sprintf("unbond/%d/%s/%s", epoch, valoper, sha256.Sum256(msg.GetSignBytes())), "", emtypes.EventTypeICAUnbond, emtypes.EventStatusActive, @@ -254,6 +280,25 @@ func (k *Keeper) HandleQueuedUnbondings(ctx sdk.Context, zone *types.Zone, epoch } } + newCondition, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.FieldBegins(emtypes.FieldIdentifier, fmt.Sprintf("unbond/%d", epoch))), true) + if err != nil { + return err + } + + epochByte := make([]byte, 8) + binary.BigEndian.PutUint64(epochByte, uint64(epoch)) + + k.EventManagerKeeper.AddEvent(ctx, + types.ModuleName, + zone.ChainId, + fmt.Sprintf("distribute_unbonding/%d", epoch), + "", + emtypes.EventTypeUnbond, + emtypes.EventStatusPending, + newCondition, + epochByte, + ) + k.Logger(ctx).Info("unbonding messages to send", "msg", msgs) err = k.SubmitTx(ctx, msgs, zone.DelegationAddress, types.EpochWithdrawalMemo(epoch), zone.MessagesPerTx) diff --git a/x/interchainstaking/types/expected_keepers.go b/x/interchainstaking/types/expected_keepers.go index 545f45cbc..b58a6bf02 100644 --- a/x/interchainstaking/types/expected_keepers.go +++ b/x/interchainstaking/types/expected_keepers.go @@ -2,6 +2,7 @@ package types import ( "context" + time "time" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/authz" @@ -71,5 +72,6 @@ type AuthzKeeper interface { type EventManagerKeeper interface { AddEvent(ctx sdk.Context, module, chainID, identifier, callback string, eventType, status int32, condtion emtypes.ConditionI, payload []byte) + AddEventWithExpiry(ctx sdk.Context, module, chainID, identifier, eventType, status int32, expiry time.Time) MarkCompleted(ctx sdk.Context, module string, chainID string, identifier string) } diff --git a/x/participationrewards/keeper/hooks.go b/x/participationrewards/keeper/hooks.go index 64036de61..ed7225bec 100644 --- a/x/participationrewards/keeper/hooks.go +++ b/x/participationrewards/keeper/hooks.go @@ -77,12 +77,12 @@ func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, _ int64) k.Logger(ctx).Error(err.Error()) } - conditionGetEpochHeight, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "get_epoch_height", emtypes.FieldOperator_EQUAL, true)), false) + conditionGetEpochHeight, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "get_epoch_height", emtypes.FIELD_OPERATOR_EQUAL, true)), false) if err != nil { panic(err) } - conditionValidatorPerformance, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "validator_performance", emtypes.FieldOperator_EQUAL, true)), false) + conditionValidatorPerformance, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "validator_performance", emtypes.FIELD_OPERATOR_EQUAL, true)), false) if err != nil { panic(err) } @@ -95,7 +95,7 @@ func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, _ int64) // add event to ensure submodule hooks are called when the validator_performance and get_epoch_height calls have returned. k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, "", "submodules", Submodules, emtypes.EventTypeSubmodules, emtypes.EventStatusPending, conditionSubmodulePre, nil) - conditionSubmoduleComplete, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "submodule", emtypes.FieldOperator_BEGINSWITH, true)), false) + conditionSubmoduleComplete, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "submodule", emtypes.FIELD_OPERATOR_BEGINSWITH, true)), false) if err != nil { panic(err) } @@ -107,7 +107,7 @@ func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, _ int64) // add calc_tokens event to be triggered on satisfaction of all submodule*, validator_performance, and get_epoch_height calls events. k.EventManagerKeeper.AddEvent(ctx, types.ModuleName, "", "calc_tokens", CalculateValues, emtypes.EventTypeCalculateTvls, emtypes.EventStatusPending, conditionCalcTokensPre, nil) - conditionCalcTokensComplete, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "calc_tokens", emtypes.FieldOperator_EQUAL, true)), false) + conditionCalcTokensComplete, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.NewFieldValue(emtypes.FieldIdentifier, "calc_tokens", emtypes.FIELD_OPERATOR_EQUAL, true)), false) if err != nil { panic(err) } From 92a581901548b82d1eec8cee38de647444d8dc7e Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Tue, 6 Aug 2024 18:18:47 +0100 Subject: [PATCH 18/19] Xwip --- x/interchainstaking/keeper/events.go | 6 +-- x/interchainstaking/keeper/redemptions.go | 38 +++++++++++++++++++ x/interchainstaking/types/expected_keepers.go | 2 +- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/x/interchainstaking/keeper/events.go b/x/interchainstaking/keeper/events.go index 15e6f118d..767bbe9f5 100644 --- a/x/interchainstaking/keeper/events.go +++ b/x/interchainstaking/keeper/events.go @@ -110,8 +110,7 @@ func ExecuteQueuedUnbondings(k *Keeper, ctx sdk.Context, args []byte) error { if err != nil { return err } - k.HandleQueuedUnbondings(ctx, params.Zone, int64(params.Epoch), params.Rate) - return nil + return k.HandleQueuedUnbondings(ctx, params.Zone, int64(params.Epoch), params.Rate) } func DistributeUnbondings(k *Keeper, ctx sdk.Context, args []byte) error { @@ -120,6 +119,5 @@ func DistributeUnbondings(k *Keeper, ctx sdk.Context, args []byte) error { if err != nil { return err } - k.PayoutUnbondings(ctx, params.Epoch, params.Zone) - return nil + return k.PayoutUnbondings(ctx, int64(params.Epoch), params.Zone) } diff --git a/x/interchainstaking/keeper/redemptions.go b/x/interchainstaking/keeper/redemptions.go index 2e38adb45..c04d3b167 100644 --- a/x/interchainstaking/keeper/redemptions.go +++ b/x/interchainstaking/keeper/redemptions.go @@ -12,6 +12,7 @@ import ( sdkmath "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" "github.com/quicksilver-zone/quicksilver/utils" @@ -462,3 +463,40 @@ WITHDRAWAL: return coinsOutPerValidator, txHashesPerValidator, distributionsPerWithdrawal, nil } + +func (k *Keeper) PayoutUnbondings(ctx sdk.Context, epoch int64, chainId string) error { + zone, ok := k.GetZone(ctx, chainId) + if !ok { + return fmt.Errorf("zone not found") + } + k.IterateZoneStatusWithdrawalRecords(ctx, chainId, types.WithdrawStatusUnbond, func(idx int64, withdrawal types.WithdrawalRecord) bool { + if ctx.BlockTime().After(withdrawal.CompletionTime) && withdrawal.Acknowledged { // completion date has passed. + k.Logger(ctx).Info("found completed unbonding") + sendMsg := &banktypes.MsgSend{FromAddress: zone.DelegationAddress.GetAddress(), ToAddress: withdrawal.Recipient, Amount: sdk.Coins{withdrawal.Amount[0]}} + err := k.SubmitTx(ctx, []sdk.Msg{sendMsg}, zone.DelegationAddress, types.TxUnbondSendMemo(withdrawal.Txhash), zone.MessagesPerTx) + + if err != nil { + k.Logger(ctx).Error("error submitting transaction - requeue withdrawal", "error", err) + + // do not update status and increment completion time + withdrawal.DelayCompletion(ctx, types.DefaultWithdrawalRequeueDelay) + err = k.SetWithdrawalRecord(ctx, withdrawal) + if err != nil { + k.Logger(ctx).Error("error updating withdrawal record", "error", err) + } + + } else { + k.Logger(ctx).Info("sending funds", "for", withdrawal.Delegator, "delegate_account", zone.DelegationAddress.GetAddress(), "to", withdrawal.Recipient, "amount", withdrawal.Amount) + k.UpdateWithdrawalRecordStatus(ctx, &withdrawal, types.WithdrawStatusSend) + } + } + return false + }) + + return nil +} + +func (k *Keeper) HandleMaturedUnbondings(ctx sdk.Context, zone *types.Zone) error { + + return nil +} diff --git a/x/interchainstaking/types/expected_keepers.go b/x/interchainstaking/types/expected_keepers.go index b58a6bf02..3e40f9f4a 100644 --- a/x/interchainstaking/types/expected_keepers.go +++ b/x/interchainstaking/types/expected_keepers.go @@ -72,6 +72,6 @@ type AuthzKeeper interface { type EventManagerKeeper interface { AddEvent(ctx sdk.Context, module, chainID, identifier, callback string, eventType, status int32, condtion emtypes.ConditionI, payload []byte) - AddEventWithExpiry(ctx sdk.Context, module, chainID, identifier, eventType, status int32, expiry time.Time) + AddEventWithExpiry(ctx sdk.Context, module, chainID, identifier string, eventType, status int32, expiry time.Time) MarkCompleted(ctx sdk.Context, module string, chainID string, identifier string) } From 62c32ba096c18baf85e8fabea363f2995d4f9c64 Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Wed, 18 Sep 2024 21:57:35 +0100 Subject: [PATCH 19/19] wip --- go.mod | 8 +- go.sum | 9 +- go.work.sum | 1734 ----------------- icq-relayer/go.mod | 91 +- icq-relayer/go.sum | 154 +- test/interchaintest/interchainstaking_test.go | 352 ++++ test/interchaintest/setup.go | 100 + test/interchaintest/util/sidecars.go | 119 ++ x/eventmanager/keeper/client/cli/query.go | 61 + x/eventmanager/module.go | 3 +- x/eventmanager/types/resolver.go | 2 +- .../keeper/ibc_packet_handlers_test.go | 2 +- x/interchainstaking/keeper/redemptions.go | 2 +- .../keeper/redemptions_test.go | 2 +- 14 files changed, 744 insertions(+), 1895 deletions(-) create mode 100644 test/interchaintest/interchainstaking_test.go create mode 100644 test/interchaintest/setup.go create mode 100644 test/interchaintest/util/sidecars.go create mode 100644 x/eventmanager/keeper/client/cli/query.go diff --git a/go.mod b/go.mod index b769c3cf7..1c7f57e3d 100644 --- a/go.mod +++ b/go.mod @@ -13,6 +13,7 @@ require ( github.com/confio/ics23/go v0.9.1 github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.46.16 + github.com/cosmos/go-bip39 v1.0.0 github.com/cosmos/gogoproto v1.7.0 github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v6 v6.1.2 github.com/cosmos/ibc-go/v6 v6.3.1 @@ -34,6 +35,7 @@ require ( github.com/tendermint/tendermint v0.34.33 github.com/tendermint/tm-db v0.6.8-0.20220506192307-f628bb5dc95b go.opencensus.io v0.24.0 + go.uber.org/zap v1.27.0 golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 golang.org/x/tools v0.27.0 google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed @@ -113,7 +115,6 @@ require ( github.com/coinbase/rosetta-sdk-go v0.8.5 // indirect github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect - github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/iavl v0.19.6 // indirect github.com/cosmos/ledger-cosmos-go v0.12.4 // indirect github.com/creachadair/taskgroup v0.9.0 // indirect @@ -126,7 +127,7 @@ require ( github.com/desertbit/timer v1.0.1 // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect github.com/dgraph-io/badger/v4 v4.2.0 // indirect - github.com/dgraph-io/ristretto v0.1.1 // indirect + github.com/dgraph-io/ristretto v0.2.0 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect @@ -159,7 +160,6 @@ require ( github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gofrs/flock v0.12.1 // indirect github.com/gogo/gateway v1.1.0 // indirect - github.com/golang/glog v1.2.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a // indirect @@ -317,11 +317,11 @@ require ( go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect go.opentelemetry.io/otel v1.29.0 // indirect go.opentelemetry.io/otel/metric v1.29.0 // indirect + go.opentelemetry.io/otel/sdk v1.29.0 // indirect go.opentelemetry.io/otel/trace v1.29.0 // indirect go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/mock v0.4.0 // indirect go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.27.0 // indirect golang.org/x/crypto v0.29.0 // indirect golang.org/x/exp/typeparams v0.0.0-20240909161429-701f63a606c0 //indirect golang.org/x/mod v0.22.0 // indirect diff --git a/go.sum b/go.sum index e61439eb0..95159828e 100644 --- a/go.sum +++ b/go.sum @@ -479,8 +479,7 @@ github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN 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/ristretto v0.0.3-0.20200630154024-f66de99634de/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.2.0 h1:XAfl+7cmoUDWW/2Lx8TGZQjjxIQ2Ley9DSf52dru4WE= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= @@ -615,8 +614,6 @@ github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.2.2 h1:1+mZ9upx1Dh6FmUTFR1naJ77miKiXgALjWOZ3NVFPmY= -github.com/golang/glog v1.2.2/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -1371,8 +1368,7 @@ go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= -go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= -go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= +go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= @@ -1674,7 +1670,6 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/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.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/go.work.sum b/go.work.sum index d7c3d4d4e..75d8a6d8f 100644 --- a/go.work.sum +++ b/go.work.sum @@ -1,1450 +1,227 @@ -cel.dev/expr v0.15.0 h1:O1jzfJCQBfL5BFoYktaxwIhuttaQPsVWerH9/EEKx0w= cel.dev/expr v0.15.0/go.mod h1:TRSuuV7DlVCE/uwv5QbAiW/v8l5O8C4eEPHeu7gf7Sg= -cel.dev/expr v0.16.0 h1:yloc84fytn4zmJX2GU3TkXGsaieaV7dQ057Qs4sIG2Y= cel.dev/expr v0.16.0/go.mod h1:TRSuuV7DlVCE/uwv5QbAiW/v8l5O8C4eEPHeu7gf7Sg= -cloud.google.com/go v0.0.0-20170206221025-ce650573d812/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= -cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= -cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= -cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= -cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= cloud.google.com/go v0.112.2/go.mod h1:iEqjp//KquGIJV/m+Pk3xecgKNhV+ry+vVTsy4TbDms= -cloud.google.com/go v0.113.0/go.mod h1:glEqlogERKYeePz6ZdkcLJ28Q2I6aERgDDErBg9GzO8= -cloud.google.com/go v0.114.0/go.mod h1:ZV9La5YYxctro1HTPug5lXH/GefROyW8PPD4T8n9J8E= -cloud.google.com/go/accessapproval v1.7.5/go.mod h1:g88i1ok5dvQ9XJsxpUInWWvUBrIZhyPDPbk4T01OoJ0= -cloud.google.com/go/accessapproval v1.7.7 h1:vO95gvBi7qUgfA9SflexQs9hB4U4tnri/GwADIrLQy8= -cloud.google.com/go/accessapproval v1.7.7/go.mod h1:10ZDPYiTm8tgxuMPid8s2DL93BfCt6xBh/Vg0Xd8pU0= -cloud.google.com/go/accessapproval v1.8.0 h1:DLU5ua2WQXvdUL6yd/D4XFPXyd6acv1hNJJBMdt6Fh0= cloud.google.com/go/accessapproval v1.8.0/go.mod h1:ycc7qSIXOrH6gGOGQsuBwpRZw3QhZLi0OWeej3rA5Mg= -cloud.google.com/go/accesscontextmanager v1.8.7 h1:GgdNoDwZR5RIO3j8XwXqa6Gc6q5mP3KYMdFC7FEVyG4= -cloud.google.com/go/accesscontextmanager v1.8.7/go.mod h1:jSvChL1NBQ+uLY9zUBdPy9VIlozPoHptdBnRYeWuQoM= -cloud.google.com/go/accesscontextmanager v1.9.0 h1:K0zCbd23A64sdJmOZDaW39dEMB6JVnGz2uycwd8PTu0= cloud.google.com/go/accesscontextmanager v1.9.0/go.mod h1:EmdQRGq5FHLrjGjGTp2X2tlRBvU3LDCUqfnysFYooxQ= -cloud.google.com/go/ai v0.8.0 h1:rXUEz8Wp2OlrM8r1bfmpF2+VKqc1VJpafE3HgzRnD/w= -cloud.google.com/go/ai v0.8.0/go.mod h1:t3Dfk4cM61sytiggo2UyGsDVW3RF1qGZaUKDrZFyqkE= -cloud.google.com/go/aiplatform v1.68.0 h1:EPPqgHDJpBZKRvv+OsB3cr0jYz3EL2pZ+802rBPcG8U= cloud.google.com/go/aiplatform v1.68.0/go.mod h1:105MFA3svHjC3Oazl7yjXAmIR89LKhRAeNdnDKJczME= -cloud.google.com/go/analytics v0.23.2 h1:O0fj88npvQFxg8LfXo7fArcSrC/wtAstGuWQ7dCHWjg= -cloud.google.com/go/analytics v0.23.2/go.mod h1:vtE3olAXZ6edJYk1UOndEs6EfaEc9T2B28Y4G5/a7Fo= -cloud.google.com/go/analytics v0.25.0 h1:vJdNlQCfvgwxHl7bn5pqON6k5/PzVA+Uk5m5nWaFh84= cloud.google.com/go/analytics v0.25.0/go.mod h1:LZMfjJnKU1GDkvJV16dKnXm7KJJaMZfvUXx58ujgVLg= -cloud.google.com/go/apigateway v1.6.7 h1:DO5Vn3zmY1aDyfoqni8e8+x+lwrfLCoAAbEui9NB0y8= -cloud.google.com/go/apigateway v1.6.7/go.mod h1:7wAMb/33Rzln+PrGK16GbGOfA1zAO5Pq6wp19jtIt7c= -cloud.google.com/go/apigateway v1.7.0 h1:KfvzagH2g7O6K/egrXopAbpvsxeDGNf2dbG7F39/4Jk= cloud.google.com/go/apigateway v1.7.0/go.mod h1:miZGNhmrC+SFhxjA7ayjKHk1cA+7vsSINp9K+JxKwZI= -cloud.google.com/go/apigeeconnect v1.6.7 h1:z08Xuv7ZtaB2d4jsJi9/WhbnnI5s19wlLDZpssn3Fus= -cloud.google.com/go/apigeeconnect v1.6.7/go.mod h1:hZxCKvAvDdKX8+eT0g5eEAbRSS9Gkzi+MPWbgAMAy5U= -cloud.google.com/go/apigeeconnect v1.7.0 h1:/1m2gI6xt9146I8dhTtBKR8dGLb4WqYbMT7SViCkKEU= cloud.google.com/go/apigeeconnect v1.7.0/go.mod h1:fd8NFqzu5aXGEUpxiyeCyb4LBLU7B/xIPztfBQi+1zg= -cloud.google.com/go/apigeeregistry v0.8.5 h1:o1C/+IvzwYeV1doum61XmJQ/Bwpk/4+2DT1JyVu2x64= -cloud.google.com/go/apigeeregistry v0.8.5/go.mod h1:ZMg60hq2K35tlqZ1VVywb9yjFzk9AJ7zqxrysOxLi3o= -cloud.google.com/go/apigeeregistry v0.9.0 h1:nDQW/S5YjH3wmHoUy53x4CIcccbukxjqEq0EjMJUYoA= cloud.google.com/go/apigeeregistry v0.9.0/go.mod h1:4S/btGnijdt9LSIZwBDHgtYfYkFGekzNyWkyYTP8Qzs= -cloud.google.com/go/appengine v1.8.7 h1:qYrjEHEFY7+CL4QlHIHuwTgrTnZbSKzdPFqgjZDsQNo= -cloud.google.com/go/appengine v1.8.7/go.mod h1:1Fwg2+QTgkmN6Y+ALGwV8INLbdkI7+vIvhcKPZCML0g= -cloud.google.com/go/appengine v1.9.0 h1:8i/2xM6NrMI6Js2P5Ojsbr3J4SNOjLHpuqNeMsbvpp4= cloud.google.com/go/appengine v1.9.0/go.mod h1:y5oI+JT3/6s77QmxbTnLHyiMKz3NPHYOjuhmVi+FyYU= -cloud.google.com/go/area120 v0.8.7 h1:sUrR96yokdL6tTTXK0X13V1TLMta8/1u328bRG5lWZc= -cloud.google.com/go/area120 v0.8.7/go.mod h1:L/xTq4NLP9mmxiGdcsVz7y1JLc9DI8pfaXRXbnjkR6w= -cloud.google.com/go/area120 v0.9.0 h1:HdrEaFo0n28gOrPlB6BXEVPQ2x9GZep2rkCvPcMINIg= cloud.google.com/go/area120 v0.9.0/go.mod h1:ujIhRz2gJXutmFYGAUgz3KZ5IRJ6vOwL4CYlNy/jDo4= -cloud.google.com/go/artifactregistry v1.14.9 h1:SSvoD0ofOydm5gA1++15pW9VPgQbk0OmNlcb7JczoO4= -cloud.google.com/go/artifactregistry v1.14.9/go.mod h1:n2OsUqbYoUI2KxpzQZumm6TtBgtRf++QulEohdnlsvI= -cloud.google.com/go/artifactregistry v1.15.0 h1:fHsfq5+Vir1FjEMGn7lbiSygyG+TXdtb1uRXQ72SDg4= cloud.google.com/go/artifactregistry v1.15.0/go.mod h1:4xrfigx32/3N7Pp7YSPOZZGs4VPhyYeRyJ67ZfVdOX4= -cloud.google.com/go/asset v1.19.1 h1:mCqyoaDjDzaW1RqmmQtCJuawb9nca5bEu7HvVcpZDwg= -cloud.google.com/go/asset v1.19.1/go.mod h1:kGOS8DiCXv6wU/JWmHWCgaErtSZ6uN5noCy0YwVaGfs= -cloud.google.com/go/asset v1.20.0 h1:2kHJKyVUEbuisDjvOK9+XQrvoosEBqsb6yaEzq5gaWY= cloud.google.com/go/asset v1.20.0/go.mod h1:CT3ME6xNZKsPSvi0lMBPgW3azvRhiurJTFSnNl6ahw8= -cloud.google.com/go/assuredworkloads v1.11.7 h1:xieyFA+JKyTDkO/Z9UyVEpkHW8pDYykU51O4G0pvXEg= -cloud.google.com/go/assuredworkloads v1.11.7/go.mod h1:CqXcRH9N0KCDtHhFisv7kk+cl//lyV+pYXGi1h8rCEU= -cloud.google.com/go/assuredworkloads v1.12.0 h1:ZolaDkCGpBFrvrEc/lvdJ584NRmIahc8MMC9vqPkWrc= cloud.google.com/go/assuredworkloads v1.12.0/go.mod h1:jX84R+0iANggmSbzvVgrGWaqdhRsQihAv4fF7IQ4r7Q= cloud.google.com/go/auth v0.3.0/go.mod h1:lBv6NKTWp8E3LPzmO1TbiiRKc4drLOfHsgmlH9ogv5w= -cloud.google.com/go/auth v0.4.1/go.mod h1:QVBuVEKpCn4Zp58hzRGvL0tjRGU0YqdRTdCHM1IHnro= cloud.google.com/go/auth v0.6.1/go.mod h1:eFHG7zDzbXHKmjJddFG/rBlcGp6t25SwRUiEQSlO4x4= cloud.google.com/go/auth v0.7.2/go.mod h1:VEc4p5NNxycWQTMQEDQF0bd6aTMb6VgYDXEwiJJQAbs= cloud.google.com/go/auth v0.8.0/go.mod h1:qGVp/Y3kDRSDZ5gFD/XPUfYQ9xW1iI7q8RIRoCyBbJc= cloud.google.com/go/auth v0.9.0/go.mod h1:2HsApZBr9zGZhC9QAXsYVYaWk8kNUt37uny+XVKi7wM= cloud.google.com/go/auth/oauth2adapt v0.2.3/go.mod h1:tMQXOfZzFuNuUxOypHlQEXgdfX5cuhwU+ffUuXRJE8I= -cloud.google.com/go/automl v1.13.5/go.mod h1:MDw3vLem3yh+SvmSgeYUmUKqyls6NzSumDm9OJ3xJ1Y= -cloud.google.com/go/automl v1.13.7 h1:w9AyogtMLXbcy5kzXPvk/Q3MGQkgJH7ZDB8fAUUxTt8= -cloud.google.com/go/automl v1.13.7/go.mod h1:E+s0VOsYXUdXpq0y4gNZpi0A/s6y9+lAarmV5Eqlg40= -cloud.google.com/go/automl v1.14.0 h1:SkYEYiiYHDZmnIdk5ZnCo6pTgOwKdpcOFma27ZDjh0o= cloud.google.com/go/automl v1.14.0/go.mod h1:Kr7rN9ANSjlHyBLGvwhrnt35/vVZy3n/CP4Xmyj0shM= -cloud.google.com/go/baremetalsolution v1.2.6 h1:W4oSMS6vRCo9DLr1RPyDP8oeLverbvhJRzaZSsipft8= -cloud.google.com/go/baremetalsolution v1.2.6/go.mod h1:KkS2BtYXC7YGbr42067nzFr+ABFMs6cxEcA1F+cedIw= -cloud.google.com/go/baremetalsolution v1.3.0 h1:Ht+IPfbdjNGsOAaZqSkPJ+w/to4e7CzDZ1z9GaBkYV4= cloud.google.com/go/baremetalsolution v1.3.0/go.mod h1:E+n44UaDVO5EeSa4SUsDFxQLt6dD1CoE2h+mtxxaJKo= -cloud.google.com/go/batch v1.8.7 h1:zaQwOAd7TlE84pwPHavNMsnv5zRyRV8ym2DJ4iQ2cV0= -cloud.google.com/go/batch v1.8.7/go.mod h1:O5/u2z8Wc7E90Bh4yQVLQIr800/0PM5Qzvjac3Jxt4k= -cloud.google.com/go/batch v1.10.0 h1:yE/0VZZtAhsaPTEc3OqDXmsjFX/739HcRMfAy0OuiUU= cloud.google.com/go/batch v1.10.0/go.mod h1:JlktZqyKbcUJWdHOV8juvAiQNH8xXHXTqLp6bD9qreE= -cloud.google.com/go/beyondcorp v1.0.6 h1:KBcujO3QRvBIwzZLtvQEPB9SXdovHnMBx0V/uhucH9o= -cloud.google.com/go/beyondcorp v1.0.6/go.mod h1:wRkenqrVRtnGFfnyvIg0zBFUdN2jIfeojFF9JJDwVIA= -cloud.google.com/go/beyondcorp v1.1.0 h1:xETx1qRUghe5f5pPIFLSmN+I3g3FNGiiftEX7cTYztI= cloud.google.com/go/beyondcorp v1.1.0/go.mod h1:F6Rl20QbayaloWIsMhuz+DICcJxckdFKc7R2HCe6iNA= -cloud.google.com/go/bigquery v1.61.0 h1:w2Goy9n6gh91LVi6B2Sc+HpBl8WbWhIyzdvVvrAuEIw= -cloud.google.com/go/bigquery v1.61.0/go.mod h1:PjZUje0IocbuTOdq4DBOJLNYB0WF3pAKBHzAYyxCwFo= -cloud.google.com/go/bigquery v1.62.0 h1:SYEA2f7fKqbSRRBHb7g0iHTtZvtPSPYdXfmqsjpsBwo= cloud.google.com/go/bigquery v1.62.0/go.mod h1:5ee+ZkF1x/ntgCsFQJAQTM3QkAZOecfCmvxhkJsWRSA= -cloud.google.com/go/bigtable v1.31.0 h1:/uVLxGVRbK4mxK/iO89VqXcL/zoTSmkltVfIDYVBluQ= cloud.google.com/go/bigtable v1.31.0/go.mod h1:N/mwZO+4TSHOeyiE1JxO+sRPnW4bnR7WLn9AEaiJqew= -cloud.google.com/go/billing v1.18.5 h1:GbOg1uGvoV8FXxMStFoNcq5z9AEUwCpKt/6GNcuDSZM= -cloud.google.com/go/billing v1.18.5/go.mod h1:lHw7fxS6p7hLWEPzdIolMtOd0ahLwlokW06BzbleKP8= -cloud.google.com/go/billing v1.19.0 h1:hnFBA+u/O7mP9a1z5Um4oZ5dONrKV9XSCrlpMGP73wk= cloud.google.com/go/billing v1.19.0/go.mod h1:bGvChbZguyaWRGmu5pQHfFN1VxTDPFmabnCVA/dNdRM= -cloud.google.com/go/binaryauthorization v1.8.3 h1:RHnEM4HXbWShlGhPA0Jzj2YYETCHxmisNMU0OE2fXQM= -cloud.google.com/go/binaryauthorization v1.8.3/go.mod h1:Cul4SsGlbzEsWPOz2sH8m+g2Xergb6ikspUyQ7iOThE= -cloud.google.com/go/binaryauthorization v1.9.0 h1:O6O31WTrJhuRsXfTAOPj5iRD4WUOeKskHrpuWKSiCP8= cloud.google.com/go/binaryauthorization v1.9.0/go.mod h1:fssQuxfI9D6dPPqfvDmObof+ZBKsxA9iSigd8aSA1ik= -cloud.google.com/go/certificatemanager v1.8.1 h1:XURrQhj5COWAEvICivbGID/Hu67AvMYHAhMRIyc3Ux8= -cloud.google.com/go/certificatemanager v1.8.1/go.mod h1:hDQzr50Vx2gDB+dOfmDSsQzJy/UPrYRdzBdJ5gAVFIc= -cloud.google.com/go/certificatemanager v1.9.0 h1:dQQxtb+HnS9GbylmAImWkC9QR8zy/xwRiQrIaewbwgE= cloud.google.com/go/certificatemanager v1.9.0/go.mod h1:hQBpwtKNjUq+er6Rdg675N7lSsNGqMgt7Bt7Dbcm7d0= -cloud.google.com/go/channel v1.17.7 h1:PrplNaAS6Dn187e+OcGzyEKETX8iL3tCaDqcPPW7Zoo= -cloud.google.com/go/channel v1.17.7/go.mod h1:b+FkgBrhMKM3GOqKUvqHFY/vwgp+rwsAuaMd54wCdN4= -cloud.google.com/go/channel v1.18.0 h1:VqNv/GBepVRSaCKtD92bMZd/3siLlc8KFk4u21cUK/U= cloud.google.com/go/channel v1.18.0/go.mod h1:gQr50HxC/FGvufmqXD631ldL1Ee7CNMU5F4pDyJWlt0= -cloud.google.com/go/cloudbuild v1.16.1 h1:zkCG1dBezxRM3dtgQ9h1Y+IJ7V+lARWgp0l9k/SZsfU= -cloud.google.com/go/cloudbuild v1.16.1/go.mod h1:c2KUANTtCBD8AsRavpPout6Vx8W+fsn5zTsWxCpWgq4= -cloud.google.com/go/cloudbuild v1.17.0 h1:tMKv6Gh7jPH3TM3QBHkdPzls80kQbUSH9Q20Hn3QD40= cloud.google.com/go/cloudbuild v1.17.0/go.mod h1:/RbwgDlbQEwIKoWLIYnW72W3cWs+e83z7nU45xRKnj8= -cloud.google.com/go/clouddms v1.7.6 h1:Q47KKoA0zsNcC9U5aCmop5TPPItVq4cx7Wwqgra+5PU= -cloud.google.com/go/clouddms v1.7.6/go.mod h1:8HWZ2tznZ0mNAtTpfnRNT0QOThqn9MBUqTj0Lx8npIs= -cloud.google.com/go/clouddms v1.8.0 h1:BBPvI//wT1n3ruqVGDgCxBdpu9/era/b3B/HsiY8SyU= cloud.google.com/go/clouddms v1.8.0/go.mod h1:JUgTgqd1M9iPa7p3jodjLTuecdkGTcikrg7nz++XB5E= -cloud.google.com/go/cloudtasks v1.12.8 h1:Y0HUuiCAVk9BojLItOycBl91tY25NXH8oFsyi1IC/U4= -cloud.google.com/go/cloudtasks v1.12.8/go.mod h1:aX8qWCtmVf4H4SDYUbeZth9C0n9dBj4dwiTYi4Or/P4= -cloud.google.com/go/cloudtasks v1.13.0 h1:rKVSsQwh0CI68n3RalLoGuW7sOtq2eil2gVZK4Pyi40= cloud.google.com/go/cloudtasks v1.13.0/go.mod h1:O1jFRGb1Vm3sN2u/tBdPiVGVTWIsrsbEs3K3N3nNlEU= cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= -cloud.google.com/go/compute v1.27.0 h1:EGawh2RUnfHT5g8f/FX3Ds6KZuIBC77hZoDrBvEZw94= -cloud.google.com/go/compute v1.27.0/go.mod h1:LG5HwRmWFKM2C5XxHRiNzkLLXW48WwvyVC0mfWsYPOM= cloud.google.com/go/compute v1.28.0 h1:OPtBxMcheSS+DWfci803qvPly3d4w7Eu5ztKBcFfzwk= cloud.google.com/go/compute v1.28.0/go.mod h1:DEqZBtYrDnD5PvjsKwb3onnhX+qjdCVM7eshj1XdjV4= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= -cloud.google.com/go/contactcenterinsights v1.13.2 h1:46ertIh+cGkTg/lN7fN+TOx09SoM65dpdUp96vXBcMY= -cloud.google.com/go/contactcenterinsights v1.13.2/go.mod h1:AfkSB8t7mt2sIY6WpfO61nD9J9fcidIchtxm9FqJVXk= -cloud.google.com/go/contactcenterinsights v1.14.0 h1:hZSiEb53tyULmOSBlDPhEWPEe+vQ0F2gPQjOka1E5oE= cloud.google.com/go/contactcenterinsights v1.14.0/go.mod h1:APmWYHDN4sASnUBnXs4o68t1EUfnqadA53//CzXZ1xE= -cloud.google.com/go/container v1.37.0 h1:KZ5IbxnUNcTdBkMfZNum6z4tu61sFHf9Zk7Xl8RzWVI= -cloud.google.com/go/container v1.37.0/go.mod h1:AFsgViXsfLvZHsgHrWQqPqfAPjCwXrZmLjKJ64uhLIw= -cloud.google.com/go/container v1.39.0 h1:Q1oW01ENxkkG3uf1oYoTmHPdvP+yhFCIuCJ4mk2RwkQ= cloud.google.com/go/container v1.39.0/go.mod h1:gNgnvs1cRHXjYxrotVm+0nxDfZkqzBbXCffh5WtqieI= -cloud.google.com/go/containeranalysis v0.11.6 h1:mSrneOVadcpnDZHJebg+ts/10azGTUKOCSQET7KdT7g= -cloud.google.com/go/containeranalysis v0.11.6/go.mod h1:YRf7nxcTcN63/Kz9f86efzvrV33g/UV8JDdudRbYEUI= -cloud.google.com/go/containeranalysis v0.13.0 h1:+pm0vZAyHlkflBQRcpTWowroofRcNyn6gr5gUivI6Cc= cloud.google.com/go/containeranalysis v0.13.0/go.mod h1:OpufGxsNzMOZb6w5yqwUgHr5GHivsAD18KEI06yGkQs= -cloud.google.com/go/datacatalog v1.20.1 h1:czcba5mxwRM5V//jSadyig0y+8aOHmN7gUl9GbHu59E= -cloud.google.com/go/datacatalog v1.20.1/go.mod h1:Jzc2CoHudhuZhpv78UBAjMEg3w7I9jHA11SbRshWUjk= -cloud.google.com/go/datacatalog v1.22.0 h1:7e5/0B2LYbNx0BcUJbiCT8K2wCtcB5993z/v1JeLIdc= cloud.google.com/go/datacatalog v1.22.0/go.mod h1:4Wff6GphTY6guF5WphrD76jOdfBiflDiRGFAxq7t//I= -cloud.google.com/go/dataflow v0.9.7 h1:wKEakCbRevlwsWqTn34pWJUFmdbx0HKwpRH6HhU7NIs= -cloud.google.com/go/dataflow v0.9.7/go.mod h1:3BjkOxANrm1G3+/EBnEsTEEgJu1f79mFqoOOZfz3v+E= -cloud.google.com/go/dataflow v0.10.0 h1:AKl2CoSEGRTCYV03YREEDYVcncjg3G6tf8CZx4k4cRo= cloud.google.com/go/dataflow v0.10.0/go.mod h1:zAv3YUNe/2pXWKDSPvbf31mCIUuJa+IHtKmhfzaeGww= -cloud.google.com/go/dataform v0.9.4 h1:MiK1Us7YP9+sdNViUE4X2B2vLScrKcjOPw5b6uamZvE= -cloud.google.com/go/dataform v0.9.4/go.mod h1:jjo4XY+56UrNE0wsEQsfAw4caUs4DLJVSyFBDelRDtQ= -cloud.google.com/go/dataform v0.10.0 h1:yJ4RbaIw9ivlHrWCTxPxojM1VtCMSNCsF3xR8ohMGKc= cloud.google.com/go/dataform v0.10.0/go.mod h1:0NKefI6v1ppBEDnwrp6gOMEA3s/RH3ypLUM0+YWqh6A= -cloud.google.com/go/datafusion v1.7.7 h1:ViFnMnUK7LNcWvisZgihxXit76JxSHFeijYI5U/gjOE= -cloud.google.com/go/datafusion v1.7.7/go.mod h1:qGTtQcUs8l51lFA9ywuxmZJhS4ozxsBSus6ItqCUWMU= -cloud.google.com/go/datafusion v1.8.0 h1:87ukhTCPlWBYQSCExQRJcAa6HSp/g40hZsImQre9Ng8= cloud.google.com/go/datafusion v1.8.0/go.mod h1:zHZ5dJYHhMP1P8SZDZm+6yRY9BCCcfm7Xg7YmP+iA6E= -cloud.google.com/go/datalabeling v0.8.7 h1:M6irSHns6VxMro+IbvDxDJLD6tkfjlW+mo2MPaM23KA= -cloud.google.com/go/datalabeling v0.8.7/go.mod h1:/PPncW5gxrU15UzJEGQoOT3IobeudHGvoExrtZ8ZBwo= -cloud.google.com/go/datalabeling v0.9.0 h1:7pIXkYYp6kya0XG27zOB0Tsnn3rjJ05xBIqvN4edzp4= cloud.google.com/go/datalabeling v0.9.0/go.mod h1:GVX4sW4cY5OPKu/9v6dv20AU9xmGr4DXR6K26qN0mzw= -cloud.google.com/go/dataplex v1.16.0 h1:e8SV0yKuSjgHEZaQcZwjKXe0ta1jZrvLxX/2i/IAG+8= -cloud.google.com/go/dataplex v1.16.0/go.mod h1:OlBoytuQ56+7aUCC03D34CtoF/4TJ5SiIrLsBdDu87Q= -cloud.google.com/go/dataplex v1.19.0 h1:l3xIynMeZZi8U7bFTNTzPUiCrnBZLJMp62vlrcBRyeE= cloud.google.com/go/dataplex v1.19.0/go.mod h1:5H9ftGuZWMtoEIUpTdGUtGgje36YGmtRXoC8wx6QSUc= -cloud.google.com/go/dataproc/v2 v2.4.2 h1:RNMG5ffWKdbWOkwvjC4GqxLaxEaWFpm2hQCF2WFW/vo= -cloud.google.com/go/dataproc/v2 v2.4.2/go.mod h1:smGSj1LZP3wtnsM9eyRuDYftNAroAl6gvKp/Wk64XDE= -cloud.google.com/go/dataproc/v2 v2.6.0 h1:YjgcpuzUYX+Q/xCbh/+5+Nwx0DGzsO9nss/O7Usy79c= cloud.google.com/go/dataproc/v2 v2.6.0/go.mod h1:amsKInI+TU4GcXnz+gmmApYbiYM4Fw051SIMDoWCWeE= -cloud.google.com/go/dataqna v0.8.7 h1:qM60MGNTGsSJuzAziVJjtRA7pGby2dA8OuqdVRe/lYo= -cloud.google.com/go/dataqna v0.8.7/go.mod h1:hvxGaSvINAVH5EJJsONIwT1y+B7OQogjHPjizOFoWOo= -cloud.google.com/go/dataqna v0.9.0 h1:Wk8s3XHBwmk+5pUtevnFxwQ57bXnTtvSswdJnEjssR4= cloud.google.com/go/dataqna v0.9.0/go.mod h1:WlRhvLLZv7TfpONlb/rEQx5Qrr7b5sxgSuz5NP6amrw= -cloud.google.com/go/datastore v1.17.1 h1:6Me8ugrAOAxssGhSo8im0YSuy4YvYk4mbGvCadAH5aE= -cloud.google.com/go/datastore v1.17.1/go.mod h1:mtzZ2HcVtz90OVrEXXGDc2pO4NM1kiBQy8YV4qGe0ZM= -cloud.google.com/go/datastore v1.19.0 h1:p5H3bUQltOa26GcMRAxPoNwoqGkq5v8ftx9/ZBB35MI= cloud.google.com/go/datastore v1.19.0/go.mod h1:KGzkszuj87VT8tJe67GuB+qLolfsOt6bZq/KFuWaahc= -cloud.google.com/go/datastream v1.10.6 h1:FfNUy9j3aRQ99L4a5Rdm82RMuiw0BIe3lpPn2ykom8k= -cloud.google.com/go/datastream v1.10.6/go.mod h1:lPeXWNbQ1rfRPjBFBLUdi+5r7XrniabdIiEaCaAU55o= -cloud.google.com/go/datastream v1.11.0 h1:vSdeXl6b6apcOTWT6/NiHglc0eIEJ4z5yJXAsXT0WBo= cloud.google.com/go/datastream v1.11.0/go.mod h1:vio/5TQ0qNtGcIj7sFb0gucFoqZW19gZ7HztYtkzq9g= -cloud.google.com/go/deploy v1.19.0 h1:fzbObuGgoViO0ArFuOQIJ2yr5bH5YzbORVvMDBrDC5I= -cloud.google.com/go/deploy v1.19.0/go.mod h1:BW9vAujmxi4b/+S7ViEuYR65GiEsqL6Mhf5S/9TeDRU= -cloud.google.com/go/deploy v1.22.0 h1:fkBCtx9Qzr/vVokIALFdXb5cLVT0VJEfKWfOZftaGkI= cloud.google.com/go/deploy v1.22.0/go.mod h1:qXJgBcnyetoOe+w/79sCC99c5PpHJsgUXCNhwMjG0e4= -cloud.google.com/go/dialogflow v1.54.0 h1:DgCHYpasCaI3b03X6pxqGmEzX72DAHZhV0f/orrpxYM= -cloud.google.com/go/dialogflow v1.54.0/go.mod h1:/YQLqB0bdDJl+zFKN+UNQsYUqLfWZb1HsJUQqMT7Q6k= -cloud.google.com/go/dialogflow v1.57.0 h1:tdeHPAjpTe+z5+YyYqEJwoZiOwgP+bML+zimEXo/6O0= cloud.google.com/go/dialogflow v1.57.0/go.mod h1:wegtnocuYEfue6IGlX96n5mHu3JGZUaZxv1L5HzJUJY= -cloud.google.com/go/dlp v1.14.0 h1:/GQVl5gOPR2dUemrR2YJxZG5D9MCE3AYgmDxjzP54jI= -cloud.google.com/go/dlp v1.14.0/go.mod h1:4fvEu3EbLsHrgH3QFdFlTNIiCP5mHwdYhS/8KChDIC4= -cloud.google.com/go/dlp v1.18.0 h1:wPts74+F848F/ACZqU+c32Xh91DaBXXZaE66vpN6FQA= cloud.google.com/go/dlp v1.18.0/go.mod h1:RVO9zkh+xXgUa7+YOf9IFNHL/2FXt9Vnv/GKNYmc1fE= -cloud.google.com/go/documentai v1.30.0 h1:6KI6P04WExzrfbciW5RTEQScBEY98Fc4VtS04ufT3Js= -cloud.google.com/go/documentai v1.30.0/go.mod h1:3Qt8PMt3S8W6w3VeoYFraaMS2GJRrXFnvkyn+GpB1n0= -cloud.google.com/go/documentai v1.33.0 h1:MQbd4Bk3o7ckIiKZooXCVJfIDweO+B/XRAVsLdnSD/A= cloud.google.com/go/documentai v1.33.0/go.mod h1:lI9Mti9COZ5qVjdpfDZxNjOrTVf6tJ//vaqbtt81214= -cloud.google.com/go/domains v0.9.7 h1:IixFIMRzUJWZUAOe8s/K2X4Bvtp0A3xjHLljfNC4aSo= -cloud.google.com/go/domains v0.9.7/go.mod h1:u/yVf3BgfPJW3QDZl51qTJcDXo9PLqnEIxfGmGgbHEc= -cloud.google.com/go/domains v0.10.0 h1:+UAfUhEO9aINLqZjVkOKEG28+JKD+Zio0GmnOAXqKVY= cloud.google.com/go/domains v0.10.0/go.mod h1:VpPXnkCNRsxkieDFDfjBIrLv3p1kRjJ03wLoPeL30To= -cloud.google.com/go/edgecontainer v1.2.1 h1:xa6MIQhGylE24QdWaxhfIfAJE3Pupcr+i77WEx3NJrg= -cloud.google.com/go/edgecontainer v1.2.1/go.mod h1:OE2D0lbkmGDVYLCvpj8Y0M4a4K076QB7E2JupqOR/qU= -cloud.google.com/go/edgecontainer v1.3.0 h1:szfTtWNXKviueQ58eZ2EDzbjvEQkfx4QNQa3KIaCweU= cloud.google.com/go/edgecontainer v1.3.0/go.mod h1:dV1qTl2KAnQOYG+7plYr53KSq/37aga5/xPgOlYXh3A= -cloud.google.com/go/errorreporting v0.3.0 h1:kj1XEWMu8P0qlLhm3FwcaFsUvXChV/OraZwA70trRR0= -cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= -cloud.google.com/go/errorreporting v0.3.1 h1:E/gLk+rL7u5JZB9oq72iL1bnhVlLrnfslrgcptjJEUE= cloud.google.com/go/errorreporting v0.3.1/go.mod h1:6xVQXU1UuntfAf+bVkFk6nld41+CPyF2NSPCyXE3Ztk= -cloud.google.com/go/essentialcontacts v1.6.8 h1:p5Y7ZNVPiV9pEAHzvWiPcSiQRMQqcuHxOP0ZOP0vVww= -cloud.google.com/go/essentialcontacts v1.6.8/go.mod h1:EHONVDSum2xxG2p+myyVda/FwwvGbY58ZYC4XqI/lDQ= -cloud.google.com/go/essentialcontacts v1.7.0 h1:Ddirv7AYVEQiTKpboCwNVpC9HHLYSaW7wAk2u/OXJHo= cloud.google.com/go/essentialcontacts v1.7.0/go.mod h1:0JEcNuyjyg43H/RJynZzv2eo6MkmnvRPUouBpOh6akY= -cloud.google.com/go/eventarc v1.13.6 h1:we+qx5uCZ88aQzQS3MJXRvAh/ik+EmqVyjcW1oYFW44= -cloud.google.com/go/eventarc v1.13.6/go.mod h1:QReOaYnDNdjwAQQWNC7nfr63WnaKFUw7MSdQ9PXJYj0= -cloud.google.com/go/eventarc v1.14.0 h1:ok7KHtdTSu8F7D8Sb+Ug5lrKcQk/1+Xq7cZjeydeXEo= cloud.google.com/go/eventarc v1.14.0/go.mod h1:60ZzZfOekvsc/keHc7uGHcoEOMVa+p+ZgRmTjpdamnA= -cloud.google.com/go/filestore v1.8.3 h1:CpRnsUpMU5gxUKyfh7TD0SM+E+7E4ORaDea2JctKfpY= -cloud.google.com/go/filestore v1.8.3/go.mod h1:QTpkYpKBF6jlPRmJwhLqXfJQjVrQisplyb4e2CwfJWc= -cloud.google.com/go/filestore v1.9.0 h1:pI1dZzLjmH3NnuUKf13So4jP80mdZoWXB9etiV2zpso= cloud.google.com/go/filestore v1.9.0/go.mod h1:GlQK+VBaAGb19HqprnOMqYYpn7Gev5ZA9SSHpxFKD7Q= -cloud.google.com/go/firestore v1.15.0 h1:/k8ppuWOtNuDHt2tsRV42yI21uaGnKDEQnRFeBpbFF8= -cloud.google.com/go/firestore v1.15.0/go.mod h1:GWOxFXcv8GZUtYpWHw/w6IuYNux/BtmeVTMmjrm4yhk= -cloud.google.com/go/firestore v1.16.0 h1:YwmDHcyrxVRErWcgxunzEaZxtNbc8QoFYA/JOEwDPgc= cloud.google.com/go/firestore v1.16.0/go.mod h1:+22v/7p+WNBSQwdSwP57vz47aZiY+HrDkrOsJNhk7rg= -cloud.google.com/go/functions v1.16.2 h1:83bd2lCgtu2nLbX2jrqsrQhIs7VuVA1N6Op5syeRVIg= -cloud.google.com/go/functions v1.16.2/go.mod h1:+gMvV5E3nMb9EPqX6XwRb646jTyVz8q4yk3DD6xxHpg= -cloud.google.com/go/functions v1.19.0 h1:bO55p91lPY5JLg5MBdmt6G9n4kNeClX0lA9hdusDU6M= cloud.google.com/go/functions v1.19.0/go.mod h1:WDreEDZoUVoOkXKDejFWGnprrGYn2cY2KHx73UQERC0= -cloud.google.com/go/gaming v1.6.0 h1:PKggmegChZulPW8yvtziF8P9UOuVFwbvylbEucTNups= -cloud.google.com/go/gkebackup v1.5.0 h1:wysUXEkggPwENZY3BXroOyWoyVfPypzaqNHgOZD9Kck= -cloud.google.com/go/gkebackup v1.5.0/go.mod h1:eLaf/+n8jEmIvOvDriGjo99SN7wRvVadoqzbZu0WzEw= -cloud.google.com/go/gkebackup v1.6.0 h1:MhJ+vTgc+UtU9Y0uRmWs1XpcN6qmUUzyn+tTBiKAjxk= cloud.google.com/go/gkebackup v1.6.0/go.mod h1:1rskt7NgawoMDHTdLASX8caXXYG3MvDsoZ7qF4RMamQ= -cloud.google.com/go/gkeconnect v0.8.7 h1:BfXsTXYs5xlicAlgbtlo8Cw+YdzU3PrlBg7dATJUwrk= -cloud.google.com/go/gkeconnect v0.8.7/go.mod h1:iUH1jgQpTyNFMK5LgXEq2o0beIJ2p7KKUUFerkf/eGc= -cloud.google.com/go/gkeconnect v0.11.0 h1:JY9V0rYzRAXHpwwVfBvlphWP2CCUUiJrtCyZCMxYXEY= cloud.google.com/go/gkeconnect v0.11.0/go.mod h1:l3iPZl1OfT+DUQ+QkmH1PC5RTLqxKQSVnboLiQGAcCA= -cloud.google.com/go/gkehub v0.14.7 h1:bHwcvgh8AmcYm6p6/ZrWW3a7J7sKBDtqtsyVXKssnPs= -cloud.google.com/go/gkehub v0.14.7/go.mod h1:NLORJVTQeCdxyAjDgUwUp0A6BLEaNLq84mCiulsM4OE= -cloud.google.com/go/gkehub v0.15.0 h1:pA1mYF5jSC8C/oyjzsfBaznjejWwpxUFIlRjWUZKB/s= cloud.google.com/go/gkehub v0.15.0/go.mod h1:obpeROly2mjxZJbRkFfHEflcH54XhJI+g2QgfHphL0I= -cloud.google.com/go/gkemulticloud v1.2.0 h1:zaWBakKPT6mPHVn5iefuRqttjpbNsb8LlMw9KgfyfyU= -cloud.google.com/go/gkemulticloud v1.2.0/go.mod h1:iN5wBxTLPR6VTBWpkUsOP2zuPOLqZ/KbgG1bZir1Cng= -cloud.google.com/go/gkemulticloud v1.3.0 h1:4wJPaNK7HFYLniVqMue+Eo/SpX+yf+aMvRITjUpirgM= cloud.google.com/go/gkemulticloud v1.3.0/go.mod h1:XmcOUQ+hJI62fi/klCjEGs6lhQ56Zjs14sGPXsGP0mE= -cloud.google.com/go/grafeas v0.2.0 h1:CYjC+xzdPvbV65gi6Dr4YowKcmLo045pm18L0DhdELM= -cloud.google.com/go/grafeas v0.3.5/go.mod h1:y54iTBcI+lgUdI+kAPKb8jtPqeTkA2dsYzWSrQtpc5s= -cloud.google.com/go/grafeas v0.3.10 h1:D9uP/DjVHq9ZzCekVd+aNvQEHb3Hkwp8ki9FDnhRRJ0= -cloud.google.com/go/grafeas v0.3.10/go.mod h1:Mz/AoXmxNhj74VW0fz5Idc3kMN2VZMi4UT5+UPx5Pq0= -cloud.google.com/go/gsuiteaddons v1.6.7 h1:06Jg3JeLslEfBYX1sDqOPLnF7a3wmhNcDUXF/fVOb50= -cloud.google.com/go/gsuiteaddons v1.6.7/go.mod h1:u+sGBvr07OKNnOnQiB/Co1q4U2cjo50ERQwvnlcpNis= -cloud.google.com/go/gsuiteaddons v1.7.0 h1:k+DNTzjW+hG+lfGsNbNCopicaUIyT0Q4B0xLYCwEnpo= cloud.google.com/go/gsuiteaddons v1.7.0/go.mod h1:/B1L8ANPbiSvxCgdSwqH9CqHIJBzTt6v50fPr3vJCtg= cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= cloud.google.com/go/iam v1.1.12/go.mod h1:9LDX8J7dN5YRyzVHxwQzrQs9opFFqn0Mxs9nAeB+Hhg= -cloud.google.com/go/iap v1.9.6 h1:rcuRS9XfOgr1v6TAoihVeSXntOnpVhFlVHtPfgOkLAo= -cloud.google.com/go/iap v1.9.6/go.mod h1:YiK+tbhDszhaVifvzt2zTEF2ch9duHtp6xzxj9a0sQk= -cloud.google.com/go/iap v1.10.0 h1:Er5DF68/1MMBQo62Vfs3XvOPmyqj9JgQniSCNKLHYK8= cloud.google.com/go/iap v1.10.0/go.mod h1:gDT6LZnKnWNCaov/iQbj7NMUpknFDOkhhlH8PwIrpzU= -cloud.google.com/go/ids v1.4.7 h1:wtd+r415yrfZ8LsB6yH6WrOZ26tYt7w6wy3i5a4HQZ8= -cloud.google.com/go/ids v1.4.7/go.mod h1:yUkDC71u73lJoTaoONy0dsA0T7foekvg6ZRg9IJL0AA= -cloud.google.com/go/ids v1.5.0 h1:s14XF62E/BNe4jErHtgWaN1m5vrLkTMuG4gNRV0GRks= cloud.google.com/go/ids v1.5.0/go.mod h1:4NOlC1m9hAJL50j2cRV4PS/J6x/f4BBM0Xg54JQLCWw= -cloud.google.com/go/iot v1.7.7 h1:M9SKIj9eoxoXCzytkLZVAuf5wmoui1OeDqEjC97wRbY= -cloud.google.com/go/iot v1.7.7/go.mod h1:tr0bCOSPXtsg64TwwZ/1x+ReTWKlQRVXbM+DnrE54yM= -cloud.google.com/go/iot v1.8.0 h1:Q2GdWBly1+5Enm1TcEWvmu3YTRw9IyS1PYR4gJHepVY= cloud.google.com/go/iot v1.8.0/go.mod h1:/NMFENPnQ2t1UByUC1qFvA80fo1KFB920BlyUPn1m3s= -cloud.google.com/go/kms v1.17.1 h1:5k0wXqkxL+YcXd4viQzTqCgzzVKKxzgrK+rCZJytEQs= -cloud.google.com/go/kms v1.17.1/go.mod h1:DCMnCF/apA6fZk5Cj4XsD979OyHAqFasPuA5Sd0kGlQ= -cloud.google.com/go/kms v1.19.0 h1:x0OVJDl6UH1BSX4THKlMfdcFWoE4ruh90ZHuilZekrU= cloud.google.com/go/kms v1.19.0/go.mod h1:e4imokuPJUc17Trz2s6lEXFDt8bgDmvpVynH39bdrHM= -cloud.google.com/go/language v1.12.5 h1:kOYJEcuZgyUX/i/4DFrfXPcrddm1XCQD2lDI5hIFmZQ= -cloud.google.com/go/language v1.12.5/go.mod h1:w/6a7+Rhg6Bc2Uzw6thRdKKNjnOzfKTJuxzD0JZZ0nM= -cloud.google.com/go/language v1.14.0 h1:7e62MAtxUkjYzL3PnD5ZjJn81KV2hnau4EcS4LN73Lg= cloud.google.com/go/language v1.14.0/go.mod h1:ldEdlZOFwZREnn/1yWtXdNzfD7hHi9rf87YDkOY9at4= -cloud.google.com/go/lifesciences v0.9.7 h1:qqEmApr5YFOQjkrU8Jy6o6QpkESqfGbfrE6bnUZZbV8= -cloud.google.com/go/lifesciences v0.9.7/go.mod h1:FQ713PhjAOHqUVnuwsCe1KPi9oAdaTfh58h1xPiW13g= -cloud.google.com/go/lifesciences v0.10.0 h1:NxYwUD3BcxXKttOlbKsn84PacxjQPdCFSt6Kk4l6UW8= cloud.google.com/go/lifesciences v0.10.0/go.mod h1:1zMhgXQ7LbMbA5n4AYguFgbulbounfUoYvkV8dtsLcA= -cloud.google.com/go/logging v1.10.0 h1:f+ZXMqyrSJ5vZ5pE/zr0xC8y/M9BLNzQeLBwfeZ+wY4= -cloud.google.com/go/logging v1.10.0/go.mod h1:EHOwcxlltJrYGqMGfghSet736KR3hX1MAj614mrMk9I= -cloud.google.com/go/logging v1.11.0 h1:v3ktVzXMV7CwHq1MBF65wcqLMA7i+z3YxbUsoK7mOKs= cloud.google.com/go/logging v1.11.0/go.mod h1:5LDiJC/RxTt+fHc1LAt20R9TKiUTReDg6RuuFOZ67+A= cloud.google.com/go/longrunning v0.5.6/go.mod h1:vUaDrWYOMKRuhiv6JBnn49YxCPz2Ayn9GqyjaBT8/mA= cloud.google.com/go/longrunning v0.5.12/go.mod h1:S5hMV8CDJ6r50t2ubVJSKQVv5u0rmik5//KgLO3k4lU= -cloud.google.com/go/managedidentities v1.6.7 h1:uWA9WQyfA0JdkeAFymWUsa3qE9tC33LUElla790Ou1A= -cloud.google.com/go/managedidentities v1.6.7/go.mod h1:UzslJgHnc6luoyx2JV19cTCi2Fni/7UtlcLeSYRzTV8= -cloud.google.com/go/managedidentities v1.7.0 h1:GRZPWk8g9g99CunSn6yvjCgWGmYlJImLb/oHHxNwujU= cloud.google.com/go/managedidentities v1.7.0/go.mod h1:o4LqQkQvJ9Pt7Q8CyZV39HrzCfzyX8zBzm8KIhRw91E= -cloud.google.com/go/maps v1.11.1 h1:2U1NB/GIoXhNNmYMlGiLM7juL7nxh51lSkNELbYddB8= -cloud.google.com/go/maps v1.11.1/go.mod h1:XcSsd8lg4ZhLPCtJ2YHcu/xLVePBzZOlI7GmR2cRCws= -cloud.google.com/go/maps v1.12.0 h1:i+IeDDYWxW98EmLNQIuFdEVYBYc/VdQCKKrMa7W4Iyw= cloud.google.com/go/maps v1.12.0/go.mod h1:qjErDNStn3BaGx06vHner5d75MRMgGflbgCuWTuslMc= -cloud.google.com/go/mediatranslation v0.8.7 h1:izgww3TlyvWyDWdFKnrASpbh12IkAuw8o2ION8sAjX0= -cloud.google.com/go/mediatranslation v0.8.7/go.mod h1:6eJbPj1QJwiCP8R4K413qMx6ZHZJUi9QFpApqY88xWU= -cloud.google.com/go/mediatranslation v0.9.0 h1:bA2Qid3TwvcAcOZp9Yj7GJSAi0N24G8cw+tlLBcIkV8= cloud.google.com/go/mediatranslation v0.9.0/go.mod h1:udnxo0i4YJ5mZfkwvvQQrQ6ra47vcX8jeGV+6I5x+iU= -cloud.google.com/go/memcache v1.10.7 h1:hE7f3ze3+eWh/EbYXEz7oXkm0LXcr7UCoLklwi7gsLU= -cloud.google.com/go/memcache v1.10.7/go.mod h1:SrU6+QBhvXJV0TA59+B3oCHtLkPx37eqdKmRUlmSE1k= -cloud.google.com/go/memcache v1.11.0 h1:pbBvVeTgYKSJ0sxT2k+9OmDS1Kp+QnZkjzPg1+PvVN4= cloud.google.com/go/memcache v1.11.0/go.mod h1:99MVF02m5TByT1NKxsoKDnw5kYmMrjbGSeikdyfCYZk= -cloud.google.com/go/metastore v1.13.6 h1:otHcJkci5f/sNRedrSM7eM81QRnu0yZ3HvkvWGphABA= -cloud.google.com/go/metastore v1.13.6/go.mod h1:OBCVMCP7X9vA4KKD+5J4Q3d+tiyKxalQZnksQMq5MKY= -cloud.google.com/go/metastore v1.14.0 h1:m7ICE3M+5jTwM6nHyv4/YcA1eeSYg3XtKpdQsB7QKP0= cloud.google.com/go/metastore v1.14.0/go.mod h1:vtPt5oVF/+ocXO4rv4GUzC8Si5s8gfmo5OIt6bACDuE= -cloud.google.com/go/monitoring v1.19.0 h1:NCXf8hfQi+Kmr56QJezXRZ6GPb80ZI7El1XztyUuLQI= -cloud.google.com/go/monitoring v1.19.0/go.mod h1:25IeMR5cQ5BoZ8j1eogHE5VPJLlReQ7zFp5OiLgiGZw= -cloud.google.com/go/monitoring v1.21.0 h1:EMc0tB+d3lUewT2NzKC/hr8cSR9WsUieVywzIHetGro= cloud.google.com/go/monitoring v1.21.0/go.mod h1:tuJ+KNDdJbetSsbSGTqnaBvbauS5kr3Q/koy3Up6r+4= -cloud.google.com/go/networkconnectivity v1.14.6 h1:jYpQ86mZ7OYZc7WadvCIlIaPXmXhr5nD7wgE/ekMVpM= -cloud.google.com/go/networkconnectivity v1.14.6/go.mod h1:/azB7+oCSmyBs74Z26EogZ2N3UcXxdCHkCPcz8G32bU= -cloud.google.com/go/networkconnectivity v1.15.0 h1:NgR2Qz/d8TwT9k3E9Dw2DtdeCASlIsli9o/r9VSgUKk= cloud.google.com/go/networkconnectivity v1.15.0/go.mod h1:uBQqx/YHI6gzqfV5J/7fkKwTGlXvQhHevUuzMpos9WY= -cloud.google.com/go/networkmanagement v1.13.2 h1:Ex1/aYkA0areleSmOGXHvEFBGohteIYJr2SGPrjOUe0= -cloud.google.com/go/networkmanagement v1.13.2/go.mod h1:24VrV/5HFIOXMEtVQEUoB4m/w8UWvUPAYjfnYZcBc4c= -cloud.google.com/go/networkmanagement v1.14.0 h1:HGbqaS352q7JLOpdmqHUXBeaJc6S6DtUSRJF9URtTBY= cloud.google.com/go/networkmanagement v1.14.0/go.mod h1:4myfd4A0uULCOCGHL1npZN0U+kr1Z2ENlbHdCCX4cE8= -cloud.google.com/go/networksecurity v0.9.7 h1:aepEkfiwOvUL9eu3ginVZhTaXDRHncQKi9lTT1BycH0= -cloud.google.com/go/networksecurity v0.9.7/go.mod h1:aB6UiPnh/l32+TRvgTeOxVRVAHAFFqvK+ll3idU5BoY= -cloud.google.com/go/networksecurity v0.10.0 h1:SA+W7/GNJnrf1gINnIar4zpsRrQk9dLNN5uTuY4TO90= cloud.google.com/go/networksecurity v0.10.0/go.mod h1:IcpI5pyzlZyYG8cNRCJmY1AYKajsd9Uz575HoeyYoII= -cloud.google.com/go/notebooks v1.11.5 h1:sFU1ETg1HfIN/Tev8gD0dleAITLv7cHp0JClwFmJ6bo= -cloud.google.com/go/notebooks v1.11.5/go.mod h1:pz6P8l2TvhWqAW3sysIsS0g2IUJKOzEklsjWJfi8sd4= -cloud.google.com/go/notebooks v1.12.0 h1:80/UfGbQeaY1zMcqf8za2T8u94wjMTTjeXEj5Bim1Q4= cloud.google.com/go/notebooks v1.12.0/go.mod h1:euIZBbGY6G0J+UHzQ0XflysP0YoAUnDPZU7Fq0KXNw8= -cloud.google.com/go/optimization v1.6.5 h1:FPfowA/LEckKTQT0A4NJMI2bSou999c2ZyFX1zGiYxY= -cloud.google.com/go/optimization v1.6.5/go.mod h1:eiJjNge1NqqLYyY75AtIGeQWKO0cvzD1ct/moCFaP2Q= -cloud.google.com/go/optimization v1.7.0 h1:yDun269GdHx6gvcNJZeklF7uQw19a0LldSSiYtOYiR0= cloud.google.com/go/optimization v1.7.0/go.mod h1:6KvAB1HtlsMMblT/lsQRIlLjUhKjmMWNqV1AJUctbWs= -cloud.google.com/go/orchestration v1.9.2 h1:C2WL4ZnclXsh4XickGhKYKlPjqVZj35y1sbRjdsZ3g4= -cloud.google.com/go/orchestration v1.9.2/go.mod h1:8bGNigqCQb/O1kK7PeStSNlyi58rQvZqDiuXT9KAcbg= -cloud.google.com/go/orchestration v1.10.0 h1:cGj9njLm+uUa/YPxGx6X7OU5RBh2VbpDktetkaHOEPQ= cloud.google.com/go/orchestration v1.10.0/go.mod h1:pGiFgTTU6c/nXHTPpfsGT8N4Dax8awccCe6kjhVdWjI= -cloud.google.com/go/orgpolicy v1.12.3 h1:fGftW2bPi8vTjQm57xlwtLBZQcrgC+c3HMFBzJ+KWPc= -cloud.google.com/go/orgpolicy v1.12.3/go.mod h1:6BOgIgFjWfJzTsVcib/4QNHOAeOjCdaBj69aJVs//MA= -cloud.google.com/go/orgpolicy v1.13.0 h1:WaabiSAxtyi4JNFATvsPmQS2IWRjr1+pwU3/Bihj7eA= cloud.google.com/go/orgpolicy v1.13.0/go.mod h1:oKtT56zEFSsYORUunkN2mWVQBc9WGP7yBAPOZW1XCXc= -cloud.google.com/go/osconfig v1.12.7 h1:HXsXGFaFaLTklwKgSob/GSE+c3verYDQDgreFaosxyc= -cloud.google.com/go/osconfig v1.12.7/go.mod h1:ID7Lbqr0fiihKMwAOoPomWRqsZYKWxfiuafNZ9j1Y1M= -cloud.google.com/go/osconfig v1.14.0 h1:7XGKH/O0PGIoPIIYc+Ja5WD5Sc1nK0y5DT7jvSfyJVc= cloud.google.com/go/osconfig v1.14.0/go.mod h1:GhZzWYVrnQ42r+K5pA/hJCsnWVW2lB6bmVg+GnZ6JkM= -cloud.google.com/go/oslogin v1.13.3 h1:7AgOWH1oMPrB1AVU0/f47ADdOt+XfdBY7QRb8tcMUp8= -cloud.google.com/go/oslogin v1.13.3/go.mod h1:WW7Rs1OJQ1iSUckZDilvNBSNPE8on740zF+4ZDR4o8U= -cloud.google.com/go/oslogin v1.14.0 h1:tgeFPXRtrXuS6MbBsevnntls4kQeD/QP3VUB9ZxmmMg= cloud.google.com/go/oslogin v1.14.0/go.mod h1:VtMzdQPRP3T+w5OSFiYhaT/xOm7H1wo1HZUD2NAoVK4= -cloud.google.com/go/phishingprotection v0.8.7 h1:CbCjfR/pgDHyRMu94o9nuGwaONEcarWnUfSGGw+I2ZI= -cloud.google.com/go/phishingprotection v0.8.7/go.mod h1:FtYaOyGc/HQQU7wY4sfwYZBFDKAL+YtVBjUj8E3A3/I= -cloud.google.com/go/phishingprotection v0.9.0 h1:TSua7OZWGInbjd9DiSNH1v4UqhrKwpw3q4RM6rzm+0I= cloud.google.com/go/phishingprotection v0.9.0/go.mod h1:CzttceTk9UskH9a8BycYmHL64zakEt3EXaM53r4i0Iw= -cloud.google.com/go/policytroubleshooter v1.10.5 h1:LGt85MZUKlq9oqsbBL9+M6jAyeuR1TtCx6k5HfAQxTY= -cloud.google.com/go/policytroubleshooter v1.10.5/go.mod h1:bpOf94YxjWUqsVKokzPBibMSAx937Jp2UNGVoMAtGYI= -cloud.google.com/go/policytroubleshooter v1.11.0 h1:TUxMBu2SAWmo8RtWhKcgv7LjbmUEA2t5U4+abA3lXik= cloud.google.com/go/policytroubleshooter v1.11.0/go.mod h1:yTqY8n60lPLdU5bRbImn9IazrmF1o5b0VBshVxPzblQ= -cloud.google.com/go/privatecatalog v0.9.7 h1:wGZKKJhYyuf4gcAEywQqQ6F19yxhBJGnzgyxOTbJjBw= -cloud.google.com/go/privatecatalog v0.9.7/go.mod h1:NWLa8MCL6NkRSt8jhL8Goy2A/oHkvkeAxiA0gv0rIXI= -cloud.google.com/go/privatecatalog v0.10.0 h1:9ZescTLuQE6idHyXAGh7nDxer8UJXfACW7DLIuhtvOs= cloud.google.com/go/privatecatalog v0.10.0/go.mod h1:/Lci3oPTxJpixjiTBoiVv3PmUZg/IdhPvKHcLEgObuc= -cloud.google.com/go/pubsub v1.38.0 h1:J1OT7h51ifATIedjqk/uBNPh+1hkvUaH4VKbz4UuAsc= -cloud.google.com/go/pubsub v1.38.0/go.mod h1:IPMJSWSus/cu57UyR01Jqa/bNOQA+XnPF6Z4dKW4fAA= -cloud.google.com/go/pubsub v1.42.0 h1:PVTbzorLryFL5ue8esTS2BfehUs0ahyNOY9qcd+HMOs= cloud.google.com/go/pubsub v1.42.0/go.mod h1:KADJ6s4MbTwhXmse/50SebEhE4SmUwHi48z3/dHar1Y= -cloud.google.com/go/pubsublite v1.8.2 h1:jLQozsEVr+c6tOU13vDugtnaBSUy/PD5zK6mhm+uF1Y= cloud.google.com/go/pubsublite v1.8.2/go.mod h1:4r8GSa9NznExjuLPEJlF1VjOPOpgf3IT6k8x/YgaOPI= -cloud.google.com/go/recaptchaenterprise v1.3.1 h1:u6EznTGzIdsyOsvm+Xkw0aSuKFXQlyjGE9a4exk6iNQ= -cloud.google.com/go/recaptchaenterprise/v2 v2.13.0 h1:+QG02kE63W13vXI+rwAxFF3EhGX6K7gXwFz9OKwKcHw= -cloud.google.com/go/recaptchaenterprise/v2 v2.13.0/go.mod h1:jNYyn2ScR4DTg+VNhjhv/vJQdaU8qz+NpmpIzEE7HFQ= -cloud.google.com/go/recaptchaenterprise/v2 v2.17.0 h1:aXFHIGiFseHKdYxPtBaM18BvvK6CrG6yYM+IoWu3WDQ= cloud.google.com/go/recaptchaenterprise/v2 v2.17.0/go.mod h1:SS4QDdlmJ3NvbOMCXQxaFhVGRjvNMfoKCoCdxqXadqs= -cloud.google.com/go/recommendationengine v0.8.7 h1:N6n/TEr0FQzeP4ZtvF5daMszOhdZI94uMiPiAi9kFMo= -cloud.google.com/go/recommendationengine v0.8.7/go.mod h1:YsUIbweUcpm46OzpVEsV5/z+kjuV6GzMxl7OAKIGgKE= -cloud.google.com/go/recommendationengine v0.9.0 h1:w8YMuIJdZxMEptNXSiXYdqaiCL2rTweOoO71RNtcxNE= cloud.google.com/go/recommendationengine v0.9.0/go.mod h1:59ydKXFyXO4Y8S0Bk224sKfj6YvIyzgcpG6w8kXIMm4= -cloud.google.com/go/recommender v1.12.3 h1:v9x75vXP5wMXw3QG3xmgjVHLlqYufuLn/ht3oNWCA3w= -cloud.google.com/go/recommender v1.12.3/go.mod h1:OgN0MjV7/6FZUUPgF2QPQtYErtZdZc4u+5onvurcGEI= -cloud.google.com/go/recommender v1.13.0 h1:ZyKUB5CddfFGD1qiTKbF3t59OxXPIE7+3lzy59i7hvs= cloud.google.com/go/recommender v1.13.0/go.mod h1:+XkXkeB9k6zG222ZH70U6DBkmvEL0na+pSjZRmlWcrk= -cloud.google.com/go/redis v1.16.0 h1:1veL/h/x5bgzG2CLK2cdG3plWdgO0p1qoHgwFBqG7+c= -cloud.google.com/go/redis v1.16.0/go.mod h1:NLzG3Ur8ykVIZk+i5ienRnycsvWzQ0uCLcil6Htc544= -cloud.google.com/go/redis v1.17.0 h1:YItghJ0VY98gJperCaTVEe7g+QZWz1nsN5ioJcSxkDY= cloud.google.com/go/redis v1.17.0/go.mod h1:pzTdaIhriMLiXu8nn2CgiS52SYko0tO1Du4d3MPOG5I= -cloud.google.com/go/resourcemanager v1.9.7 h1:SdvD0PaPX60+yeKoSe16mawFpM0EPuiPPihTIVlhRsY= -cloud.google.com/go/resourcemanager v1.9.7/go.mod h1:cQH6lJwESufxEu6KepsoNAsjrUtYYNXRwxm4QFE5g8A= -cloud.google.com/go/resourcemanager v1.10.0 h1:oqO6UInOJ1ZBBEYTKPJms2+FKdGmZEYAYBKyt0oqpEI= cloud.google.com/go/resourcemanager v1.10.0/go.mod h1:kIx3TWDCjLnUQUdjQ/e8EXsS9GJEzvcY+YMOHpADxrk= -cloud.google.com/go/resourcesettings v1.7.0 h1:yEuByg5XBHhTG9wPEU7GiEtC9Orp1wSEyiiX4IPqoSY= -cloud.google.com/go/resourcesettings v1.7.0/go.mod h1:pFzZYOQMyf1hco9pbNWGEms6N/2E7nwh0oVU1Tz+4qA= -cloud.google.com/go/resourcesettings v1.8.0 h1:r2AHqVv9E6Toxiuwo905fFjy50pfKamehDBlQfhqblM= cloud.google.com/go/resourcesettings v1.8.0/go.mod h1:/hleuSOq8E6mF1sRYZrSzib8BxFHprQXrPluWTuZ6Ys= -cloud.google.com/go/retail v1.17.0 h1:YTKwc6K02xpa/SYkPpxY7QEmsd3deP/+ceMTuAQ1RVg= -cloud.google.com/go/retail v1.17.0/go.mod h1:GZ7+J084vyvCxO1sjdBft0DPZTCA/lMJ46JKWxWeb6w= -cloud.google.com/go/retail v1.18.0 h1:8Ck0ZsfHzEdhd4BAzHJ0YcPq7poCPMMHM3BLJ0yk4WE= cloud.google.com/go/retail v1.18.0/go.mod h1:vaCabihbSrq88mKGKcKc4/FDHvVcPP0sQDAt0INM+v8= -cloud.google.com/go/run v1.3.7 h1:E4Z5e681Qh7UJrJRMCgYhp+3tkcoXiaKGh3UZmUPaAQ= -cloud.google.com/go/run v1.3.7/go.mod h1:iEUflDx4Js+wK0NzF5o7hE9Dj7QqJKnRj0/b6rhVq20= -cloud.google.com/go/run v1.5.0 h1:1hfJ4418lukwslnbuMZx/t4MxBd0FDo4d/38NvAP5Yo= cloud.google.com/go/run v1.5.0/go.mod h1:Z4Tv/XNC/veO6rEpF0waVhR7vEu5RN1uJQ8dD1PeMtI= -cloud.google.com/go/scheduler v1.10.8 h1:Jn/unfNUgRiNJRc1nrApzimKiVj91UYlLT8mMfpUu48= -cloud.google.com/go/scheduler v1.10.8/go.mod h1:0YXHjROF1f5qTMvGTm4o7GH1PGAcmu/H/7J7cHOiHl0= -cloud.google.com/go/scheduler v1.11.0 h1:9Hc+L8YEgci20BFkQNsgsb5UJFfUbylfHAKgfXkNRWU= cloud.google.com/go/scheduler v1.11.0/go.mod h1:RBSu5/rIsF5mDbQUiruvIE6FnfKpLd3HlTDu8aWk0jw= -cloud.google.com/go/secretmanager v1.13.1 h1:TTGo2Vz7ZxYn2QbmuFP7Zo4lDm5VsbzBjDReo3SA5h4= -cloud.google.com/go/secretmanager v1.13.1/go.mod h1:y9Ioh7EHp1aqEKGYXk3BOC+vkhlHm9ujL7bURT4oI/4= -cloud.google.com/go/secretmanager v1.14.0 h1:P2RRu2NEsQyOjplhUPvWKqzDXUKzwejHLuSUBHI8c4w= cloud.google.com/go/secretmanager v1.14.0/go.mod h1:q0hSFHzoW7eRgyYFH8trqEFavgrMeiJI4FETNN78vhM= -cloud.google.com/go/security v1.17.0 h1:u4RCnEQPvlrrnFRFinU0T3WsjtrsQErkWBfqTM5oUQI= -cloud.google.com/go/security v1.17.0/go.mod h1:eSuFs0SlBv1gWg7gHIoF0hYOvcSwJCek/GFXtgO6aA0= -cloud.google.com/go/security v1.18.0 h1:CjBd67GVb+Oenjt4VsUw0RUQktSIgexTJN3UQta7XRE= cloud.google.com/go/security v1.18.0/go.mod h1:oS/kRVUNmkwEqzCgSmK2EaGd8SbDUvliEiADjSb/8Mo= -cloud.google.com/go/securitycenter v1.30.0 h1:Y8C0I/mzLbaxAl5cw3EaLox0Rvpy+VUwEuCGWIQDMU8= -cloud.google.com/go/securitycenter v1.30.0/go.mod h1:/tmosjS/dfTnzJxOzZhTXdX3MXWsCmPWfcYOgkJmaJk= -cloud.google.com/go/securitycenter v1.35.0 h1:XsBzOeMRGs0/JkXXkbjhjjtAtlVGPR1GZ235gH25XMk= cloud.google.com/go/securitycenter v1.35.0/go.mod h1:gotw8mBfCxX0CGrRK917CP/l+Z+QoDchJ9HDpSR8eDc= -cloud.google.com/go/servicedirectory v1.11.7 h1:c3OAhTcZ8LbIiKps5T3p6i0QcPI8/aWYwOfoZobICKo= -cloud.google.com/go/servicedirectory v1.11.7/go.mod h1:fiO/tM0jBpVhpCAe7Yp5HmEsmxSUcOoc4vPrO02v68I= -cloud.google.com/go/servicedirectory v1.12.0 h1:uieHG59ROehbCEtd+YINNgjXEDyidH0ye+REZzDVe6Y= cloud.google.com/go/servicedirectory v1.12.0/go.mod h1:lKKBoVStJa+8S+iH7h/YRBMUkkqFjfPirkOTEyYAIUk= -cloud.google.com/go/shell v1.7.7 h1:HxCzcUxSsCh6FJWkmbOUrGI1sKe4E1Yy4vaykn4RhJ4= -cloud.google.com/go/shell v1.7.7/go.mod h1:7OYaMm3TFMSZBh8+QYw6Qef+fdklp7CjjpxYAoJpZbQ= -cloud.google.com/go/shell v1.8.0 h1:kCkIEXYPqrhHay46HjyhuOk/C1x7Qva4Lw968UVPcEo= cloud.google.com/go/shell v1.8.0/go.mod h1:EoQR8uXuEWHUAMoB4+ijXqRVYatDCdKYOLAaay1R/yw= -cloud.google.com/go/spanner v1.63.0 h1:P6+BY70Wtol4MtryBgnXZVTZfsdySEvWfz0EpyLwHi4= -cloud.google.com/go/spanner v1.63.0/go.mod h1:iqDx7urZpgD7RekZ+CFvBRH6kVTW1ZSEb2HMDKOp5Cc= -cloud.google.com/go/spanner v1.67.0 h1:h8xfobxh5lQu4qJVMPH+wSiyU+ZM6ZTxRNqGeu9iIVA= cloud.google.com/go/spanner v1.67.0/go.mod h1:Um+TNmxfcCHqNCKid4rmAMvoe/Iu1vdz6UfxJ9GPxRQ= -cloud.google.com/go/speech v1.23.1 h1:TcWEAOLQH1Lb2fhHS6/GjvAh+ue0dt4xUDHXHG6vF04= -cloud.google.com/go/speech v1.23.1/go.mod h1:UNgzNxhNBuo/OxpF1rMhA/U2rdai7ILL6PBXFs70wq0= -cloud.google.com/go/speech v1.25.0 h1:q/ZPuG5G//DHm9hBehaP5c/wuD2qP77OpiPQrE7hEbg= cloud.google.com/go/speech v1.25.0/go.mod h1:2IUTYClcJhqPgee5Ko+qJqq29/bglVizgIap0c5MvYs= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= -cloud.google.com/go/storagetransfer v1.10.6 h1:CXmoNEvz7y2NtHFZuH3Z8ASN43rxRINWa2Q/IlBzM2k= -cloud.google.com/go/storagetransfer v1.10.6/go.mod h1:3sAgY1bx1TpIzfSzdvNGHrGYldeCTyGI/Rzk6Lc6A7w= -cloud.google.com/go/storagetransfer v1.11.0 h1:URBQgN/5pyGGq/kE6z2HUYzAG2lhsvJWcjrNnqrjaxU= cloud.google.com/go/storagetransfer v1.11.0/go.mod h1:arcvgzVC4HPcSikqV8D4h4PwrvGQHfKtbL4OwKPirjs= -cloud.google.com/go/talent v1.6.8 h1:RoyEtftfJrbwJcu63zuWE4IjC76xMyVsJBhmleIp3bE= -cloud.google.com/go/talent v1.6.8/go.mod h1:kqPAJvhxmhoUTuqxjjk2KqA8zUEeTDmH+qKztVubGlQ= -cloud.google.com/go/talent v1.7.0 h1:2zqgG97bPfr259+xsJu1coFlvXzq+D9OD8mL8atgWeU= cloud.google.com/go/talent v1.7.0/go.mod h1:8zfRPWWV4GNZuUmBwQub0gWAe2KaKhsthyGtV8fV1bY= -cloud.google.com/go/texttospeech v1.7.7 h1:qR6Mu+EM2OfaZR1/Rl8BDBTVfi2X5OtwKKvJRSQyG+o= -cloud.google.com/go/texttospeech v1.7.7/go.mod h1:XO4Wr2VzWHjzQpMe3gS58Oj68nmtXMyuuH+4t0wy9eA= -cloud.google.com/go/texttospeech v1.8.0 h1:ZDftBGozfB/ITwvYiYHHeSDQ5Yc9azNphHMjIzakwVQ= cloud.google.com/go/texttospeech v1.8.0/go.mod h1:hAgeA01K5QNfLy2sPUAVETE0L4WdEpaCMfwKH1qjCQU= -cloud.google.com/go/tpu v1.6.7 h1:ngQokxUB1z2gvHn3vAf04m7SFnNYMiQIIpny81fCGAs= -cloud.google.com/go/tpu v1.6.7/go.mod h1:o8qxg7/Jgt7TCgZc3jNkd4kTsDwuYD3c4JTMqXZ36hU= -cloud.google.com/go/tpu v1.7.0 h1:mRFFdrJ/DuymJehZ0SJXKgMQ1eoWtOhgrStf/eQrlsw= cloud.google.com/go/tpu v1.7.0/go.mod h1:/J6Co458YHMD60nM3cCjA0msvFU/miCGMfx/nYyxv/o= -cloud.google.com/go/trace v1.10.7 h1:gK8z2BIJQ3KIYGddw9RJLne5Fx0FEXkrEQzPaeEYVvk= -cloud.google.com/go/trace v1.10.7/go.mod h1:qk3eiKmZX0ar2dzIJN/3QhY2PIFh1eqcIdaN5uEjQPM= -cloud.google.com/go/trace v1.11.0 h1:UHX6cOJm45Zw/KIbqHe4kII8PupLt/V5tscZUkeiJVI= cloud.google.com/go/trace v1.11.0/go.mod h1:Aiemdi52635dBR7o3zuc9lLjXo3BwGaChEjCa3tJNmM= -cloud.google.com/go/translate v1.10.3 h1:g+B29z4gtRGsiKDoTF+bNeH25bLRokAaElygX2FcZkE= cloud.google.com/go/translate v1.10.3/go.mod h1:GW0vC1qvPtd3pgtypCv4k4U8B7EdgK9/QEF2aJEUovs= -cloud.google.com/go/translate v1.12.0 h1:NoO50ycJWq7GPZEjuPz8Ye926uLko/gbxWnQ9mtQrDs= cloud.google.com/go/translate v1.12.0/go.mod h1:4/C4shFIY5hSZ3b3g+xXWM5xhBLqcUqksSMrQ7tyFtc= -cloud.google.com/go/video v1.21.0 h1:ue/1C8TF8H2TMzKMBdNnFxT7QaeWMtqfDr9TSQGgUhA= -cloud.google.com/go/video v1.21.0/go.mod h1:Kqh97xHXZ/bIClgDHf5zkKvU3cvYnLyRefmC8yCBqKI= -cloud.google.com/go/video v1.23.0 h1:DTnNFkbpmPunk+V3WKmjs46EbdW5QevSy0KJ9JmlUus= cloud.google.com/go/video v1.23.0/go.mod h1:EGLQv3Ce/VNqcl/+Amq7jlrnpg+KMgQcr6YOOBfE9oc= -cloud.google.com/go/videointelligence v1.11.7 h1:SKBkFTuOclESLjQL1LwraqVFm2fL5oL9tbzKITU+FOY= -cloud.google.com/go/videointelligence v1.11.7/go.mod h1:iMCXbfjurmBVgKuyLedTzv90kcnppOJ6ttb0+rLDID0= -cloud.google.com/go/videointelligence v1.12.0 h1:nM9O0Pw3XcQpLHHfSSlzbytBRXh5ATrEnY4Cbmv4RVs= cloud.google.com/go/videointelligence v1.12.0/go.mod h1:3rjmafNpCEqAb1CElGTA7dsg8dFDsx7RQNHS7o088D0= -cloud.google.com/go/vision v1.2.0 h1:/CsSTkbmO9HC8iQpxbK8ATms3OQaX3YQUeTMGCxlaK4= -cloud.google.com/go/vision/v2 v2.8.2 h1:j9RxG8DcyJO/D7/ps2pOey8VZys+TMqF79bWAhuM7QU= -cloud.google.com/go/vision/v2 v2.8.2/go.mod h1:BHZA1LC7dcHjSr9U9OVhxMtLKd5l2jKPzLRALEJvuaw= -cloud.google.com/go/vision/v2 v2.9.0 h1:q3psn2Ea+EgUH7nefR0S9k9u08QTYhUI3PPm44FNqnM= cloud.google.com/go/vision/v2 v2.9.0/go.mod h1:sejxShqNOEucObbGNV5Gk85hPCgiVPP4sWv0GrgKuNw= -cloud.google.com/go/vmmigration v1.7.7 h1:bf2qKqEN7iqT62IptQ/FDadoDLJI9sthyrW3PVaH8bY= -cloud.google.com/go/vmmigration v1.7.7/go.mod h1:qYIK5caZY3IDMXQK+A09dy81QU8qBW0/JDTc39OaKRw= -cloud.google.com/go/vmmigration v1.8.0 h1:YH4XwJirujDvpPWVjzAxLUc97UfKs48+RDNpHzodRyc= cloud.google.com/go/vmmigration v1.8.0/go.mod h1:+AQnGUabjpYKnkfdXJZ5nteUfzNDCmwbj/HSLGPFG5E= -cloud.google.com/go/vmwareengine v1.1.3 h1:x4KwHB4JlBEzMaITVhrbbpHrU+2I5LrlvHGEEluT0vc= -cloud.google.com/go/vmwareengine v1.1.3/go.mod h1:UoyF6LTdrIJRvDN8uUB8d0yimP5A5Ehkr1SRzL1APZw= -cloud.google.com/go/vmwareengine v1.3.0 h1:Yd8NnmkjUTWouvtQySzZJKzzUO+21hRnlji/oHjWRrc= cloud.google.com/go/vmwareengine v1.3.0/go.mod h1:7W/C/YFpelGyZzRUfOYkbgUfbN1CK5ME3++doIkh1Vk= -cloud.google.com/go/vpcaccess v1.7.7 h1:F5woMLufKnshmDvPVxCzoC+Di12RYXQ1W8kNmpBT8z0= -cloud.google.com/go/vpcaccess v1.7.7/go.mod h1:EzfSlgkoAnFWEMznZW0dVNvdjFjEW97vFlKk4VNBhwY= -cloud.google.com/go/vpcaccess v1.8.0 h1:jJ6cyLNDcdQYZBXdqucqneR9D3MQzAoEmokE9gD5uVU= cloud.google.com/go/vpcaccess v1.8.0/go.mod h1:7fz79sxE9DbGm9dbbIdir3tsJhwCxiNAs8aFG8MEhR8= -cloud.google.com/go/webrisk v1.9.7 h1:EWTSVagWWeQjVAsebiF/wJMwC5bq6Zz3LqOmD9Uid4s= -cloud.google.com/go/webrisk v1.9.7/go.mod h1:7FkQtqcKLeNwXCdhthdXHIQNcFWPF/OubrlyRcLHNuQ= -cloud.google.com/go/webrisk v1.10.0 h1:Knhx8eILUwXmH6UnKF5h5GLuLy1eRrasm21s6DQtOHQ= cloud.google.com/go/webrisk v1.10.0/go.mod h1:ztRr0MCLtksoeSOQCEERZXdzwJGoH+RGYQ2qodGOy2U= -cloud.google.com/go/websecurityscanner v1.6.7 h1:R5OW5SNRqD0DSEmyWLUMNYAXWYnz/NLSXBawVFrc9a0= -cloud.google.com/go/websecurityscanner v1.6.7/go.mod h1:EpiW84G5KXxsjtFKK7fSMQNt8JcuLA8tQp7j0cyV458= -cloud.google.com/go/websecurityscanner v1.7.0 h1:2+X6oSpyKlCPN43j5xXVHMBLajVsh4BYFUpQNUk6Y+Q= cloud.google.com/go/websecurityscanner v1.7.0/go.mod h1:d5OGdHnbky9MAZ8SGzdWIm3/c9p0r7t+5BerY5JYdZc= -cloud.google.com/go/workflows v1.12.6 h1:2bE69mh68law1UZWPjgmvOQsjsGSppRudABAXwNAy58= -cloud.google.com/go/workflows v1.12.6/go.mod h1:oDbEHKa4otYg4abwdw2Z094jB0TLLiFGAPA78EDAKag= -cloud.google.com/go/workflows v1.13.0 h1:LHZQw+fkCWN/zRSHEWcwEnh8xHGt76yd/4Gf6Pt0zbU= cloud.google.com/go/workflows v1.13.0/go.mod h1:StCuY3jhBj1HYMjCPqZs7J0deQLHPhF6hDtzWJaVF+Y= -dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= -dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 h1:8q4SaHjFsClSvuVne0ID/5Ka8u3fcIHyqkLjcFpNRHQ= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 h1:gggzg0SUMs6SQbEw+3LoSsYf9YMjkupeAnHMX8O9mmY= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0/go.mod h1:+6KLcKIVgxoBDMqMO/Nvy7bZ9a0nbU3I1DtFQK3YvB4= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 h1:sR+/8Yb4slttB4vD+b9btVEnWgL3Q00OBTzVT8B9C0c= github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -github.com/CloudyKit/jet/v6 v6.2.0 h1:EpcZ6SR9n28BUGtNJSvlBqf90IpjeFr36Tizxhn/oME= github.com/CloudyKit/jet/v6 v6.2.0/go.mod h1:d3ypHeIRNo2+XyqnGA8s+aphtcVpjP5hPwP/Lzo7Ro4= -github.com/CosmWasm/wasmvm v1.0.0 h1:NRmnHe3xXsKn2uEcB1F5Ha323JVAhON+BI6L177dlKc= -github.com/CosmWasm/wasmvm v1.0.0/go.mod h1:ei0xpvomwSdONsxDuONzV7bL1jSET1M8brEx0FCXc+A= -github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= -github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= -github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.0 h1:oVLqHXhnYtUwM89y9T1fXGaK9wTkXHgNp8/ZNMQzUxE= -github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.0/go.mod h1:dppbR7CwXD4pgtV9t3wD1812RaLDcBjtblcDF5f1vI0= -github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= -github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/InjectiveLabs/suplog v1.3.3 h1:ARIR3lWD9BxcrmqTwgcGBt8t7e10gwOqllUAXa/MfxI= -github.com/InjectiveLabs/suplog v1.3.3/go.mod h1:+I9WRgUhzmo1V/n7IkW24kFBFB9ZTPAiXXXCogWxmTM= -github.com/Joker/hpp v1.0.0 h1:65+iuJYdRXv/XyN62C1uEmmOx3432rNG/rKlX6V7Kkc= github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= -github.com/Joker/jade v1.1.3 h1:Qbeh12Vq6BxURXT1qZBRHsDxeURB8ztcL6f3EXSGeHk= github.com/Joker/jade v1.1.3/go.mod h1:T+2WLyt7VH6Lp0TRxQrUYEs64nRc83wkMQrfeIQKduM= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= -github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= -github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= -github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06 h1:KkH3I3sJuOLP3TjA/dfr4NAY8bghDwnXiU7cTKxQqo0= github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjKLwalezA0k99cWs5L11HWOAPNjdUZ6RxH1BXbbM= -github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s= -github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= -github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= -github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= -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 h1:1d9pzdbkth4D9AX6ndKSl7of3UTV0RYl3z64U2dXMGo= -github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= -github.com/aclements/go-moremath v0.0.0-20210112150236-f10218a38794 h1:xlwdaKcTNVW4PtpQb8aKA4Pjy0CdJHEqvFbAnvR5m2g= -github.com/aclements/go-moremath v0.0.0-20210112150236-f10218a38794/go.mod h1:7e+I0LQFUI9AXWxOfsQROs9xPhoJtbsyWcjJqDd4KPY= -github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= -github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -github.com/alecthomas/kingpin/v2 v2.4.0 h1:f48lwail6p8zpO1bC4TxtqACaGqHYA22qkHjHpqDjYY= github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= -github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= -github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= -github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= -github.com/apache/arrow/go/v15 v15.0.2 h1:60IliRbiyTWCWjERBCkO1W4Qun9svcYoZrSLcyOsMLE= -github.com/apache/arrow/go/v15 v15.0.2/go.mod h1:DGXsR3ajT524njufqf95822i+KTh+yea1jass9YXgjA= -github.com/apache/thrift v0.13.0 h1:5hryIiq9gtn+MiLVn0wP37kb/uTeRZgN08WoCsAhIhI= -github.com/aristanetworks/goarista v0.0.0-20201012165903-2cb20defcd66 h1:bylzF2sl5pWmmHcdwEku/BPHp5wYjcdjmOnW4siw688= -github.com/aristanetworks/goarista v0.0.0-20201012165903-2cb20defcd66/go.mod h1:QZe5Yh80Hp1b6JxQdpfSEEe8X7hTyTEZSosSrFf/oJE= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a h1:pv34s756C4pEXnjgPfGYgdhg/ZdajGhyOvzx8k+23nw= -github.com/aws/aws-lambda-go v1.13.3 h1:SuCy7H3NLyp+1Mrfp+m80jcbi9KYWAs9/BXwppwRDzY= -github.com/aws/aws-sdk-go-v2 v1.9.1 h1:ZbovGV/qo40nrOJ4q8G33AGICzaPI45FHQWJ9650pF4= -github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= -github.com/aws/aws-sdk-go-v2 v1.21.2 h1:+LXZ0sgo8quN9UOKXXzAWRT3FWd4NxeXWOZom9pE7GA= -github.com/aws/aws-sdk-go-v2 v1.21.2/go.mod h1:ErQhvNuEMhJjweavOYhxVkn2RUx7kQXVATHrjKtxIpM= -github.com/aws/aws-sdk-go-v2/config v1.18.45 h1:Aka9bI7n8ysuwPeFdm77nfbyHCAKQ3z9ghB3S/38zes= -github.com/aws/aws-sdk-go-v2/config v1.18.45/go.mod h1:ZwDUgFnQgsazQTnWfeLWk5GjeqTQTL8lMkoE1UXzxdE= -github.com/aws/aws-sdk-go-v2/credentials v1.13.43 h1:LU8vo40zBlo3R7bAvBVy/ku4nxGEyZe9N8MqAeFTzF8= -github.com/aws/aws-sdk-go-v2/credentials v1.13.43/go.mod h1:zWJBz1Yf1ZtX5NGax9ZdNjhhI4rgjfgsyk6vTY1yfVg= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13 h1:PIktER+hwIG286DqXyvVENjgLTAwGgoeriLDD5C+YlQ= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13/go.mod h1:f/Ib/qYjhV2/qdsf79H3QP/eRE4AkVyEf6sk7XfZ1tg= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43 h1:nFBQlGtkbPzp/NjZLuFxRqmT91rLJkgvsEQs68h962Y= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43/go.mod h1:auo+PiyLl0n1l8A0e8RIeR8tOzYPfZZH/JNlrJ8igTQ= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37 h1:JRVhO25+r3ar2mKGP7E0LDl8K9/G36gjlqca5iQbaqc= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37/go.mod h1:Qe+2KtKml+FEsQF/DHmDV+xjtche/hwoF75EG4UlHW8= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45 h1:hze8YsjSh8Wl1rYa1CJpRmXP21BvOBuc76YhW0HsuQ4= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45/go.mod h1:lD5M20o09/LCuQ2mE62Mb/iSdSlCNuj6H5ci7tW7OsE= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1 h1:w/fPGB0t5rWwA43mux4e9ozFSH5zF1moQemlA131PWc= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37 h1:WWZA/I2K4ptBS1kg0kV1JbBtG/umed0vwHRrmcr9z7k= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37/go.mod h1:vBmDnwWXWxNPFRMmG2m/3MKOe+xEcMDo1tanpaWCcck= -github.com/aws/aws-sdk-go-v2/service/route53 v1.30.2 h1:/RPQNjh1sDIezpXaFIkZb7MlXnSyAqjVdAwcJuGYTqg= -github.com/aws/aws-sdk-go-v2/service/route53 v1.30.2/go.mod h1:TQZBt/WaQy+zTHoW++rnl8JBrmZ0VO6EUbVua1+foCA= -github.com/aws/aws-sdk-go-v2/service/sso v1.15.2 h1:JuPGc7IkOP4AaqcZSIcyqLpFSqBWK32rM9+a1g6u73k= -github.com/aws/aws-sdk-go-v2/service/sso v1.15.2/go.mod h1:gsL4keucRCgW+xA85ALBpRFfdSLH4kHOVSnLMSuBECo= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3 h1:HFiiRkf1SdaAmV3/BHOFZ9DjFynPHj8G/UIO1lQS+fk= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3/go.mod h1:a7bHA82fyUXOm+ZSWKU6PIoBxrjSprdLoM8xPYvzYVg= -github.com/aws/aws-sdk-go-v2/service/sts v1.23.2 h1:0BkLfgeDjfZnZ+MhB3ONb01u9pwFYTCZVhlsSSBvlbU= -github.com/aws/aws-sdk-go-v2/service/sts v1.23.2/go.mod h1:Eows6e1uQEsc4ZaHANmsPRzAKcVDrcmjjWiih2+HUUQ= -github.com/aws/smithy-go v1.8.0 h1:AEwwwXQZtUwP5Mz506FeXXrKBe0jA8gVM+1gEcSRooc= -github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/aws/smithy-go v1.15.0 h1:PS/durmlzvAFpQHDs4wi4sNNP9ExsqZh6IlfdHXgKK8= -github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= -github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= -github.com/bandprotocol/bandchain-packet v0.0.2 h1:FySqsXp6sIh0kHiNBrkvt5CRmsrqTN2Bd26U7cebKxg= -github.com/bandprotocol/bandchain-packet v0.0.2/go.mod h1:pk/wJxznWERdDVU2WWpzt8Tr0WvDSkT66JDYVdIECAo= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= -github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= -github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= -github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= -github.com/bits-and-blooms/bitset v1.5.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bits-and-blooms/bitset v1.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88= -github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= -github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= -github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/bombsimon/wsl/v3 v3.4.0/go.mod h1:KkIB+TXkqy6MvK9BDZVbZxKNYsE1/oLRJbIFtf14qqo= -github.com/bombsimon/wsl/v4 v4.2.1/go.mod h1:Xu/kDxGZTofQcDGCtQe9KCzhHphIe0fDuyWTxER9Feo= -github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= -github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= -github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= -github.com/btcsuite/btcd v0.21.0-beta.0.20201114000516-e9c7a5ac6401/go.mod h1:Sv4JPQ3/M+teHz9Bo5jBpkNcP0x6r7rdihlNL/7tTAs= -github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= -github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= -github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd h1:js1gPwhcFflTZ7Nzl7WHaOTlTr5hIrR4n1NM4v9n4Kw= github.com/btcsuite/btcd v0.24.2 h1:aLmxPguqxza+4ag8R1I2nnJjSu2iFn/kqtHTIImswcY= -github.com/btcsuite/btcd/btcec/v2 v2.1.2/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.2.1/go.mod h1:9/CSmJxmuvqzX9Wh2fXMWToLOHhPd11lSPuIupwTkI8= -github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= -github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= -github.com/btcsuite/goleveldb v1.0.0 h1:Tvd0BfvqX9o823q1j2UZ/epQo09eJh6dTcRp79ilIN4= -github.com/btcsuite/snappy-go v1.0.0 h1:ZxaA6lo2EpxGddsA8JwWOcxlzRybb444sgmeJQMJGQE= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 h1:R8vQdOQdZ9Y3SkEwmHoWBmX1DNXhXZqlTpq6s4tyJGc= -github.com/btcsuite/winsvc v1.0.0 h1:J9B4L7e3oqhXOcm+2IuNApwzQec85lE+QaikUcCs+dk= -github.com/bufbuild/buf v1.9.0 h1:8a60qapVuRj6crerWR0rny4UUV/MhZSL5gagJuBxmx8= -github.com/bufbuild/buf v1.9.0/go.mod h1:1Q+rMHiMVcfgScEF/GOldxmu4o9TrQ2sQQh58K6MscE= -github.com/bufbuild/connect-go v1.0.0 h1:htSflKUT8y1jxhoPhPYTZMrsY3ipUXjjrbcZR5O2cVo= -github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= -github.com/bugsnag/bugsnag-go v1.5.3 h1:yeRUT3mUE13jL1tGwvoQsKdVbAsQx9AJ+fqahKveP04= -github.com/bugsnag/bugsnag-go v1.5.3/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= -github.com/bugsnag/panicwrap v1.2.0 h1:OzrKrRvXis8qEvOkfcxNcYbOd2O7xXS2nnKMEMABFQA= -github.com/bugsnag/panicwrap v1.2.0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/bwesterb/go-ristretto v1.2.0 h1:xxWOVbN5m8NNKiSDZXE1jtZvZnC6JSJ9cYFADiZcWtw= -github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/casbin/casbin/v2 v2.37.0 h1:/poEwPSovi4bTOcP752/CsTQiRz2xycyVKFG7GUhbDw= -github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= -github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/cespare/cp v1.1.1 h1:nCb6ZLdB7NRaqsm91JtQTAme2SKJzXVsdPIPkyJr1MU= -github.com/cespare/cp v1.1.1/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= -github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= -github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927 h1:SKI1/fuSdodxmNNyVBR8d7X/HuLnRpvvFO0AgyQk764= github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= -github.com/cheggaaa/pb v1.0.27 h1:wIkZHkNfC7R6GI5w7l/PdAdzXzlrbcI3p8OAlnkTsnc= -github.com/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs= -github.com/chromedp/chromedp v0.9.2/go.mod h1:LkSXJKONWTCHAfQasKFUZI+mxqS4tZqhmtGzzhLsnLs= -github.com/chromedp/sysutil v1.0.0/go.mod h1:kgWmDdq8fTzXYcKIBqIYvRRTnYb9aNS9moAV0xufSww= -github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= -github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic= -github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= -github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= -github.com/ckaznocha/intrange v0.1.1 h1:gHe4LfqCspWkh8KpJFs20fJz3XRHFBFUV9yI7Itu83Q= -github.com/ckaznocha/intrange v0.1.1/go.mod h1:RWffCw/vKBwHeOEwWdCikAtY0q4gGt8VhJZEEA5n+RE= -github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= -github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec h1:EdRZT3IeKQmfCSrgo8SZ8V3MEnskuJP0wCYNpe+aiXo= -github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= -github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= -github.com/cloudflare/cloudflare-go v0.79.0 h1:ErwCYDjFCYppDJlDJ/5WhsSmzegAUe2+K9qgFyQDg3M= -github.com/cloudflare/cloudflare-go v0.79.0/go.mod h1:gkHQf9xEubaQPEuerBuoinR9P8bf8a05Lq0X6WKy1Oc= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4 h1:hzAQntlaYRkVSFEfj9OTWlVV1H155FMD8BTKktLv0QI= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b h1:ga8SEFjZ60pxLcmhnThWgvH2wg8376yUJmPhEH4H3kw= -github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= -github.com/cncf/xds/go v0.0.0-20240822171458-6449f94b4d59 h1:fLZ97KE86ELjEYJCEUVzmbhfzDxHHGwBrDVMd4XL6Bs= github.com/cncf/xds/go v0.0.0-20240822171458-6449f94b4d59/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= -github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= -github.com/cockroachdb/datadriven v1.0.2/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/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= -github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593/go.mod h1:6hk1eMY/u5t+Cf18q5lFMUA1Rc+Sm5I6Ra1QuPyxXCo= -github.com/cockroachdb/redact v1.0.8/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 h1:sDMmm+q/3+BukdIpxwO365v/Rbspp2Nt5XntgQRXq8Q= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= -github.com/coinbase/kryptology v1.8.0 h1:Aoq4gdTsJhSU3lNWsD5BWmFSz2pE0GlmrljaOxepdYY= -github.com/coinbase/kryptology v1.8.0/go.mod h1:RYXOAPdzOGUe3qlSFkMGn58i3xUA8hmxYHksuq+8ciI= -github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= -github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= -github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= -github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= -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 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= -github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= -github.com/consensys/gnark-crypto v0.5.3 h1:4xLFGZR3NWEH2zy+YzvzHicpToQR8FXFbfLNvpGB+rE= -github.com/consensys/gnark-crypto v0.5.3/go.mod h1:hOdPlWQV1gDLp7faZVeg8Y0iEPFaOUnCc4XeCCk96p0= -github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= -github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= -github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -github.com/containerd/containerd v1.6.8 h1:h4dOFDwzHmqFEP754PgfgTeVXFnLiRc6kiqC7tplDJs= -github.com/containerd/containerd v1.6.8/go.mod h1:By6p5KqPK0/7/CgO/A6t/Gz+CUYUu2zf1hUaaymVXB0= -github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY= -github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= -github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= -github.com/coreos/go-etcd v2.0.0+incompatible h1:bXhRBIXoTm9BYHS3gE0TtQuyNZyeEMux2sDi4oo5YOo= -github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7 h1:u9SHYsPQNyt5tgDm3YN7+9dYrpK96E5wFilTFWIDZOM= -github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf h1:CAKfRE2YtTUIjjh1bkBtyYFaUT/WmOqsJjgtihT0vMI= -github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1 h1:6YvzjQtc+cDwCe9XwYPPa8zFCxNG79N7vmCjpK+vGOg= -github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1/go.mod h1:JUMM2MxF9wuwzRWZJjb8BjXsn1BmPmdBd3a75pIct4I= -github.com/cosmos/ibc-go/v3 v3.1.0 h1:aVPqkrGBluz6t9+d/sLZIG/zQ9O1KJzVeR4UlL/IFTQ= -github.com/cosmos/ibc-go/v3 v3.1.0/go.mod h1:DbOlOa4yKumaHGKApKkJN90L88PCjSD9ZBdAfL9tT40= -github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI= -github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= -github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= -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 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= -github.com/crate-crypto/go-ipa v0.0.0-20230601170251-1830d0757c80/go.mod h1:gzbVz57IDJgQ9rLQwfSk696JGWof8ftznEL9GoAv3NI= -github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c h1:uQYC5Z1mdLRPrZhHjHxufI8+2UG/i25QG92j0Er9p6I= -github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= -github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDFnUp1TsawI= -github.com/crate-crypto/go-kzg-4844 v1.0.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= -github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= -github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= -github.com/cristalhq/acmd v0.11.2/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= -github.com/cristalhq/acmd v0.12.0 h1:RdlKnxjN+txbQosg8p/TRNZ+J1Rdne43MVQZ1zDhGWk= -github.com/cristalhq/acmd v0.12.0/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= -github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= -github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= -github.com/decred/dcrd/lru v1.0.0 h1:Kbsb1SFDsIlaupWPwsPp+dkxiBY1frcS07PCPgotKz8= -github.com/deepmap/oapi-codegen v1.6.0 h1:w/d1ntwh91XI0b/8ja7+u5SvA4IFfM0UNNLmiDR1gg0= -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= -github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= -github.com/denisenkom/go-mssqldb v0.12.0 h1:VtrkII767ttSPNRfFekePK3sctr+joXgO58stqQbtUA= -github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= -github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= -github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= -github.com/djherbis/atime v1.1.0 h1:rgwVbP/5by8BvvjBNrbh64Qz33idKT3pSnMSJsxhi0g= github.com/djherbis/atime v1.1.0/go.mod h1:28OF6Y8s3NQWwacXc5eZTsEsiMzp7LF8MbXE+XJPdBE= -github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= -github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= -github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/cli v20.10.17+incompatible h1:eO2KS7ZFeov5UJeaDmIs1NFEDRf32PaqRpvoEkKBy5M= -github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v24.0.7+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.19+incompatible h1:lzEmjivyNHFHMNAFLXORMBXyGIhw/UP4DvJwvyKYq64= -github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v24.0.9+incompatible h1:HPGzNmwfLZWdxHqK9/II92pyi1EpYKsAqcl4G0Of9v0= -github.com/docker/docker v24.0.9+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0 h1:C7t6eeMaEQVy6e8CarIhscYQlNmw5e3G36y7l7Y21Ao= -github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0/go.mod h1:56wL82FO0bfMU5RvfXoIwSOP2ggqqxT+tAfNEIyxuHw= -github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= -github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= -github.com/dop251/goja v0.0.0-20230605162241-28ee0ee714f3/go.mod h1:QMWlm50DNe14hD7t24KEqZuUdC9sOTy8W6XbCU1mlw4= -github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= -github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d h1:W1n4DvpzZGOISgp7wWNtraLcHtnmnTwBlJidqtMIuwQ= -github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d/go.mod h1:DngW8aVqWbuLRMHItjPUyqdj+HWPvnQe8V8y1nDpIbM= -github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= -github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= -github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= -github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= -github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= -github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= -github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/envoyproxy/go-control-plane v0.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI= -github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0= -github.com/envoyproxy/go-control-plane v0.13.0 h1:HzkeUz1Knt+3bK+8LG1bxOO/jzWZmdxpwC51i202les= github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnvMg4d7nvT/wl9WgVXn3Q8= -github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= -github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= -github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= -github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/ethereum/c-kzg-4844 v1.0.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= -github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= -github.com/ethereum/go-ethereum v1.10.21 h1:5lqsEx92ZaZzRyOqBEXux4/UR06m296RGzN3ol3teJY= -github.com/ethereum/go-ethereum v1.10.21/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg= -github.com/ethereum/go-ethereum v1.10.22/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg= -github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0 h1:KrE8I4reeVvf7C1tm8elRjj4BdscTYzz/WAbYyf/JI4= -github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0/go.mod h1:D9AJLVXSyZQXJQVk8oh1EwjISE+sJTn2duYIZC0dy3w= -github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= -github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= -github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/ferranbt/fastssz v0.1.2 h1:Dky6dXlngF6Qjc+EfDipAkE83N5I5DE68bY6O0VLNPk= -github.com/ferranbt/fastssz v0.1.2/go.mod h1:X5UPrE2u1UJjxHA8X54u04SBwdAQjG2sFtWs39YxyWs= -github.com/fjl/gencodec v0.0.0-20230517082657-f9840df7b83e h1:bBLctRc7kr01YGvaDfgLbTwjFNW5jdp5y5rj8XXBHfY= -github.com/fjl/gencodec v0.0.0-20230517082657-f9840df7b83e/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= -github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA= -github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/flosch/pongo2/v4 v4.0.2 h1:gv+5Pe3vaSVmiJvh/BZa82b7/00YUGm0PIyVVLop0Hw= github.com/flosch/pongo2/v4 v4.0.2/go.mod h1:B5ObFANs/36VwxxlgKpdchIJHMvHB562PW+BWPhwZD8= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db h1:gb2Z18BhTPJPpLQWj4T+rfKHYCHxRHCtRxhKKjRidVw= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 h1:a9ENSRDFBUPkJ5lCgVZh26+ZbGyoVJG7yb5SSzF5H54= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 h1:IZqZOB2fydHte3kUgxrzK5E1fW7RQGeDwE8F/ZZnUYc= -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= -github.com/gballet/go-verkle v0.0.0-20230607174250-df487255f46b/go.mod h1:CDncRYVRSDqwakm282WEkjfaAj1hxU/v5RXxk5nXOiI= -github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc= -github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= -github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y= -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.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ= github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= -github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9 h1:r5GgOLGbza2wVHRzK7aAj6lWZjfbAwiu/RDCVOKjRyM= -github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= -github.com/ghostiam/protogetter v0.3.5/go.mod h1:7lpeDnEJ1ZjL/YtyoN99ljO4z0pd3H0d18/t2dPBxHw= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= -github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= -github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= -github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= -github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= -github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= -github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-chi/chi/v5 v5.0.7 h1:rDTPXLDHGATaeHvVlLcR4Qe0zftYethFucbjVQ1PxU8= -github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= -github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= -github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= -github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= -github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= -github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4 h1:WtGNWLvXpe6ZudgnXrq0barxBImvnnJoMEhXAzcbM0I= -github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= -github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab h1:xveKWz2iaueeTaUgdetzel+U7exyigDYBryyVfV/rZk= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= -github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= -github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= -github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= -github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= -github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= -github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= -github.com/go-zookeeper/zk v1.0.2 h1:4mx0EYENAdX/B/rbunjlt5+4RTA/a9SMHBRuSKdGxPM= -github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= -github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= -github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= -github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= -github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= -github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= -github.com/gobwas/ws v1.1.0 h1:7RFti/xnNkMJnrK7D1yQ/iCIB5OrrY/54/H930kIbHA= -github.com/gobwas/ws v1.1.0/go.mod h1:nzvNcVha5eUziGrbxFCo6qFIojQHjJV5cLYIbezhfL0= -github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= -github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA= -github.com/gofiber/fiber/v2 v2.52.2 h1:b0rYH6b06Df+4NyrbdptQL8ifuxw/Tf2DgfkZkDaxEo= github.com/gofiber/fiber/v2 v2.52.2/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= -github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= -github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= -github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= -github.com/gogo/status v1.1.0 h1:+eIkrewn5q6b30y+g/BJINVVdi2xH7je5MPJ3ZPK3JA= -github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= -github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= -github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang-jwt/jwt/v4 v4.0.0 h1:RAqyYixv1p7uEnocuy8P1nru5wprCh/MH2BIlW5z5/o= -github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= -github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188 h1:+eHOFJl1BaXrQxKX+T06f78590z4qA2ZzBTqahsKSE4= -github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6J5HIP8ZtyMdiDscjMLfRBSPuzVVeo= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/google/generative-ai-go v0.18.0 h1:6ybg9vOCLcI/UpBBYXOTVgvKmcUKFRNj+2Cj3GnebSo= -github.com/google/generative-ai-go v0.18.0/go.mod h1:JYolL13VG7j79kM5BtHz4qwONHkeJQzOCkKXnpqtS/E= -github.com/google/go-github/v43 v43.0.0 h1:y+GL7LIsAIF2NZlJ46ZoC/D1W1ivZasT0lnWHMYPZ+U= -github.com/google/go-github/v43 v43.0.0/go.mod h1:ZkTvvmCXBvsfPpTHXnH/d2hP9Y0cTbvN9kr5xqyXOIc= -github.com/google/go-pkcs11 v0.2.1-0.20230907215043-c6f79328ddf9 h1:OF1IPgv+F4NmqmJ98KTjdN97Vs1JxDPB3vbmYzV2dpk= -github.com/google/go-pkcs11 v0.2.1-0.20230907215043-c6f79328ddf9/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= -github.com/google/go-pkcs11 v0.3.0 h1:PVRnTgtArZ3QQqTGtbtjtnIkzl2iY2kt24yqbrf7td8= github.com/google/go-pkcs11 v0.3.0/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= -github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= -github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= -github.com/google/pprof v0.0.0-20230207041349-798e818bf904/go.mod h1:uglQLonpP8qtYCYyzA+8c/9qtqgA3qsXGYqCPKARAFg= -github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= -github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= -github.com/google/safehtml v0.0.2/go.mod h1:L4KWwDsUJdECRAEpZoBn3O64bQaywRscowZjJAzjHnU= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE= -github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= -github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= -github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/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.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/cloud-bigtable-clients-test v0.0.2 h1:S+sCHWAiAc+urcEnvg5JYJUOdlQEm/SEzQ/c/IdAH5M= -github.com/googleapis/cloud-bigtable-clients-test v0.0.2/go.mod h1:mk3CrkrouRgtnhID6UZQDK3DrFFa7cYCAJcEmNsHYrY= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/enterprise-certificate-proxy v0.3.3/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= -github.com/googleapis/gax-go v0.0.0-20161107002406-da06d194a00e h1:CYRpN206UTHUinz3VJoLaBdy1gEGeJNsqT0mvswDcMw= -github.com/googleapis/gax-go v0.0.0-20161107002406-da06d194a00e/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= -github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4= -github.com/googleapis/gax-go/v2 v2.12.4/go.mod h1:KYEYLorsnIGDi/rPC8b5TdlB9kbKoFubselGIoBMCwI= -github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/googleapis/google-cloud-go-testing v0.0.0-20210719221736-1c9a4c676720 h1:zC34cGQu69FG7qzJ3WiKW244WfhDC3xxYMeNOX2gtUQ= github.com/googleapis/google-cloud-go-testing v0.0.0-20210719221736-1c9a4c676720/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= -github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= -github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= -github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= -github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= -github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= -github.com/gotestyourself/gotestyourself v1.4.0 h1:CDSlSIuRL/Fsc72Ln5lMybtrCvSRDddsHsDRG/nP7Rg= -github.com/gotestyourself/gotestyourself v1.4.0/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= -github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0= -github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.3 h1:I8MsauTJQXZ8df8qJvEln0kYNc3bSapuaSsEsnFdEFU= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.3/go.mod h1:lZdb/YAJUSj9OqrCHs2ihjtoO3+xK3G53wTYXFWRGDo= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= -github.com/guptarohit/asciigraph v0.5.5 h1:ccFnUF8xYIOUPPY3tmdvRyHqmn1MYI9iv1pLKX+/ZkQ= -github.com/guptarohit/asciigraph v0.5.5/go.mod h1:dYl5wwK4gNsnFf9Zp+l06rFiDZ5YtXM6x7SRWZ3KGag= -github.com/hashicorp/consul/api v1.28.2 h1:mXfkRHrpHN4YY3RqL09nXU1eHKLNiuAN4kHvDQ16k/8= -github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE= -github.com/hashicorp/consul/sdk v0.3.0 h1:UOxjlb4xVNF93jak1mzzoBatyFju9nrkxpVwIp/QqxQ= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= -github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= -github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= -github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= -github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s= -github.com/hashicorp/go-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA= -github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= -github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= -github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= -github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= -github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= -github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= -github.com/hashicorp/mdns v1.0.0 h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs= -github.com/hashicorp/memberlist v0.1.3 h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M= -github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= -github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= -github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6wn4Ej8vjuVGxeHdan+bRb2ebyv4= -github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= -github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= -github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= -github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= -github.com/hudl/fargo v1.4.0 h1:ZDDILMbB37UlAVLlWcJ2Iz1XuahZZTDZfdCKeclfq2s= -github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= -github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= -github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= -github.com/hydrogen18/memlistener v1.0.0 h1:JR7eDj8HD6eXrc5fWLbSUnfcQFL06PYvCc0DKQnWfaU= -github.com/hydrogen18/memlistener v1.0.0/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= -github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= -github.com/ianlancetaylor/demangle v0.0.0-20220517205856-0058ec4f073c/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= -github.com/ianlancetaylor/demangle v0.0.0-20240312041847-bd984b5ce465 h1:KwWnWVWCNtNq/ewIX7HIKnELmEx2nDP42yskD/pi7QE= -github.com/ianlancetaylor/demangle v0.0.0-20240312041847-bd984b5ce465/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw= -github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= -github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= -github.com/influxdata/influxdb-client-go/v2 v2.4.0 h1:HGBfZYStlx3Kqvsv1h2pJixbCl/jhnFtxpKFAv9Tu5k= -github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= -github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab h1:HqW4xhhynfjrtEiiSGcQUd6vrK23iMam1FO8rI7mwig= -github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c h1:qSHzRbhzK8RdXOsAdfDgO49TtqC1oZ+acxPrkfTxcCs= -github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/informalsystems/tm-load-test v1.3.0 h1:FGjKy7vBw6mXNakt+wmNWKggQZRsKkEYpaFk/zR64VA= -github.com/informalsystems/tm-load-test v1.3.0/go.mod h1:OQ5AQ9TbT5hKWBNIwsMjn6Bf4O0U4b1kRc+0qZlQJKw= -github.com/iris-contrib/go.uuid v2.0.0+incompatible h1:XZubAYg61/JwnJNbZilGjf3b3pB80+OQg2qf6c8BfWE= -github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/httpexpect/v2 v2.12.1 h1:3cTZSyBBen/kfjCtgNFoUKi1u0FVXNaAjyRJOo6AVS4= github.com/iris-contrib/httpexpect/v2 v2.12.1/go.mod h1:7+RB6W5oNClX7PTwJgJnsQP3ZuUUYB3u61KCqeSgZ88= -github.com/iris-contrib/schema v0.0.6 h1:CPSBLyx2e91H2yJzPuhGuifVRnZBBJ3pCOMbOvPZaTw= github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= -github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.4.3 h1:cxFyXhxlvAifxnkKKdlxv8XqUf59tDlYjnV5YYfsJJY= -github.com/jackc/pgx/v5 v5.4.3/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA= -github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= -github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a h1:d4+I1YEKVmWZrgkt6jpXBnLgV2ZjO0YxEtLDdfIZfH4= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= -github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267 h1:TMtDYDHKYY15rFihtRfck/bfFqNfvcabqvXAFQfAUpY= -github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267/go.mod h1:h1nSAbGFqGVzn6Jyl1R/iCcBUHN4g+gW1u9CoBTrb9E= -github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= -github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= -github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= -github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= -github.com/jrick/logrotate v1.0.0 h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= -github.com/jsternberg/zap-logfmt v1.3.0 h1:z1n1AOHVVydOOVuyphbOKyR4NICDQFiJMn1IK5hVQ5Y= -github.com/jsternberg/zap-logfmt v1.3.0/go.mod h1:N3DENp9WNmCZxvkBD/eReWwz1149BK6jEN9cQ4fNwZE= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= -github.com/karalabe/hid v1.0.1-0.20240306101548-573246063e52 h1:msKODTL1m0wigztaqILOtla9HeW1ciscYG4xjLtvk5I= -github.com/karalabe/hid v1.0.1-0.20240306101548-573246063e52/go.mod h1:qk1sX/IBgppQNcGCRoj90u6EGC056EBoIc1oEjCWla8= -github.com/karalabe/usb v0.0.0-20191104083709-911d15fe12a9 h1:ZHuwnjpP8LsVsUYqTqeVAI+GfDfJ6UNPrExZF+vX/DQ= -github.com/karalabe/usb v0.0.0-20191104083709-911d15fe12a9/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA= -github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= -github.com/kataras/blocks v0.0.7 h1:cF3RDY/vxnSRezc7vLFlQFTYXG/yAr1o7WImJuZbzC4= github.com/kataras/blocks v0.0.7/go.mod h1:UJIU97CluDo0f+zEjbnbkeMRlvYORtmc1304EeyXf4I= -github.com/kataras/golog v0.1.8 h1:isP8th4PJH2SrbkciKnylaND9xoTtfxv++NB+DF0l9g= github.com/kataras/golog v0.1.8/go.mod h1:rGPAin4hYROfk1qT9wZP6VY2rsb4zzc37QpdPjdkqVw= -github.com/kataras/iris/v12 v12.2.0 h1:WzDY5nGuW/LgVaFS5BtTkW3crdSKJ/FEgWnxPnIVVLI= github.com/kataras/iris/v12 v12.2.0/go.mod h1:BLzBpEunc41GbE68OUaQlqX4jzi791mx5HU04uPb90Y= -github.com/kataras/jwt v0.1.8 h1:u71baOsYD22HWeSOg32tCHbczPjdCk7V4MMeJqTtmGk= -github.com/kataras/jwt v0.1.8/go.mod h1:Q5j2IkcIHnfwy+oNY3TVWuEBJNw0ADgCcXK9CaZwV4o= -github.com/kataras/neffos v0.0.21 h1:UwN/F44jlqdtgFI29y3VhA7IlJ4JbK3UjCbTDg1pYoo= -github.com/kataras/neffos v0.0.21/go.mod h1:FeGka8lu8cjD2H+0OpBvW8c6xXawy3fj5VX6xcIJ1Fg= -github.com/kataras/pio v0.0.11 h1:kqreJ5KOEXGMwHAWHDwIl+mjfNCPhAwZPa8gK7MKlyw= github.com/kataras/pio v0.0.11/go.mod h1:38hH6SWH6m4DKSYmRhlrCJ5WItwWgCVrTNU62XZyUvI= -github.com/kataras/sitemap v0.0.6 h1:w71CRMMKYMJh6LR2wTgnk5hSgjVNB9KL60n5e2KHvLY= github.com/kataras/sitemap v0.0.6/go.mod h1:dW4dOCNs896OR1HmG+dMLdT7JjDk7mYBzoIRwuj5jA4= -github.com/kataras/tunnel v0.0.4 h1:sCAqWuJV7nPzGrlb0os3j49lk2JhILT0rID38NHNLpA= github.com/kataras/tunnel v0.0.4/go.mod h1:9FkU4LaeifdMWqZu7o20ojmW4B7hdhv2CMLwfnHGpYw= -github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM= -github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= -github.com/kilic/bls12-381 v0.1.0 h1:encrdjqKMEvabVQ7qYOKu1OvhqpK4s47wDYtNiPtlp4= -github.com/kilic/bls12-381 v0.1.0/go.mod h1:vDTTHJONJ6G+P2R74EhnyotQDTliQDnFEwhdmfzw1ig= -github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= -github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= -github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE= -github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.14.4/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/compress v1.16.4/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.1 h1:vJi+O/nMdFt0vqm8NZBI6wzALWdA2X+egi0ogNyrC/w= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= -github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= -github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= -github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= -github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= -github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= -github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= -github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/echo/v4 v4.9.0/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks= -github.com/labstack/echo/v4 v4.10.0 h1:5CiyngihEO4HXsz3vVsJn7f8xAlWwRr3aY6Ih280ZKA= github.com/labstack/echo/v4 v4.10.0/go.mod h1:S/T/5fy/GigaXnHTkh0ZGe4LpkkQysvRjFMSUTkDRNQ= -github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= -github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= -github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= -github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= -github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= -github.com/leonklingele/grouper v1.1.1 h1:suWXRU57D4/Enn6pXR0QVqqWWrnJ9Osrz+5rjt8ivzU= -github.com/leonklingele/grouper v1.1.1/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= -github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= -github.com/libp2p/go-flow-metrics v0.1.0/go.mod h1:4Xi8MX8wj5aWNDAZttg6UPmc0ZrnFNsMtpsYUClFtro= -github.com/libp2p/go-libp2p v0.34.0 h1:J+SL3DMz+zPz06OHSRt42GKA5n5hmwgY1l7ckLUz3+c= -github.com/libp2p/go-libp2p v0.34.0/go.mod h1:snyJQix4ET6Tj+LeI0VPjjxTtdWpeOhYt5lEY0KirkQ= -github.com/libp2p/go-libp2p-asn-util v0.3.0/go.mod h1:B1mcOrKUE35Xq/ASTmQ4tN3LNzVVaMNmq2NACuqyB9w= -github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8= -github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg= -github.com/libp2p/go-mplex v0.7.0/go.mod h1:rW8ThnRcYWft/Jb2jeORBmPd6xuG3dGxWN/W168L9EU= -github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM= -github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC3uRBM= -github.com/libp2p/go-nat v0.2.0/go.mod h1:3MJr+GRpRkyT65EpVPBstXLvOlAPzUVlG6Pwg9ohLJk= -github.com/libp2p/go-netroute v0.2.1/go.mod h1:hraioZr0fhBjG0ZRXJJ6Zj2IVEVNx6tDTFQfSmcq7mQ= -github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc= -github.com/libp2p/go-reuseport v0.2.0/go.mod h1:bvVho6eLMm6Bz5hmU0LYN3ixd3nPPvtIlaURZZgOY4k= -github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU= -github.com/libp2p/go-yamux/v4 v4.0.0/go.mod h1:NWjl8ZTLOGlozrXSOZ/HlfG++39iKNnM5wwmtQP1YB4= -github.com/libp2p/go-yamux/v4 v4.0.1/go.mod h1:NWjl8ZTLOGlozrXSOZ/HlfG++39iKNnM5wwmtQP1YB4= -github.com/libp2p/zeroconf/v2 v2.2.0/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743 h1:143Bb8f8DuGWck/xpNUOckBVYfFbBTnLevfRZ1aVVqo= -github.com/lightstep/lightstep-tracer-go v0.18.1 h1:vi1F1IQ8N7hNWytK9DpJsUfQhGuNSc19z330K6vl4zk= -github.com/linxGnu/grocksdb v1.8.6/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= -github.com/linxGnu/grocksdb v1.8.12/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= github.com/linxGnu/grocksdb v1.8.14/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= -github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77 h1:6xiz3+ZczT3M4+I+JLpcPGG1bQKm8067HktB17EDWEE= -github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= -github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/lyft/protoc-gen-star/v2 v2.0.4-0.20230330145011-496ad1ac90a4 h1:sIXJOMrYnQZJu7OB7ANSF4MYri2fTEGIsRLz6LwI4xE= github.com/lyft/protoc-gen-star/v2 v2.0.4-0.20230330145011-496ad1ac90a4/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= -github.com/lyft/protoc-gen-validate v0.0.13 h1:KNt/RhmQTOLr7Aj8PsJ7mTronaFyx80mRTT9qF261dA= -github.com/magefile/mage v1.14.0 h1:6QDX3g6z1YvJ4olPhT1wksUcSa/V0a1B+pJb73fBjyo= -github.com/magefile/mage v1.14.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= -github.com/mailgun/raymond/v2 v2.0.48 h1:5dmlB680ZkFG2RN/0lvTAghrSxIESeu9/2aeDqACtjw= github.com/mailgun/raymond/v2 v2.0.48/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= -github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 h1:gWg6ZQ4JhDfJPqlo2srm/LN17lpybq15AryXIRcWYLE= -github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= -github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= -github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2 h1:JAEbJn3j/FrhdWA9jW8B5ajsLIjeuEHLi8xE4fk997o= github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= -github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= -github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= 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 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= 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/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= -github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mediocregopher/radix/v3 v3.8.1 h1:rOkHflVuulFKlwsLY01/M2cM2tWCjDoETcMqKbAWu1M= -github.com/mediocregopher/radix/v3 v3.8.1/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= -github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517 h1:zpIH83+oKzcpryru8ceC6BxnoG8TBrhgAvRg8obzup0= -github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= -github.com/microcosm-cc/bluemonday v1.0.23 h1:SMZe2IGa0NuHvnVNAZ+6B38gsTbi5e4sViiWJyDDqFY= github.com/microcosm-cc/bluemonday v1.0.23/go.mod h1:mN70sk7UkkF8TUr2IGBpNN0jAgStuPzlK76QuruE/z4= -github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg= -github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/miekg/dns v1.1.53/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY= -github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY= -github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= -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/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= -github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= -github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= -github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= -github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= -github.com/mitchellh/gox v0.4.0 h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc= -github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= -github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= -github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= -github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= -github.com/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM= -github.com/mmcloughlin/profile v0.1.1 h1:jhDmAqPyebOsVDOCICJoINoLb/AnLBaUw58nFzxWS2w= -github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= -github.com/moby/buildkit v0.10.4 h1:FvC+buO8isGpUFZ1abdSLdGHZVqg9sqI4BbFL8tlzP4= -github.com/moby/buildkit v0.10.4/go.mod h1:Yajz9vt1Zw5q9Pp4pdb3TCSUXJBIroIQGQ3TTs/sLug= -github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI= -github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5 h1:0KqC6/sLy7fDpBdybhVkkv4Yz+PmB7c9Dz9z3dLW804= -github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= -github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76 h1:0xuRacu/Zr+jX+KyLLPPktbwXqyOvnOPUQmMLzX1jxU= -github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= -github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= -github.com/nats-io/jwt v0.3.2 h1:+RB5hMpXUUA2dfxuhBTEkMOrYmM+gKIZYS1KjSostMI= -github.com/nats-io/jwt/v2 v2.2.1-0.20220330180145-442af02fd36a h1:lem6QCvxR0Y28gth9P+wV2K/zYUUAkJ+55U8cpS0p5I= -github.com/nats-io/jwt/v2 v2.2.1-0.20220330180145-442af02fd36a/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= -github.com/nats-io/jwt/v2 v2.3.0 h1:z2mA1a7tIf5ShggOFlR1oBPgd6hGqcDYsISxZByUzdI= -github.com/nats-io/jwt/v2 v2.3.0/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= -github.com/nats-io/nats-server/v2 v2.8.4 h1:0jQzze1T9mECg8YZEl8+WYUXb9JKluJfCBriPUtluB4= -github.com/nats-io/nats-server/v2 v2.8.4/go.mod h1:8zZa+Al3WsESfmgSs98Fi06dRWLH5Bnq90m5bKD/eT4= -github.com/nats-io/nats.go v1.34.0 h1:fnxnPCNiwIG5w08rlMcEKTUw4AV/nKyGCOJE8TdhSPk= -github.com/nats-io/nats.go v1.34.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8= -github.com/nats-io/nkeys v0.4.7 h1:RwNJbbIdYCoClSDNY7QVKZlyb/wfT6ugvFCiKy6vDvI= -github.com/nats-io/nkeys v0.4.7/go.mod h1:kqXRgRDPlGy7nGaEDMuYzmiJCIAAWDK0IMBtDmGD0nc= -github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= -github.com/neilotoole/errgroup v0.1.6 h1:PODGqPXdT5BC/zCYIMoTrwV+ujKcW+gBXM6Ye9Ve3R8= -github.com/neilotoole/errgroup v0.1.6/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= -github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= -github.com/notional-labs/wasmd v0.29.0-sdk46.0.20221114145317-d6e67fd50956 h1:gT+v1UFkZAL9GK5paedZPxL8Venc7SqbrAuKBh1q5Jk= -github.com/notional-labs/wasmd v0.29.0-sdk46.0.20221114145317-d6e67fd50956/go.mod h1:n0HuoJR2cMpg9jKqR+x+KGO/rQsrzsDPEsgwHHs70dM= -github.com/oasisprotocol/curve25519-voi v0.0.0-20220708102147-0a8a51822cae/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= -github.com/oklog/oklog v0.3.2 h1:wVfs8F+in6nTBMkA7CbRw+zZMIB7nNM825cM1wuzoTk= -github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= -github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/onsi/ginkgo/v2 v2.17.2/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc= github.com/onsi/ginkgo/v2 v2.20.1/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI= -github.com/onsi/gomega v1.33.0/go.mod h1:+925n5YtiFsLzzafLUHzVMBpvvRAzrydIBiSIxjX3wY= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= -github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 h1:ZCnq+JUrvXcDVhX/xRolRBZifmabN1HcS1wrPSvxhrU= -github.com/openzipkin/zipkin-go v0.2.5 h1:UwtQQx2pyPIgWYHRg+epgdx1/HnBQTgN3/oIYEJTQzU= -github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= -github.com/ory/dockertest/v3 v3.9.1 h1:v4dkG+dlu76goxMiTT2j8zV7s4oPPEppKT8K8p2f1kY= -github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= -github.com/otiai10/curr v1.0.0 h1:TJIWdbX0B+kpNagQrjgq8bCMrbhiuX73M2XwgtDMoOI= -github.com/otiai10/mint v1.3.1 h1:BCmzIS3n71sGfHB5NMNDB3lHYPz8fWSkCAErHed//qc= -github.com/pact-foundation/pact-go v1.0.4 h1:OYkFijGHoZAYbOIb1LWXrwKQbMMRUv1oQ89blD2Mh2Q= -github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= -github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= -github.com/performancecopilot/speed v3.0.0+incompatible h1:2WnRzIquHa5QxaJKShDkLM+sc0JPuwhXzK8OYOyt3Vg= -github.com/performancecopilot/speed/v4 v4.0.0 h1:VxEDCmdkfbQYDlcr/GC9YoN9PQ6p8ulk9xVsepYy9ZY= -github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= -github.com/philhofer/fwd v1.1.1 h1:GdGcTjf5RNAxwS4QLsiMzJYj5KEvPJD3Abr261yRQXQ= -github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw= -github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= -github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= -github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/diff v0.0.0-20200914180035-5b29258ca4f7/go.mod h1:zO8QMzTeZd5cpnIkz/Gn6iK0jDfGicM1nynOkkPIl28= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= -github.com/pkg/profile v1.6.0 h1:hUDfIISABYI59DyeB3OTay/HxSRwTQ8rB/H83k6r5dM= -github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pkg/sftp v1.13.6 h1:JFZT4XbOU7l77xGSpOdW+pwIMqP044IyjXX6FGyEKFo= github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk= -github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.0/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.20.4/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= @@ -1454,242 +231,39 @@ github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+ github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/tsdb v0.10.0 h1:If5rVCMTp6W2SiRAQFlbpJNgVlgMEd+U2GZckwK38ic= -github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4= -github.com/protolambda/bls12-381-util v0.1.0 h1:05DU2wJN7DTU7z28+Q+zejXkIsA/MF8JZQGhtBZZiWk= -github.com/protolambda/bls12-381-util v0.1.0/go.mod h1:cdkysJTRpeFeuUVx/TXGDQNMTiRAalk1vQw3TYTHcE4= -github.com/protolambda/zrnt v0.32.2 h1:KZ48T+3UhsPXNdtE/5QEvGc9DGjUaRI17nJaoznoIaM= -github.com/protolambda/zrnt v0.32.2/go.mod h1:A0fezkp9Tt3GBLATSPIbuY4ywYESyAuc/FFmPKg8Lqs= -github.com/protolambda/ztyp v0.2.2 h1:rVcL3vBu9W/aV646zF6caLS/dyn9BN8NYiuJzicLNyY= -github.com/protolambda/ztyp v0.2.2/go.mod h1:9bYgKGqg3wJqT9ac1gI2hnVb0STQq7p/1lapqrqY1dU= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71 h1:CNooiryw5aisadVfzneSZPswRWvnVW8hF1bS/vo8ReI= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/rabbitmq/amqp091-go v1.2.0 h1:1pHBxAsQh54R9eX/xo679fUEAfv3loMqi0pvRFOj2nk= -github.com/rabbitmq/amqp091-go v1.2.0/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0VTJ0kHRghqbM= -github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8= -github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM= -github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= -github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc= -github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= -github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M= -github.com/sagikazarmark/crypt v0.19.0 h1:WMyLTjHBo64UvNcWqpzY3pbZTYgnemZU8FBZigKc42E= -github.com/sagikazarmark/crypt v0.19.0/go.mod h1:c6vimRziqqERhtSe0MhIvzE1w54FrCHtrXb5NH/ja78= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCLY7gIfzeQaUJ+kppEO5WQG3cL8iE8tGHU= -github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo= github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U= -github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/schollz/closestmatch v2.1.0+incompatible h1:Uel2GXEpJqOWBrlyI+oY9LTiyyjYS17cCYRqP13/SHk= github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= -github.com/segmentio/fasthash v1.0.3 h1:EI9+KE1EwvMLBWwjpRDc+fEM+prwxDYbslddQGtrmhM= -github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= -github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041 h1:llrF3Fs4018ePo4+G/HV/uQUqEI1HMDjCeOf2V6puPc= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8= -github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= -github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ= -github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= -github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= -github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= -github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= -github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= -github.com/sony/gobreaker v0.4.1 h1:oMnRNZXX5j85zso6xCPRNPtmAycat+WcoKbklScLDgQ= github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= -github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= -github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= -github.com/spf13/viper v1.18.1/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= -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/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 h1:gIlAHnH1vJb5vwEjIp5kBj/eu99p/bl0Ay2goiPe5xE= -github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= -github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 h1:njlZPzLwU639dk2kqnCPPv+wNjq7Xb6EfUxe/oX0/NM= -github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271 h1:WhxRHzgeVGETMlmVfqhRn8RIeeNoPr2Czh33I4Zdccw= -github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e h1:mOtuXaRAbVZsxAHVdPR3IjfmN8T1h2iczJLynhLybf8= -github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= 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/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= -github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= -github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c/go.mod h1:SbErYREK7xXdsRiigaQiQkI9McGRzYMvlKYaP3Nimdk= -github.com/tailscale/depaware v0.0.0-20210622194025-720c4b409502 h1:34icjjmqJ2HPjrSuJYEkdZ+0ItmGQAQ75cRHIiftIyE= github.com/tailscale/depaware v0.0.0-20210622194025-720c4b409502/go.mod h1:p9lPsd+cx33L3H9nNoecRRxPssFKUwwI50I3pZ0yT+8= -github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= -github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tdewolff/minify/v2 v2.12.4 h1:kejsHQMM17n6/gwdw53qsi6lg0TGddZADVyQOz1KMdE= github.com/tdewolff/minify/v2 v2.12.4/go.mod h1:h+SRvSIX3kwgwTFOpSckvSxgax3uy8kZTSF1Ojrr3bk= -github.com/tdewolff/parse/v2 v2.6.4 h1:KCkDvNUMof10e3QExio9OPZJT8SbdKojLBumw8YZycQ= github.com/tdewolff/parse/v2 v2.6.4/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs= -github.com/tdewolff/test v1.0.7 h1:8Vs0142DmPFW/bQeHRP3MV19m1gvndjUb1sn8yy74LM= 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/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= -github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= -github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= -github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= -github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= -github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= -github.com/tidwall/btree v1.5.0/go.mod h1:LGm8L/DZjPLmeWGjv5kFrY8dL4uVhMmzmmLYmsObdKE= -github.com/tidwall/gjson v1.12.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/gjson v1.14.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/gjson v1.14.2 h1:6BBkirS0rAHjumnjHF6qgy5d2YAJ1TLIaFE2lzfOLqo= -github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= -github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tidwall/sjson v1.2.4/go.mod h1:098SZ494YoMWPmMO6ct4dcFnqxwj9r/gF0Etp19pSNM= -github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= -github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 h1:quvGphlmUVU+nhpFa4gg4yJyTRJ13reZMDHrKwYw53M= -github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966/go.mod h1:27bSVNWSBOHm+qRp1T9qzaIpsWEP6TbUnei/43HK+PQ= -github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= -github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tinylib/msgp v1.1.5 h1:2gXmtWueD2HefZHQe1QOy9HVzmFrLOVvsXwXBQ0ayy0= -github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= -github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= -github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= -github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= -github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= -github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= -github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= -github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= -github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= -github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8 h1:ndzgwNDnKIqyCvHTXaCqh9KlOWKvBry6nuXMJmonVsE= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= -github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= -github.com/tonistiigi/fsutil v0.0.0-20220115021204-b19f7f9cb274/go.mod h1:oPAfvw32vlUJSjyDcQ3Bu0nb2ON2B+G0dtVN/SZNJiA= -github.com/tonistiigi/go-actions-cache v0.0.0-20220404170428-0bdeb6e1eac7/go.mod h1:qqvyZqkfwkoJuPU/bw61bItaoO0SJ8YSW0vSVRRvsRg= -github.com/tonistiigi/go-archvariant v1.0.0/go.mod h1:TxFmO5VS6vMq2kvs3ht04iPXtu2rUT/erOnGFYfk5Ho= -github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea/go.mod h1:WPnis/6cRcDZSUvVmezrxJPkiO87ThFYsoUiMwWNDJk= -github.com/tonistiigi/vt100 v0.0.0-20210615222946-8066bb97264f/go.mod h1:ulncasL3N9uLrVann0m+CDlJKWsIAP34MPcOJF6VRvc= -github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31 h1:OXcKh35JaYsGMRzpvFkLv/MEyPuL49CThT1pZ8aSml4= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= -github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= -github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= -github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= -github.com/ultraware/whitespace v0.1.0 h1:O1HKYoh0kIeqE8sFqZf1o0qbORXUCOQFrlaQyZsczZw= -github.com/ultraware/whitespace v0.1.0/go.mod h1:/se4r3beMFNmewJ4Xmz0nMQ941GJt+qmSHGP9emHYe0= -github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= -github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= -github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= -github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.52.0 h1:wqBQpxH71XW0e2g+Og4dzQM8pk34aFYlA1Ga8db7gU0= github.com/valyala/fasthttp v1.52.0/go.mod h1:hf5C4QnVMkNXMspnsUlfM3WitlgYflyhHYoKol/szxQ= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/quicktemplate v1.7.0 h1:LUPTJmlVcb46OOUY3IeD9DojFpAVbsG+5WFTcjMJzCM= -github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= -github.com/valyala/quicktemplate v1.8.0 h1:zU0tjbIqTRgKQzFY1L42zq0qR3eh4WoQQdIdqCysW5k= -github.com/valyala/quicktemplate v1.8.0/go.mod h1:qIqW8/igXt8fdrUln5kOSb+KWMaJ4Y8QUsfd1k6L2jM= -github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/vektra/mockery/v2 v2.14.0 h1:KZ1p5Hrn8tiY+LErRMr14HHle6khxo+JKOXLBW/yfqs= -github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= -github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= -github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= -github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 h1:1cngl9mPEoITZG8s8cVcUy5CeIBYhEESkOB7m6Gmkrk= -github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= -github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= -github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8Ydu2Bstc= github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= -github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= -github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 h1:6fRhSjgLCkTD3JnJxvaJ4Sj+TYblw757bqYgZaOq5ZY= github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -github.com/yosssi/ace v0.0.5 h1:tUkIP/BLdKqrlrPwcmH0shwEEhTRHoGnc1wFIWmaBUA= github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0= -github.com/yudai/gojsondiff v1.0.0 h1:27cbfqXLVEJ1o8I6v3y9lg8Ydm53EKqHXAOMxEGlCOA= github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 h1:BHyfKlQyqbsFN5p3IfnEUduWvb9is428/nNb5L3U01M= github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible h1:Q4//iY4pNF6yPLZIigmvcl7k/bPgrcTPIFIcmawg5bI= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= -github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= -github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= -github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= -github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= -go.einride.tech/aip v0.67.1 h1:d/4TW92OxXBngkSOwWS2CH5rez869KpKMaN44mdxkFI= -go.einride.tech/aip v0.67.1/go.mod h1:ZGX4/zKw8dcgzdLsrvpOOGxfxI2QSk12SlP7d6c0/XI= go.etcd.io/bbolt v1.3.10/go.mod h1:bK3UQLPJZly7IlNmV7uVHJDxfe5aK9Ll93e/74Y9oEQ= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0= -go.etcd.io/etcd/api/v3 v3.5.12 h1:W4sw5ZoU2Juc9gBWuLk5U6fHfNVyY1WC5g9uiXZio/c= -go.etcd.io/etcd/api/v3 v3.5.12/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4= -go.etcd.io/etcd/client/pkg/v3 v3.5.12 h1:EYDL6pWwyOsylrQyLp2w+HkQ46ATiOvoEdMarindU2A= -go.etcd.io/etcd/client/pkg/v3 v3.5.12/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4= -go.etcd.io/etcd/client/v2 v2.305.12 h1:0m4ovXYo1CHaA/Mp3X/Fak5sRNIWf01wk/X1/G3sGKI= -go.etcd.io/etcd/client/v2 v2.305.12/go.mod h1:aQ/yhsxMu+Oht1FOupSr60oBvcS9cKXHrzBpDsPTf9E= -go.etcd.io/etcd/client/v3 v3.5.12 h1:v5lCPXn1pf1Uu3M4laUE2hp/geOTc5uPcYYsNe1lDxg= -go.etcd.io/etcd/client/v3 v3.5.12/go.mod h1:tSbBCakoWmmddL+BKVAJHa9km+O/E+bumDe9mSbPiqw= -go.etcd.io/gofail v0.1.0 h1:XItAMIhOojXFQMgrxjnd2EIIHun/d5qL0Pf7FzVTkFg= go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= @@ -1697,346 +271,77 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1: go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= -go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= -go.opentelemetry.io/otel/sdk/metric v1.29.0 h1:K2CfmJohnRgvZ9UAj2/FhIf/okdWcNdBwe1m8xFXiSY= -go.opentelemetry.io/otel/sdk/metric v1.29.0/go.mod h1:6zZLdCl2fkauYoZIOn/soQIDSWFmNSRcICarHfuhNJQ= go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= -go.opentelemetry.io/proto/otlp v0.7.0 h1:rwOQPCuKAKmwGKq2aVNnYIibI6wnV7EvzgfTCzcdGg8= -go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= -go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/automaxprocs v1.5.2/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= -go.uber.org/dig v1.16.1/go.mod h1:557JTAUZT5bUK0SvCwikmLPPtdQhfvLYtO5tJgQSbnk= -go.uber.org/dig v1.17.1/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= -go.uber.org/fx v1.19.2/go.mod h1:43G1VcqSzbIv77y00p1DRAsyZS8WdzuYdhZXmEUkMyQ= -go.uber.org/fx v1.20.1/go.mod h1:iSYNbHf2y55acNCwCXKx7LbWb5WG1Bnue5RDXz1OREg= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= -go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= -go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= -golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -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-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= -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-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/exp v0.0.0-20221205204356-47842c84f3db/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp v0.0.0-20230510235704-dd950f8aeaea/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= -golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= -golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= -golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20240213143201-ec583247a57a/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f h1:phY1HzDcf18Aq9A8KkmRtY9WvOFIxN8wgfvy6Zm1DV8= -golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= -golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs= -golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -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.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= -golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= -golang.org/x/oauth2 v0.0.0-20170207211851-4464e7848382/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= -golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= -golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= -golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= -golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= -golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8= -golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= -golang.org/x/perf v0.0.0-20230113213139-801c7ef9e5c5 h1:ObuXPmIgI4ZMyQLIz48cJYgSyWdjUXc2SZAdyJMwEAU= -golang.org/x/perf v0.0.0-20230113213139-801c7ef9e5c5/go.mod h1:UBKtEnL8aqnd+0JHqZ+2qoMDwtuy6cYhhKNoHLBiTQc= -golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201207223542-d4d67f95c62d/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-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -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-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211020174200-9d6173849985/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220823224334-20c2bfdbfe24/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= -golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457 h1:zf5N6UOrA487eEFacMePxjXAJctxKmyjKUsjA11Uzuk= golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.2.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= -golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= -golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= -golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= -golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= -golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= -golang.org/x/tools v0.11.1/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= -golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= -golang.org/x/tools v0.12.1-0.20230825192346-2191a27a6dc5/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= -golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= -golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= -golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= -golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= -golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= -golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg= -golang.org/x/xerrors v0.0.0-20240716161551-93cc26a95ae9 h1:LLhsEBxRTBLuKlQxFBYUOU8xyFgXv6cOTp2HASDlsDk= golang.org/x/xerrors v0.0.0-20240716161551-93cc26a95ae9/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= -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= -gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= -gonum.org/v1/plot v0.10.0/go.mod h1:JWIHJ7U20drSQb/aDpTetJzfC1KlAPldJLpkSy88dvQ= -google.golang.org/api v0.0.0-20170206182103-3d017632ea10/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= -google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= -google.golang.org/api v0.150.0/go.mod h1:ccy+MJ6nrYFgE3WgRx/AMXOxOmU8Q4hSa+jjibzhxcg= google.golang.org/api v0.152.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY= -google.golang.org/api v0.153.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY= -google.golang.org/api v0.155.0/go.mod h1:GI5qK5f40kCpHfPn6+YzGAByIKWv8ujFnmoWm7Igduk= -google.golang.org/api v0.157.0/go.mod h1:+z4v4ufbZ1WEpld6yMGHyggs+PmAHiaLNj5ytP3N01g= -google.golang.org/api v0.160.0/go.mod h1:0mu0TpK33qnydLvWqbImq2b1eQ5FHRSDCBzAxX9ZHyw= -google.golang.org/api v0.162.0/go.mod h1:6SulDkfoBIg4NFmCuZ39XeeAgSHCPecfSUuDyYlAHs0= -google.golang.org/api v0.167.0/go.mod h1:4FcBc686KFi7QI/U51/2GKKevfZMpM17sCdibqe/bSA= -google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg= -google.golang.org/api v0.170.0/go.mod h1:/xql9M2btF85xac/VAm4PsLMTLVGUOpq4BE9R8jyNy8= -google.golang.org/api v0.171.0/go.mod h1:Hnq5AHm4OTMt2BUVjael2CWZFD6vksJdWCWiUAmjC9o= google.golang.org/api v0.177.0/go.mod h1:srbhue4MLjkjbkux5p3dw/ocYOSZTaIEvf7bCOnFQDw= -google.golang.org/api v0.180.0/go.mod h1:51AiyoEg1MJPSZ9zvklA8VnRILPXxn1iVen9v25XHAE= -google.golang.org/api v0.183.0/go.mod h1:q43adC5/pHoSZTx5h2mSmdF7NcyfW9JuDyIOJAgS9ZQ= -google.golang.org/api v0.184.0/go.mod h1:CeDTtUEiYENAf8PPG5VZW2yNp2VM3VWbCeTioAZBTBA= google.golang.org/api v0.187.0/go.mod h1:KIHlTc4x7N7gKKuVsdmfBXN13yEEWXWFURWY6SBp2gk= google.golang.org/api v0.188.0/go.mod h1:VR0d+2SIiWOYG3r/jdm7adPW9hI2aRv9ETOSCQ9Beag= google.golang.org/api v0.191.0/go.mod h1:tD5dsFGxFza0hnQveGfVk9QQYKcfp+VzgRqyXFxE0+E= google.golang.org/api v0.193.0/go.mod h1:Po3YMV1XZx+mTku3cfJrlIYR03wiGrCOsdpC67hjZvw= -google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -2047,20 +352,15 @@ google.golang.org/genproto v0.0.0-20240814211410-ddb44dafa142/go.mod h1:G11eXq53 google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6/go.mod h1:10yRODfgim2/T8csjQsMPgZOMvtytXKTDRzH6HRGzRw= -google.golang.org/genproto/googleapis/api v0.0.0-20240610135401-a8a62080eff3/go.mod h1:kdrSS/OiLkPrNUpzD4aHgCq2rVuC/YRxok32HXZ4vRE= google.golang.org/genproto/googleapis/api v0.0.0-20240617180043-68d350f18fd4/go.mod h1:px9SlOOZBg1wM1zdnr8jEL4CNGUBZ+ZKYtNPApNQc4c= google.golang.org/genproto/googleapis/api v0.0.0-20240711142825-46eb208f015d/go.mod h1:mw8MG/Qz5wfgYr6VqVCiZcHe/GJEfI+oGGDCohaVgB0= google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f/go.mod h1:AHT0dDg3SoMOgZGnZk29b5xTbPHMoEC8qthmBLJCpys= google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= -google.golang.org/genproto/googleapis/bytestream v0.0.0-20240617180043-68d350f18fd4 h1:Rie8vnNXn/RjOgFacUrolQKaHsN10UPAXBb3IkfDdE4= -google.golang.org/genproto/googleapis/bytestream v0.0.0-20240617180043-68d350f18fd4/go.mod h1:/oe3+SiHAwz6s+M25PyTygWm3lnrhmGqIuIfkoUocqk= -google.golang.org/genproto/googleapis/bytestream v0.0.0-20240903143218-8af14fe29dc1 h1:W0PHii1rtgc5UgBtJif8xGePValKeZRomnuC5hatKME= google.golang.org/genproto/googleapis/bytestream v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:q0eWNnCW04EJlyrmLT+ZHsjuoUiZ36/eAEdCCezZoco= google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc= google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240610135401-a8a62080eff3/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= google.golang.org/genproto/googleapis/rpc v0.0.0-20240624140628-dc46fd24d27d/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240711142825-46eb208f015d/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240722135656-d784300faade/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= @@ -2076,43 +376,9 @@ google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLp google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= google.golang.org/grpc v1.66.0/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE= google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= -gopkg.in/cheggaaa/pb.v1 v1.0.27 h1:kJdccidYzt3CaHD1crCFTS1hxyhSi059NhOFUf03YFo= -gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= -gopkg.in/gcfg.v1 v1.2.3 h1:m8OOJ4ccYHnx2f4gQwpno8nAX5OGOh7RLaaz0pj3Ogs= -gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= -gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= -gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= -moul.io/http2curl/v2 v2.3.0 h1:9r3JfDzWPcbIklMOs2TnIFzDYvfAZvjeavG6EzP7jYs= moul.io/http2curl/v2 v2.3.0/go.mod h1:RW4hyBjTWSYDOxapodpNEtX0g5Eb16sxklBqmd2RHcE= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= -mvdan.cc/unparam v0.0.0-20240104100049-c549a3470d14 h1:zCr3iRRgdk5eIikZNDphGcM6KGVTx3Yu+/Uu9Es254w= -mvdan.cc/unparam v0.0.0-20240104100049-c549a3470d14/go.mod h1:ZzZjEpJDOmx8TdVU6umamY3Xy0UAQUI2DHbf05USVbI= -pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= -rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0 h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY= -rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4= -rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= -rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= -sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= diff --git a/icq-relayer/go.mod b/icq-relayer/go.mod index 31949ff13..dd7765e7f 100644 --- a/icq-relayer/go.mod +++ b/icq-relayer/go.mod @@ -3,15 +3,15 @@ module github.com/quicksilver-zone/quicksilver/icq-relayer go 1.23.3 require ( - cosmossdk.io/math v1.3.0 - github.com/BurntSushi/toml v1.4.0 + cosmossdk.io/math v1.4.0 + github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c github.com/avast/retry-go/v4 v4.6.0 github.com/cosmos/cosmos-sdk v0.46.16 github.com/cosmos/ibc-go/v6 v6.3.1 github.com/dgraph-io/ristretto v0.2.0 github.com/go-kit/log v0.2.1 github.com/mitchellh/go-homedir v1.1.0 - github.com/prometheus/client_golang v1.18.0 + github.com/prometheus/client_golang v1.20.5 github.com/quicksilver-zone/quicksilver v1.7.0-rc0 github.com/rs/zerolog v1.33.0 github.com/spf13/cobra v1.8.1 @@ -20,25 +20,28 @@ require ( ) require ( - cloud.google.com/go v0.115.0 // indirect - cloud.google.com/go/auth v0.5.1 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect - cloud.google.com/go/compute/metadata v0.3.0 // indirect - cloud.google.com/go/iam v1.1.8 // indirect - cloud.google.com/go/storage v1.42.0 // indirect + cloud.google.com/go v0.115.1 // indirect + cloud.google.com/go/auth v0.9.4 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect + cloud.google.com/go/compute/metadata v0.5.1 // indirect + cloud.google.com/go/iam v1.2.0 // indirect + cloud.google.com/go/storage v1.43.0 // indirect cosmossdk.io/errors v1.0.1 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect + github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/ChainSafe/go-schnorrkel v1.1.0 // indirect github.com/DataDog/zstd v1.5.5 // indirect github.com/Workiva/go-datastructures v1.1.5 // indirect + github.com/adlio/schema v1.3.6 // indirect github.com/armon/go-metrics v0.4.1 // indirect github.com/aws/aws-sdk-go v1.54.4 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.3 // indirect + github.com/btcsuite/btcd/btcutil v1.1.6 // indirect github.com/celestiaorg/go-square/v2 v2.0.0 // indirect github.com/celestiaorg/nmt v0.22.2 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect @@ -54,12 +57,12 @@ require ( github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/coinbase/rosetta-sdk-go v0.8.5 // indirect github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect - github.com/cometbft/cometbft-db v0.12.0 // indirect + github.com/cometbft/cometbft-db v0.14.1 // indirect github.com/confio/ics23/go v0.9.1 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect - github.com/cosmos/gogoproto v1.5.0 // indirect + github.com/cosmos/gogoproto v1.7.0 // indirect github.com/cosmos/gorocksdb v1.2.0 // indirect github.com/cosmos/iavl v0.19.6 // indirect github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v6 v6.1.2 // indirect @@ -86,14 +89,14 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // 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/btree v1.1.3 // indirect github.com/google/flatbuffers v24.3.25+incompatible // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/orderedcode v0.0.1 // indirect - github.com/google/s2a-go v0.1.7 // indirect + github.com/google/s2a-go v0.1.8 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.5 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect + github.com/googleapis/gax-go/v2 v2.13.0 // indirect github.com/gorilla/handlers v1.5.2 // indirect github.com/gorilla/mux v1.8.1 // indirect github.com/gorilla/websocket v1.5.3 // indirect @@ -127,26 +130,27 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect - github.com/minio/highwayhash v1.0.2 // indirect + github.com/minio/highwayhash v1.0.3 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/onsi/gomega v1.33.1 // indirect - github.com/pelletier/go-toml/v2 v2.2.2 // indirect - github.com/petermattis/goid v0.0.0-20240607163614-bb94eb51e7a7 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/onsi/gomega v1.34.2 // indirect + github.com/pelletier/go-toml/v2 v2.2.3 // 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.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.47.0 // indirect + github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/rakyll/statik v0.1.7 // 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.12.0 // indirect - github.com/rs/cors v1.11.0 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect + github.com/rs/cors v1.11.1 // indirect github.com/sagikazarmark/locafero v0.6.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect - github.com/sasha-s/go-deadlock v0.3.1 // indirect + github.com/sasha-s/go-deadlock v0.3.5 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.6.0 // indirect @@ -162,27 +166,28 @@ require ( github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.4.0-alpha.1 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 // indirect - go.opentelemetry.io/otel v1.28.0 // indirect - go.opentelemetry.io/otel/metric v1.28.0 // indirect - go.opentelemetry.io/otel/trace v1.28.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect + go.opentelemetry.io/otel v1.29.0 // indirect + go.opentelemetry.io/otel/metric v1.29.0 // indirect + go.opentelemetry.io/otel/sdk v1.29.0 // indirect + go.opentelemetry.io/otel/trace v1.29.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.25.0 // indirect - golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect - golang.org/x/net v0.27.0 // indirect - golang.org/x/oauth2 v0.21.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.22.0 // indirect - golang.org/x/term v0.22.0 // indirect - golang.org/x/text v0.16.0 // indirect - golang.org/x/time v0.5.0 // indirect - google.golang.org/api v0.185.0 // indirect - google.golang.org/genproto v0.0.0-20240617180043-68d350f18fd4 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect - google.golang.org/grpc v1.65.0 // indirect - google.golang.org/protobuf v1.34.2 // indirect + golang.org/x/crypto v0.29.0 // indirect + golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect + golang.org/x/net v0.31.0 // indirect + golang.org/x/oauth2 v0.23.0 // indirect + golang.org/x/sync v0.9.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/term v0.26.0 // indirect + golang.org/x/text v0.20.0 // indirect + golang.org/x/time v0.6.0 // indirect + google.golang.org/api v0.198.0 // indirect + google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/grpc v1.67.1 // indirect + google.golang.org/protobuf v1.35.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/icq-relayer/go.sum b/icq-relayer/go.sum index 50601a229..f5a87c96a 100644 --- a/icq-relayer/go.sum +++ b/icq-relayer/go.sum @@ -30,8 +30,7 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.115.0 h1:CnFSK6Xo3lDYRoBKEcAtia6VSC837/ZkJuRduSFnr14= -cloud.google.com/go v0.115.0/go.mod h1:8jIM5vVgoAEoiVxQ/O4BFTfHqulPZgs/ufEzMcFMdWU= +cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -46,10 +45,8 @@ cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjby cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= -cloud.google.com/go/auth v0.5.1 h1:0QNO7VThG54LUzKiQxv8C6x1YX7lUrzlAa1nVLF8CIw= -cloud.google.com/go/auth v0.5.1/go.mod h1:vbZT8GjzDf3AVqCcQmqeeM32U9HBFc32vVVAbwDsa6s= -cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= -cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= +cloud.google.com/go/auth v0.9.4 h1:DxF7imbEbiFu9+zdKC6cKBko1e8XeJnipNqIbWZ+kDI= +cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= @@ -72,8 +69,7 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= -cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.5.1 h1:NM6oZeZNlYjiwYje+sYFjEpP0Q0zCan1bmQW/KmIrGs= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= @@ -111,14 +107,12 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.8 h1:r7umDwhj+BQyz0ScZMp4QrGXjSTI3ZINnpgU2nlB/K0= -cloud.google.com/go/iam v1.1.8/go.mod h1:GvE6lyMmfxXauzNq8NbgJbeVQNspG+tcdL/W8QO1+zE= +cloud.google.com/go/iam v1.2.0 h1:kZKMKVNk/IsSSc/udOb83K0hL/Yh/Gcqpz+oAkoIFN8= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/longrunning v0.5.7 h1:WLbHekDbjK1fVFD3ibpFFVoyizlLRl73I7YKuAKilhU= -cloud.google.com/go/longrunning v0.5.7/go.mod h1:8GClkudohy1Fxm3owmBGid8W0pSgodEMwEAztp38Xng= +cloud.google.com/go/longrunning v0.6.0 h1:mM1ZmaNsQsnb+5n1DNPeL0KwQd9jQRqSqSDEkBZr+aI= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -175,8 +169,7 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.42.0 h1:4QtGpplCVt1wz6g5o1ifXd656P5z+yNgzdw1tVfp0cU= -cloud.google.com/go/storage v1.42.0/go.mod h1:HjMXRFq65pGKFn6hxj6x3HCyR41uSB72Z0SO/Vn6JFQ= +cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= @@ -190,8 +183,7 @@ cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1V cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= -cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= +cosmossdk.io/math v1.4.0 h1:XbgExXFnXmF/CccPPEto40gOO7FpWu9yWNAZPN3nkNQ= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= @@ -199,11 +191,9 @@ github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMb github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= -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/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= -github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v1.1.0 h1:rZ6EU+CZFCjB4sHUE1jIu8VDoB/wRKZxoe1tkcO71Wk= github.com/ChainSafe/go-schnorrkel v1.1.0/go.mod h1:ABkENxiP+cvjFiByMIZ9LYbRoNNLeBLiakC1XeTFxfE= @@ -223,8 +213,7 @@ github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrd github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/Workiva/go-datastructures v1.1.5 h1:5YfhQ4ry7bZc2Mc7R0YZyYwpf5c6t1cEFvdAhd6Mkf4= github.com/Workiva/go-datastructures v1.1.5/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= -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/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -259,11 +248,11 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= +github.com/btcsuite/btcd v0.24.2 h1:aLmxPguqxza+4ag8R1I2nnJjSu2iFn/kqtHTIImswcY= github.com/btcsuite/btcd/btcec/v2 v2.3.3 h1:6+iXlDKE8RMtKsvK0gshlXIuPbyWM/h84Ensb7o3sC0= github.com/btcsuite/btcd/btcec/v2 v2.3.3/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/btcutil v1.1.5 h1:+wER79R5670vs/ZusMTF1yTcRYE5GUsFbdjdisflzM8= 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/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ= github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/bufbuild/protocompile v0.14.0 h1:z3DW4IvXE5G/uTOnSQn+qwQQxvhckkTWLS/0No/o7KU= @@ -331,8 +320,7 @@ github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONN github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= github.com/cometbft/cometbft v0.34.33 h1:2nnMU8smD1fpkY4JP6GWSaWmxE4BhqL60LG+Sr+Ijzo= github.com/cometbft/cometbft v0.34.33/go.mod h1:S1rXDQyGEJQVle3vneIHV570I1ulneWgF1ScGvUO+bI= -github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= -github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= +github.com/cometbft/cometbft-db v0.14.1 h1:SxoamPghqICBAIcGpleHbmoPqy+crij/++eZz3DlerQ= github.com/confio/ics23/go v0.9.1 h1:3MV46eeWwO3xCauKyAtuAdJYMyPnnchW4iLr2bTw6/U= github.com/confio/ics23/go v0.9.1/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= @@ -351,8 +339,7 @@ github.com/cosmos/cosmos-sdk v0.46.16 h1:RVGv1+RulLZeNyfCaPZrZtv0kY7ZZNAI6JGpub0 github.com/cosmos/cosmos-sdk v0.46.16/go.mod h1:05U50tAsOzQ8JOAePshJCbJQw5ib1YJR6IXcqyVI1Xg= 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.5.0 h1:SDVwzEqZDDBoslaeZg+dGE55hdzHfgUA40pEanMh52o= -github.com/cosmos/gogoproto v1.5.0/go.mod h1:iUM31aofn3ymidYG6bUR5ZFrk+Om8p5s754eMUcyp8I= +github.com/cosmos/gogoproto v1.7.0 h1:79USr0oyXAbxg3rspGh/m4SWNyoz/GLaAh0QlCe2fro= 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.6 h1:XY78yEeNPrEYyNCKlqr9chrwoeSDJ0bV2VjocTk//OU= @@ -527,8 +514,7 @@ github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXi github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= 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/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/flatbuffers v24.3.25+incompatible h1:CX395cjN9Kke9mmalRoL3d81AtFUxJM+yDthflgJGkI= github.com/google/flatbuffers v24.3.25+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= @@ -578,8 +564,7 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= -github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -588,8 +573,7 @@ github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= -github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= 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/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -599,8 +583,7 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.12.5 h1:8gw9KZK8TiVKB6q3zHY3SBzLnrGp6HQjyfYBYGmXdxA= -github.com/googleapis/gax-go/v2 v2.12.5/go.mod h1:BUDKcWo+RaKq5SC9vVYL0wLADa3VcfswbOMMRmB9H3E= +github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= @@ -723,6 +706,7 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= @@ -755,8 +739,7 @@ github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3N github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk= github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU= -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/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= @@ -776,6 +759,7 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= 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= @@ -807,15 +791,13 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= -github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= +github.com/onsi/gomega v1.34.2 h1:pNCwDkzrsv7MS9kpaQvVb1aVLahQXyJ/Tv5oAZMI3i8= 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 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= -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/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -832,12 +814,9 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -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/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20240607163614-bb94eb51e7a7 h1:CtBLeckhC0zAXgp5V8uR30CNYH0JgCJoxCg5+6i2zQk= -github.com/petermattis/goid v0.0.0-20240607163614-bb94eb51e7a7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= 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= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= @@ -859,8 +838,7 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -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_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= @@ -875,8 +853,7 @@ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt2 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.47.0 h1:p5Cz0FNHo7SnWOmWmoRozVcjEp0bIVU8cV7OShpjL1k= -github.com/prometheus/common v0.47.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= +github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPAaSc= 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= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -900,11 +877,9 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -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/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= 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/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= @@ -917,8 +892,7 @@ github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE 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/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -1031,18 +1005,12 @@ 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/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 h1:vS1Ao/R55RNV4O7TA2Qopok8yN+X0LIP6RVWLFkprck= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0/go.mod h1:BMsdeOxN04K0L5FNUBfjFdvwWGNe/rkmSwH4Aelu/X0= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 h1:9l89oX4ba9kHbBol3Xin3leYJ+252h0zszDtBwyKe2A= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0/go.mod h1:XLZfZboOJWHNKUv7eH0inh0E9VV6eWDFB/9yJyTLPp0= -go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= -go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= -go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= -go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= -go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= -go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= -go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= -go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= +go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= +go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= +go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= +go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= 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= @@ -1071,8 +1039,7 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1084,8 +1051,7 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= -golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1171,8 +1137,7 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= -golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= +golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1198,8 +1163,7 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= -golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1214,8 +1178,7 @@ 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.0.0-20220929204114-8fcdb60fdcc0/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.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= 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= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1225,7 +1188,6 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1308,13 +1270,11 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= 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= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= -golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= +golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= 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= @@ -1325,14 +1285,12 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= 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= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1403,8 +1361,6 @@ golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= -golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -1454,8 +1410,7 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.185.0 h1:ENEKk1k4jW8SmmaT6RE+ZasxmxezCrD5Vw4npvr+pAU= -google.golang.org/api v0.185.0/go.mod h1:HNfvIkJGlgrIlrbYkAm9W9IdkmKZjOTVh33YltygGbg= +google.golang.org/api v0.198.0 h1:OOH5fZatk57iN0A7tjJQzt6aPfYQ1JiWkt1yGseazks= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1570,12 +1525,9 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20240617180043-68d350f18fd4 h1:CUiCqkPw1nNrNQzCCG4WA65m0nAmQiwXHpub3dNyruU= -google.golang.org/genproto v0.0.0-20240617180043-68d350f18fd4/go.mod h1:EvuUDCulqGgV80RvP1BHuom+smhX4qtlhnNatHuroGQ= -google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 h1:0+ozOGcrp+Y8Aq8TLNN2Aliibms5LEzsq99ZZmAGYm0= -google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094/go.mod h1:fJ/e3If/Q67Mj99hin0hMhiNyCRmt6BQ2aWIJshUSJw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 h1:BulPr26Jqjnd4eYDVe+YvyR7Yc2vJGkO5/0UxD0/jZU= +google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed h1:3RgNmBoI9MZhsj3QxC+AP/qQhNwpCLOvYDYYsFrhFt0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -1618,8 +1570,7 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= -google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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= @@ -1636,8 +1587,7 @@ 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.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= 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/test/interchaintest/interchainstaking_test.go b/test/interchaintest/interchainstaking_test.go new file mode 100644 index 000000000..5ac669b75 --- /dev/null +++ b/test/interchaintest/interchainstaking_test.go @@ -0,0 +1,352 @@ +package interchaintest + +import ( + "context" + "encoding/json" + "fmt" + "testing" + "time" + + "cosmossdk.io/math" + "github.com/strangelove-ventures/interchaintest/v6" + "github.com/strangelove-ventures/interchaintest/v6/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v6/ibc" + "github.com/strangelove-ventures/interchaintest/v6/testreporter" + "github.com/strangelove-ventures/interchaintest/v6/testutil" + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" + + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/cosmos/go-bip39" + qsapp "github.com/quicksilver-zone/quicksilver/app" + "github.com/quicksilver-zone/quicksilver/test/interchaintest/util" + epochstypes "github.com/quicksilver-zone/quicksilver/x/epochs/types" + icstypes "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types" +) + +func TestInterchainStaking(t *testing.T) { + if testing.Short() { + t.Skip() + } + + t.Parallel() + + // Create chain factory with Quicksilver and Juno + numVals := 2 + numFullNodes := 1 + + config, err := createConfig() + require.NoError(t, err) + + // config.SidecarConfigs = []ibc.SidecarConfig{ + // { + // ProcessName: "icq", + // Image: ibc.DockerImage{Repository: "quicksilverzone/interchain-queries", Version: "v1.0.0-beta.2"}, + // HomeDir: "/icq-relayer", + // StartCmd: []string{"icq-relayer", "start", "--home", "/icq-relayer"}, + // PreStart: true, + // ValidatorProcess: false, + // }, + // } + cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ + { + Name: "quicksilver", + ChainConfig: config, + NumValidators: &numVals, + NumFullNodes: &numFullNodes, + }, + { + Name: "juno", + Version: "v14.0.0", + NumValidators: &numVals, + NumFullNodes: &numFullNodes, + ChainConfig: ibc.ChainConfig{ + GasPrices: "0.0ujuno", + ConfigFileOverrides: map[string]any{"config/config.toml": testutil.Toml{"consensus": testutil.Toml{"timeout_commit": "1s", "timeout_propose": "500ms", "timeout_prevote": "500ms", "timeout_precommit": "500ms"}}}, + ModifyGenesis: cosmos.ModifyGenesis([]cosmos.GenesisKV{ + { + Key: "app_state.interchainaccounts.host_genesis_state.params.allow_messages", + Value: []string{"*"}, + }, + { + Key: "app_state.interchainaccounts.host_genesis_state.params.host_enabled", + Value: true, + }, + }), + }, + }, + }) + // Get chains from the chain factory + chains, err := cf.Chains(t.Name()) + require.NoError(t, err) + + quicksilver, juno := chains[0].(*cosmos.CosmosChain), chains[1].(*cosmos.CosmosChain) + + // Create relayer factory to utilize the go-relayer + client, network := interchaintest.DockerSetup(t) + + r := interchaintest.NewBuiltinRelayerFactory(ibc.Hermes, zaptest.NewLogger(t) /*relayer.CustomDockerImage("informalsystems/hermes", "1.10.3", "1000:1000")*/).Build(t, client, network) + + // Create a new Interchain object which describes the chains, relayers, and IBC connections we want to use + ic := interchaintest.NewInterchain(). + AddChain(quicksilver). + AddChain(juno). + AddRelayer(r, "rly"). + AddLink(interchaintest.InterchainLink{ + Chain1: quicksilver, + Chain2: juno, + Relayer: r, + Path: pathQuicksilverJuno, + }) + + rep := testreporter.NewNopReporter() + eRep := rep.RelayerExecReporter(t) + + ctx := context.Background() + + err = ic.Build(ctx, eRep, interchaintest.InterchainBuildOptions{ + TestName: t.Name(), + Client: client, + NetworkID: network, + SkipPathCreation: false, + + // This can be used to write to the block database which will index all block data e.g. txs, msgs, events, etc. + // BlockDatabaseFile: interchaintest.DefaultBlockDatabaseFilepath(), + }) + require.NoError(t, err) + + t.Cleanup(func() { + _ = ic.Close() + }) + + // Start the relayer + require.NoError(t, r.StartRelayer(ctx, eRep, pathQuicksilverJuno)) + t.Cleanup( + func() { + err := r.StopRelayer(ctx, eRep) + if err != nil { + panic(fmt.Errorf("an error occurred while stopping the relayer: %s", err)) + } + }, + ) + + // Create some user accounts on both chains + entropy, err := bip39.NewEntropy(256) + require.NoError(t, err) + mnemonic, err := bip39.NewMnemonic(entropy) + require.NoError(t, err) + quickUser, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, t.Name(), mnemonic, genesisWalletAmount, quicksilver) + require.NoError(t, err) + junoUser, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, t.Name(), mnemonic, genesisWalletAmount, juno) + require.NoError(t, err) + entropy, err = bip39.NewEntropy(256) + require.NoError(t, err) + mnemonic, err = bip39.NewMnemonic(entropy) + require.NoError(t, err) + icqUser, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, t.Name(), mnemonic, genesisWalletAmount, quicksilver) + require.NoError(t, err) + + err = quicksilver.GetNode().RecoverKey(ctx, quickUser.KeyName(), quickUser.Mnemonic()) + require.NoError(t, err) + err = juno.GetNode().RecoverKey(ctx, junoUser.KeyName(), junoUser.Mnemonic()) + require.NoError(t, err) + + util.RunICQ(t, ctx, quicksilver, juno, icqUser) + + // Wait a few blocks for relayer to start and for user accounts to be created + err = testutil.WaitForBlocks(ctx, 5, quicksilver, juno) + require.NoError(t, err) + + // register zone + + propMsg := icstypes.RegisterZoneProposal{ + Title: "Onboard Juno onto Quicksilver", + Description: "Test onboarding", + ConnectionId: "connection-0", + BaseDenom: "ujuno", + LocalDenom: "uqjuno", + AccountPrefix: "juno", + MultiSend: false, + LiquidityModule: false, + MessagesPerTx: 8, + ReturnToSender: false, + DepositsEnabled: true, + UnbondingEnabled: true, + Decimals: 6, + Is_118: true, + DustThreshold: math.OneInt(), + TransferChannel: "channel-0", + } + + packedMsg, err := codectypes.NewAnyWithValue(&propMsg) + require.NoError(t, err) + + govMsg := govtypes.MsgExecLegacyContent{ + Content: packedMsg, + Authority: "quick10d07y265gmmuvt4z0w9aw880jnsr700j3xrh0p", + } + + packedGov, err := codectypes.NewAnyWithValue(&govMsg) + require.NoError(t, err) + + govBytes := qsapp.MakeEncodingConfig().Marshaler.MustMarshalJSON(packedGov) + //msgBytes := qsapp.MakeEncodingConfig().Marshaler.MustMarshalJSON(packedMsg) + + //t.Log(string(govBytes)) + require.NoError(t, err) + prop := cosmos.TxProposalv1{ + Messages: []json.RawMessage{govBytes}, + Title: "Onboard Juno onto Quicksilver", + Deposit: "10000000uqck", + Summary: "Onboard Juno onto Quicksilver", + } + + txid, err := quicksilver.GetNode().SubmitProposal(ctx, quickUser.KeyName(), prop) + require.NoError(t, err) + + err = testutil.WaitForBlocks(ctx, 2, quicksilver, juno) + require.NoError(t, err) + + var proposalId string + testutil.WaitForCondition(time.Second*30, time.Second, func() (bool, error) { + stdOut, _, err := quicksilver.GetNode().ExecQuery(ctx, "tx", txid) + require.NoError(t, err) + + var res sdk.TxResponse + json.Unmarshal(stdOut, &res) + if len(res.Logs) == 0 { + return false, nil + } + + for _, event := range res.Logs[0].Events { + if event.Type == "proposal_deposit" { + for _, attr := range event.Attributes { + if attr.Key == "proposal_id" { + proposalId = attr.Value + t.Log("proposalId", proposalId) + break + } + } + } + } + if proposalId == "" { + return false, nil + } + return true, nil + }) + if proposalId == "" { + t.Fatal("proposalId not found") + } + err = quicksilver.VoteOnProposalAllValidators(ctx, proposalId, cosmos.ProposalVoteYes) + require.NoError(t, err, "failed to submit votes") + err = testutil.WaitForBlocks(ctx, 1, quicksilver, juno) + require.NoError(t, err) + + height, _ := quicksilver.Height(ctx) + + _, err = cosmos.PollForProposalStatus(ctx, quicksilver, height, height+10, proposalId, "PROPOSAL_STATUS_PASSED") + require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") + + err = testutil.WaitForBlocks(ctx, 20, quicksilver) + require.NoError(t, err) + // query zone here. + out, _, err := quicksilver.GetNode().ExecQuery(ctx, "ics", "zones") + require.NoError(t, err) + zones := icstypes.QueryZonesResponse{} + err = quicksilver.Config().EncodingConfig.Codec.UnmarshalJSON(out, &zones) + require.NoError(t, err) + require.Equal(t, 1, len(zones.Zones)) + require.Equal(t, juno.Config().ChainID, zones.Zones[0].ChainId) + require.NotNil(t, zones.Zones[0].DelegationAddress) + require.NotNil(t, zones.Zones[0].DepositAddress) + require.NotNil(t, zones.Zones[0].PerformanceAddress) + require.NotNil(t, zones.Zones[0].WithdrawalAddress) + + t.Log("Deposit Address", zones.Zones[0].DepositAddress.Address) + t.Log("Delegation Address", zones.Zones[0].DelegationAddress.Address) + t.Log("User Address", junoUser.FormattedAddress()) + + err = juno.GetNode().SendFunds(ctx, junoUser.KeyName(), ibc.WalletAmount{ + Address: zones.Zones[0].DepositAddress.Address, + Amount: math.NewInt(5000000), + Denom: "ujuno", + }) + + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 25, quicksilver, juno) + require.NoError(t, err) + + qjunoBalance := math.ZeroInt() + testutil.WaitForCondition(time.Second*30, time.Second*5, func() (bool, error) { + out, _, err = quicksilver.GetNode().ExecQuery(ctx, "bank", "balances", quickUser.FormattedAddress()) + require.NoError(t, err) + var res banktypes.QueryAllBalancesResponse + err = quicksilver.Config().EncodingConfig.Codec.UnmarshalJSON(out, &res) + require.NoError(t, err) + for _, balance := range res.Balances { + if balance.Denom == "uqjuno" { + qjunoBalance = balance.Amount + return true, nil + } + } + return false, nil + }) + require.Equal(t, math.NewInt(5000000), qjunoBalance) + + testutil.WaitForCondition(time.Second*30, time.Second*5, func() (bool, error) { + out, _, err = juno.GetNode().ExecQuery(ctx, "staking", "delegations", zones.Zones[0].DelegationAddress.Address) + require.NoError(t, err) + var res stakingtypes.QueryDelegatorDelegationsResponse + err = juno.Config().EncodingConfig.Codec.UnmarshalJSON(out, &res) + require.NoError(t, err) + if len(res.DelegationResponses) != len(juno.Validators) { + return false, nil + } + t.Log("Delegations", res.DelegationResponses) + return true, nil + }) + + // find next epoch. wait until then. query after epoch ends. + + out, _, err = quicksilver.GetNode().ExecQuery(ctx, "epochs", "epoch-infos") + require.NoError(t, err) + var res epochstypes.QueryEpochsInfoResponse + err = quicksilver.Config().EncodingConfig.Codec.UnmarshalJSON(out, &res) + require.NoError(t, err) + t.Log("Epochs", res.Epochs) + for _, epoch := range res.Epochs { + if epoch.Identifier == "epoch" { + t.Log("Waiting for epoch to end", epoch) + time.Sleep(time.Until(epoch.StartTime.Add(epoch.Duration))) + break + } + } + err = testutil.WaitForBlocks(ctx, 25, quicksilver, juno) + require.NoError(t, err) + + // check RR + out, _, err = quicksilver.GetNode().ExecQuery(ctx, "ics", "zone", zones.Zones[0].ChainId) + require.NoError(t, err) + var zone icstypes.QueryZoneResponse + err = quicksilver.Config().EncodingConfig.Codec.UnmarshalJSON(out, &zone) + require.NoError(t, err) + t.Log("Zone", zone.Zone) + require.Greater(t, zone.Zone.RedemptionRate.MustFloat64(), 1.0) + err = testutil.WaitForBlocks(ctx, 25, quicksilver, juno) + require.NoError(t, err) + val0Addr, err := quicksilver.Validators[0].AccountKeyBech32(ctx, "validator") + require.NoError(t, err) + val0Balance, _, err := quicksilver.GetNode().ExecQuery(ctx, "bank", "balances", val0Addr) + var balance banktypes.QueryAllBalancesResponse + err = quicksilver.Config().EncodingConfig.Codec.UnmarshalJSON(val0Balance, &balance) + require.NoError(t, err) + t.Log("Validator Balance", balance.Balances) + + // check delegation + // check rewards + +} diff --git a/test/interchaintest/setup.go b/test/interchaintest/setup.go new file mode 100644 index 000000000..e3f649ee6 --- /dev/null +++ b/test/interchaintest/setup.go @@ -0,0 +1,100 @@ +package interchaintest + +import ( + "cosmossdk.io/math" + "github.com/strangelove-ventures/interchaintest/v6/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v6/ibc" + "github.com/strangelove-ventures/interchaintest/v6/testutil" +) + +var ( + QuickSilverE2ERepo = "quicksilverzone/quicksilver-e2e" + QuicksilverMainRepo = "quicksilverzone/quicksilver" + + repo, version = GetDockerImageInfo() + + QuicksilverImage = ibc.DockerImage{ + Repository: repo, + Version: version, + UidGid: "1025:1025", + } + + // XccLookupImage = ibc.DockerImage{ + // Repository: "quicksilverzone/xcclookup", + // Version: "v0.4.3", + // UidGid: "1026:1026", + // } + + ICQImage = ibc.DockerImage{ + Repository: "quicksilverzone/interchain-queries", + Version: "v1.0.0-beta.2", + UidGid: "1000:1000", + } + + pathQuicksilverJuno = "quicksilver-juno" + genesisWalletAmount = math.NewInt(10_000_000) +) + +func createConfig() (ibc.ChainConfig, error) { + genesis := []cosmos.GenesisKV{ + cosmos.NewGenesisKV("app_state.gov.voting_params.voting_period", "15s"), + cosmos.NewGenesisKV("app_state.gov.deposit_params.max_deposit_period", "10s"), + cosmos.NewGenesisKV("app_state.gov.deposit_params.min_deposit.0.denom", "uqck"), + cosmos.NewGenesisKV("app_state.gov.deposit_params.min_deposit.0.amount", "1"), + + cosmos.NewGenesisKV("app_state.epochs.epochs.0.duration", "60s"), + cosmos.NewGenesisKV("app_state.epochs.epochs.0.start_time", "0001-01-01T00:00:00Z"), + cosmos.NewGenesisKV("app_state.epochs.epochs.0.current_epoch_start_time", "0001-01-01T00:00:00Z"), + cosmos.NewGenesisKV("app_state.epochs.epochs.0.current_epoch", "0"), + cosmos.NewGenesisKV("app_state.epochs.epochs.0.identifier", "epoch"), + cosmos.NewGenesisKV("app_state.epochs.epochs.0.epoch_counting_started", false), + + cosmos.NewGenesisKV("app_state.epochs.epochs.1.duration", "30s"), + cosmos.NewGenesisKV("app_state.epochs.epochs.1.start_time", "0001-01-01T00:00:00Z"), + cosmos.NewGenesisKV("app_state.epochs.epochs.1.current_epoch_start_time", "0001-01-01T00:00:00Z"), + cosmos.NewGenesisKV("app_state.epochs.epochs.1.current_epoch", "0"), + cosmos.NewGenesisKV("app_state.epochs.epochs.1.identifier", "day"), + cosmos.NewGenesisKV("app_state.epochs.epochs.1.epoch_counting_started", false), + + cosmos.NewGenesisKV("app_state.interchainstaking.params.unbonding_enabled", true), + cosmos.NewGenesisKV("app_state.interchainstaking.params.deposit_interval", "10"), + cosmos.NewGenesisKV("app_state.mint.params.epoch_identifier", "epoch"), + } + + return ibc.ChainConfig{ + Type: "cosmos", + Name: "quicksilver", + ChainID: "quicksilver-1", + Images: []ibc.DockerImage{QuicksilverImage}, + Bin: "quicksilverd", + Bech32Prefix: "quick", + Denom: "uqck", + GasPrices: "0.0uqck", + GasAdjustment: 1.1, + TrustingPeriod: "112h", + NoHostMount: false, + ModifyGenesis: cosmos.ModifyGenesis(genesis), + ConfigFileOverrides: map[string]any{"config/config.toml": testutil.Toml{"consensus": testutil.Toml{"timeout_commit": "1s", "timeout_propose": "500ms", "timeout_prevote": "500ms", "timeout_precommit": "500ms"}}}, + EncodingConfig: nil, + SidecarConfigs: []ibc.SidecarConfig{ + { + ProcessName: "icq", + Image: ICQImage, + Ports: []string{"2112"}, + StartCmd: []string{"icq-relayer", "start", "--home", "/icq/.icq-relayer"}, + PreStart: false, + ValidatorProcess: false, + HomeDir: "/icq/.icq-relayer", + }, + // { + // ProcessName: "xcc", + // Image: XccLookupImage, + // Ports: []string{"3033"}, + // StartCmd: []string{"/xcc", "-a", "serve", "-f", "/var/sidecar/processes/xcc/config.yaml"}, + // PreStart: true, + // ValidatorProcess: false, + // }, + }, + }, + nil +} diff --git a/test/interchaintest/util/sidecars.go b/test/interchaintest/util/sidecars.go new file mode 100644 index 000000000..b456d4255 --- /dev/null +++ b/test/interchaintest/util/sidecars.go @@ -0,0 +1,119 @@ +package util + +import ( + "context" + "fmt" + "testing" + + "github.com/strangelove-ventures/interchaintest/v6/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v6/ibc" + "github.com/stretchr/testify/require" +) + +func RunICQ(t *testing.T, ctx context.Context, quicksilver, juno *cosmos.CosmosChain, icqUser ibc.Wallet) { + t.Helper() + + var icq *cosmos.SidecarProcess + for _, sidecar := range quicksilver.Sidecars { + if sidecar.ProcessName == "icq" { + icq = sidecar + break + } + } + require.NotNil(t, icq) + + icq.WriteFile(ctx, []byte(icqUser.Mnemonic()), "seed") + + file := fmt.Sprintf(`BindPort = 2112 +MaxMsgsPerTx = 50 +AllowedQueries = [] +SkipEpoch = false + +[DefaultChain] +ChainID = "%s" +RpcUrl = "%s" +ConnectTimeoutSeconds = 10 +QueryTimeoutSeconds = 5 +QueryRetries = 5 +QueryRetryDelayMilliseconds = 400 +MnemonicPath = "/icq/.icq-relayer/seed" +Prefix = "quick" +TxSubmitTimeoutSeconds = 0 +GasLimit = 150000000 +GasPrice = "0.003uqck" +GasMultiplier = 1.3 + +[Chains] +[Chains.%s] +ChainID = "%s" +RpcUrl = "%s" +ConnectTimeoutSeconds = 10 +QueryTimeoutSeconds = 5 +QueryRetries = 5 +QueryRetryDelayMilliseconds = 400 +`, + quicksilver.Config().ChainID, + quicksilver.GetRPCAddress(), + juno.Config().ChainID, + juno.Config().ChainID, + juno.GetRPCAddress(), + ) + + err := icq.WriteFile(ctx, []byte(file), "config.toml") + require.NoError(t, err) + + err = icq.CreateContainer(ctx) + require.NoError(t, err) + + t.Cleanup( + func() { + err := icq.StopContainer(ctx) + if err != nil { + panic(fmt.Errorf("an error occurred while stopping the relayer: %s", err)) + } + + err = icq.RemoveContainer(ctx) + if err != nil { + panic(fmt.Errorf("an error occurred while removing the container: %s", err)) + } + }, + ) + err = icq.StartContainer(ctx) + require.NoError(t, err) + +} + +func RunXCC(t *testing.T, ctx context.Context, quicksilver, juno *cosmos.CosmosChain) { + t.Helper() + + var xcc *cosmos.SidecarProcess + for _, sidecar := range quicksilver.Sidecars { + if sidecar.ProcessName == "xcc" { + xcc = sidecar + } + } + require.NotNil(t, xcc) + + containerCfg := "config.yaml" + + file := fmt.Sprintf(`source_chain: '%s' +chains: + quick-1: '%s' + juno-1: '%s' +`, + quicksilver.Config().ChainID, + quicksilver.GetRPCAddress(), + juno.GetRPCAddress(), + ) + + err := xcc.WriteFile(ctx, []byte(file), containerCfg) + require.NoError(t, err) + _, err = xcc.ReadFile(ctx, containerCfg) + require.NoError(t, err) + + err = xcc.StartContainer(ctx) + require.NoError(t, err) + + // err = xcc.Running(ctx) + // require.NoError(t, err) +} diff --git a/x/eventmanager/keeper/client/cli/query.go b/x/eventmanager/keeper/client/cli/query.go new file mode 100644 index 000000000..5d73290b4 --- /dev/null +++ b/x/eventmanager/keeper/client/cli/query.go @@ -0,0 +1,61 @@ +package cli + +import ( + "context" + "fmt" + + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + + "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" +) + +// GetQueryCmd returns the cli query commands for the eventmanager module. +func GetQueryCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("Query subcommands for the %s module", types.ModuleName), + Aliases: []string{"em"}, + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + GetEventsQueryCmd(), + ) + + return cmd +} + +func GetEventsQueryCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "events", + Short: "Query the events for given chain", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + query := &types.QueryEventsRequest{ + ChainId: args[0], + } + + res, err := queryClient.Events(context.Background(), query) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/eventmanager/module.go b/x/eventmanager/module.go index 368b123ef..b5077555e 100644 --- a/x/eventmanager/module.go +++ b/x/eventmanager/module.go @@ -17,6 +17,7 @@ import ( simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/quicksilver-zone/quicksilver/x/eventmanager/keeper" + cli "github.com/quicksilver-zone/quicksilver/x/eventmanager/keeper/client/cli" "github.com/quicksilver-zone/quicksilver/x/eventmanager/types" ) @@ -80,7 +81,7 @@ func (AppModuleBasic) GetTxCmd() *cobra.Command { // GetQueryCmd returns the capability module's root query command. func (AppModuleBasic) GetQueryCmd() *cobra.Command { - return nil + return cli.GetQueryCmd() } // ---------------------------------------------------------------------------- diff --git a/x/eventmanager/types/resolver.go b/x/eventmanager/types/resolver.go index 2f10e0e0b..23f8cbb3d 100644 --- a/x/eventmanager/types/resolver.go +++ b/x/eventmanager/types/resolver.go @@ -56,7 +56,7 @@ func (e Event) resolveFieldValue(fv *FieldValue) (bool, error) { if err != nil { return fv.Negate, err } - if v == int64(e.EventType) { + if v == int64(e.EventStatus) { return !fv.Negate, nil } return fv.Negate, nil diff --git a/x/interchainstaking/keeper/ibc_packet_handlers_test.go b/x/interchainstaking/keeper/ibc_packet_handlers_test.go index 9fe24289b..125e6776d 100644 --- a/x/interchainstaking/keeper/ibc_packet_handlers_test.go +++ b/x/interchainstaking/keeper/ibc_packet_handlers_test.go @@ -546,7 +546,7 @@ func (suite *KeeperTestSuite) TestHandleQueuedUnbondings() { quicksilver.InterchainstakingKeeper.SetZone(ctx, &zone) // trigger handler - err := quicksilver.InterchainstakingKeeper.HandleQueuedUnbondings(ctx, &zone, 1) + err := quicksilver.InterchainstakingKeeper.HandleQueuedUnbondings(ctx, zone.ChainId, 1, zone.LastRedemptionRate) if test.expectError { suite.Error(err) } else { diff --git a/x/interchainstaking/keeper/redemptions.go b/x/interchainstaking/keeper/redemptions.go index c04d3b167..0e06f15f1 100644 --- a/x/interchainstaking/keeper/redemptions.go +++ b/x/interchainstaking/keeper/redemptions.go @@ -150,7 +150,7 @@ func (k *Keeper) GetUnlockedTokensForZone(ctx sdk.Context, zone *types.Zone) (ma } func (k *Keeper) ScheduleQueuedUnbondings(ctx sdk.Context, zone *types.Zone, epoch int64) error { - cond, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.FieldEqual(emtypes.FieldIdentifier, fmt.Sprintf("distribute_unbonding/%d", epoch))), true) + cond, err := emtypes.NewConditionAll(ctx, emtypes.NewFieldValues(emtypes.FieldEqual(emtypes.FieldIdentifier, fmt.Sprintf("distribute_unbonding/%d", epoch-7))), true) if err != nil { return err } diff --git a/x/interchainstaking/keeper/redemptions_test.go b/x/interchainstaking/keeper/redemptions_test.go index 4abfb5903..0c4586449 100644 --- a/x/interchainstaking/keeper/redemptions_test.go +++ b/x/interchainstaking/keeper/redemptions_test.go @@ -313,7 +313,7 @@ func (suite *KeeperTestSuite) TestStargazeHandleQueuedUnbondingsUnderflow() { zone, f := quicksilver.InterchainstakingKeeper.GetZone(ctx, "stargaze-1") suite.True(f) - err = quicksilver.InterchainstakingKeeper.HandleQueuedUnbondings(ctx, &zone, 129) + err = quicksilver.InterchainstakingKeeper.HandleQueuedUnbondings(ctx, zone.ChainId, 129, zone.LastRedemptionRate) suite.NoError(err) suite.Equal(len(txk.Txs), 1)