From f4b3a83285b10333c40e121954072e14aa9365d3 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Mon, 29 Jan 2024 16:50:31 +0530 Subject: [PATCH 1/6] return errors on hooks calls --- x/staking/keeper/delegation.go | 5 ++--- x/staking/keeper/slash.go | 4 ++-- x/staking/keeper/validator.go | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/x/staking/keeper/delegation.go b/x/staking/keeper/delegation.go index 651cc6310b62..a091b14f690c 100644 --- a/x/staking/keeper/delegation.go +++ b/x/staking/keeper/delegation.go @@ -338,7 +338,7 @@ func (k Keeper) SetUnbondingDelegationEntry( } if err := k.Hooks().AfterUnbondingInitiated(ctx, id); err != nil { - k.Logger(ctx).Error("failed to call after unbonding initiated hook", "error", err) + return ubd, fmt.Errorf("failed to call after unbonding initiated hook: %v", err) } } return ubd, nil @@ -554,8 +554,7 @@ func (k Keeper) SetRedelegationEntry(ctx context.Context, } if err := k.Hooks().AfterUnbondingInitiated(ctx, id); err != nil { - k.Logger(ctx).Error("failed to call after unbonding initiated hook", "error", err) - // TODO (Facu): Should we return here? We are ignoring this error + return types.Redelegation{}, fmt.Errorf("failed to call after unbonding initiated hook: %v", err) } return red, nil diff --git a/x/staking/keeper/slash.go b/x/staking/keeper/slash.go index 17d07a8da57a..b068d75c814e 100644 --- a/x/staking/keeper/slash.go +++ b/x/staking/keeper/slash.go @@ -81,7 +81,7 @@ func (k Keeper) Slash(ctx context.Context, consAddr sdk.ConsAddress, infractionH // call the before-modification hook if err := k.Hooks().BeforeValidatorModified(ctx, operatorAddress); err != nil { - k.Logger(ctx).Error("failed to call before validator modified hook", "error", err) + return math.Int{}, fmt.Errorf("failed to call before validator modified hook: %v", err) } // Track remaining slash amount for the validator @@ -170,7 +170,7 @@ func (k Keeper) Slash(ctx context.Context, consAddr sdk.ConsAddress, infractionH } // call the before-slashed hook if err := k.Hooks().BeforeValidatorSlashed(ctx, operatorAddress, effectiveFraction); err != nil { - k.Logger(ctx).Error("failed to call before validator slashed hook", "error", err) + return math.NewInt(0), fmt.Errorf("failed to call before validator slashed hook: %v", err) } } diff --git a/x/staking/keeper/validator.go b/x/staking/keeper/validator.go index b62403d1003c..24ad3e0a7445 100644 --- a/x/staking/keeper/validator.go +++ b/x/staking/keeper/validator.go @@ -251,7 +251,7 @@ func (k Keeper) RemoveValidator(ctx context.Context, address sdk.ValAddress) err } if err := k.Hooks().AfterValidatorRemoved(ctx, valConsAddr, str); err != nil { - k.Logger(ctx).Error("error in after validator removed hook", "error", err) + return fmt.Errorf("error in after validator removed hook: %v", err) } return nil From 7050b8959cf7f5842189c2c810c297f21180d477 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Mon, 29 Jan 2024 17:36:48 +0530 Subject: [PATCH 2/6] use %w to wrap the error --- x/staking/keeper/delegation.go | 4 ++-- x/staking/keeper/slash.go | 4 ++-- x/staking/keeper/validator.go | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/x/staking/keeper/delegation.go b/x/staking/keeper/delegation.go index a091b14f690c..a092ed3068b8 100644 --- a/x/staking/keeper/delegation.go +++ b/x/staking/keeper/delegation.go @@ -338,7 +338,7 @@ func (k Keeper) SetUnbondingDelegationEntry( } if err := k.Hooks().AfterUnbondingInitiated(ctx, id); err != nil { - return ubd, fmt.Errorf("failed to call after unbonding initiated hook: %v", err) + return ubd, fmt.Errorf("failed to call after unbonding initiated hook: %w", err) } } return ubd, nil @@ -554,7 +554,7 @@ func (k Keeper) SetRedelegationEntry(ctx context.Context, } if err := k.Hooks().AfterUnbondingInitiated(ctx, id); err != nil { - return types.Redelegation{}, fmt.Errorf("failed to call after unbonding initiated hook: %v", err) + return types.Redelegation{}, fmt.Errorf("failed to call after unbonding initiated hook: %w", err) } return red, nil diff --git a/x/staking/keeper/slash.go b/x/staking/keeper/slash.go index b068d75c814e..18389ee6e468 100644 --- a/x/staking/keeper/slash.go +++ b/x/staking/keeper/slash.go @@ -81,7 +81,7 @@ func (k Keeper) Slash(ctx context.Context, consAddr sdk.ConsAddress, infractionH // call the before-modification hook if err := k.Hooks().BeforeValidatorModified(ctx, operatorAddress); err != nil { - return math.Int{}, fmt.Errorf("failed to call before validator modified hook: %v", err) + return math.Int{}, fmt.Errorf("failed to call before validator modified hook: %w", err) } // Track remaining slash amount for the validator @@ -170,7 +170,7 @@ func (k Keeper) Slash(ctx context.Context, consAddr sdk.ConsAddress, infractionH } // call the before-slashed hook if err := k.Hooks().BeforeValidatorSlashed(ctx, operatorAddress, effectiveFraction); err != nil { - return math.NewInt(0), fmt.Errorf("failed to call before validator slashed hook: %v", err) + return math.NewInt(0), fmt.Errorf("failed to call before validator slashed hook: %w", err) } } diff --git a/x/staking/keeper/validator.go b/x/staking/keeper/validator.go index 24ad3e0a7445..1a222b2cb4b4 100644 --- a/x/staking/keeper/validator.go +++ b/x/staking/keeper/validator.go @@ -251,7 +251,7 @@ func (k Keeper) RemoveValidator(ctx context.Context, address sdk.ValAddress) err } if err := k.Hooks().AfterValidatorRemoved(ctx, valConsAddr, str); err != nil { - return fmt.Errorf("error in after validator removed hook: %v", err) + return fmt.Errorf("error in after validator removed hook: %w", err) } return nil From ad8f05ea48a7b26c898894dc29cd013dcda23ace Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Tue, 30 Jan 2024 10:07:53 +0530 Subject: [PATCH 3/6] nit --- x/staking/keeper/slash.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x/staking/keeper/slash.go b/x/staking/keeper/slash.go index 18389ee6e468..9a5b5e406407 100644 --- a/x/staking/keeper/slash.go +++ b/x/staking/keeper/slash.go @@ -76,12 +76,12 @@ func (k Keeper) Slash(ctx context.Context, consAddr sdk.ConsAddress, infractionH operatorAddress, err := k.ValidatorAddressCodec().StringToBytes(validator.GetOperator()) if err != nil { - return math.Int{}, err + return math.NewInt(0), err } // call the before-modification hook if err := k.Hooks().BeforeValidatorModified(ctx, operatorAddress); err != nil { - return math.Int{}, fmt.Errorf("failed to call before validator modified hook: %w", err) + return math.NewInt(0), fmt.Errorf("failed to call before validator modified hook: %w", err) } // Track remaining slash amount for the validator From f783b24be81f46a6b93484047bf8a17de00d0995 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Thu, 1 Feb 2024 13:23:32 +0530 Subject: [PATCH 4/6] add changelog --- x/staking/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/x/staking/CHANGELOG.md b/x/staking/CHANGELOG.md index fcd621d9b544..34f2a5ac3a18 100644 --- a/x/staking/CHANGELOG.md +++ b/x/staking/CHANGELOG.md @@ -29,6 +29,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Improvements +* [#19277](https://github.com/cosmos/cosmos-sdk/pull/19277) Hooks calls on `SetUnbondingDelegationEntry`, `SetRedelegationEntry`, `Slash` and `RemoveValidator` returns errors instead of logging just like other hooks calls. * [#18636](https://github.com/cosmos/cosmos-sdk/pull/18636) `IterateBondedValidatorsByPower`, `GetDelegatorBonded`, `Delegate`, `Unbond`, `Slash`, `Jail`, `SlashRedelegation`, `ApplyAndReturnValidatorSetUpdates` methods no longer panics on any kind of errors but instead returns appropriate errors. * [#18506](https://github.com/cosmos/cosmos-sdk/pull/18506) Detect the length of the ed25519 pubkey in CreateValidator to prevent panic. From ec6efd02508f008a68adc0163cfee5d04b25a05a Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Thu, 1 Feb 2024 15:02:28 +0530 Subject: [PATCH 5/6] fix tests --- x/staking/go.mod | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x/staking/go.mod b/x/staking/go.mod index 151f1c728c0f..24e5da6d7d02 100644 --- a/x/staking/go.mod +++ b/x/staking/go.mod @@ -168,4 +168,6 @@ replace ( cosmossdk.io/depinject => ../../depinject cosmossdk.io/x/auth => ../auth cosmossdk.io/x/bank => ../bank + cosmossdk.io/core => ../../core + cosmossdk.io/x/tx => ../tx ) From c93b32a212b29873afca07fe52f313cfe14161b9 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Fri, 2 Feb 2024 10:51:55 +0530 Subject: [PATCH 6/6] update go mod --- x/staking/go.mod | 8 ++++---- x/staking/go.sum | 21 ++++++++------------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/x/staking/go.mod b/x/staking/go.mod index 24e5da6d7d02..f300a33bf864 100644 --- a/x/staking/go.mod +++ b/x/staking/go.mod @@ -36,7 +36,7 @@ require ( cosmossdk.io/x/tx v0.13.0 // 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.1 // indirect + github.com/99designs/keyring v1.2.2 // indirect github.com/DataDog/datadog-go v4.8.3+incompatible // indirect github.com/DataDog/zstd v1.5.5 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect @@ -58,7 +58,7 @@ require ( github.com/cosmos/iavl v1.0.0 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect - github.com/danieljoos/wincred v1.1.2 // indirect + github.com/danieljoos/wincred v1.2.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect @@ -72,7 +72,7 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/getsentry/sentry-go v0.26.0 // indirect - github.com/go-kit/kit v0.12.0 // indirect + github.com/go-kit/kit v0.13.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect @@ -165,9 +165,9 @@ replace github.com/cosmos/cosmos-sdk => ../../. // TODO remove post spinning out all modules replace ( + cosmossdk.io/core => ../../core cosmossdk.io/depinject => ../../depinject cosmossdk.io/x/auth => ../auth cosmossdk.io/x/bank => ../bank - cosmossdk.io/core => ../../core cosmossdk.io/x/tx => ../tx ) diff --git a/x/staking/go.sum b/x/staking/go.sum index 4d2159b607f1..e83c10c711ad 100644 --- a/x/staking/go.sum +++ b/x/staking/go.sum @@ -4,8 +4,6 @@ cosmossdk.io/api v0.7.3-0.20231113122742-912390d5fc4a h1:Zr++x1RCJWi+K8bTZsQKdjt cosmossdk.io/api v0.7.3-0.20231113122742-912390d5fc4a/go.mod h1:7B/5XWh1HYwJk3DzWeNoxOSI+nGx1m5UyYfHLFuKzkw= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= -cosmossdk.io/core v0.12.1-0.20231114100755-569e3ff6a0d7 h1:hOzi4yo2Fc7h3mod+xX4m4QA4+Uq+PkFRjY/yalZ0B8= -cosmossdk.io/core v0.12.1-0.20231114100755-569e3ff6a0d7/go.mod h1:3v0JJNNd8ye0cOvJ+wUUvE7Ke0d2qxnNIDcXd5mziHk= 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/log v1.3.0 h1:L0Z0XstClo2kOU4h3V1iDoE5Ji64sg5HLOogzGg67Oo= @@ -14,15 +12,13 @@ cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig= cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= cosmossdk.io/store v1.0.2 h1:lSg5BTvJBHUDwswNNyeh4K/CbqiHER73VU4nDNb8uk0= cosmossdk.io/store v1.0.2/go.mod h1:EFtENTqVTuWwitGW1VwaBct+yDagk7oG/axBMPH+FXs= -cosmossdk.io/x/tx v0.13.0 h1:8lzyOh3zONPpZv2uTcUmsv0WTXy6T1/aCVDCqShmpzU= -cosmossdk.io/x/tx v0.13.0/go.mod h1:CpNQtmoqbXa33/DVxWQNx5Dcnbkv2xGUhL7tYQ5wUsY= 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= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= -github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= +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-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -76,8 +72,8 @@ github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipus github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= -github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= +github.com/bufbuild/protocompile v0.5.1 h1:mixz5lJX4Hiz4FpqFREJHIXLfaLBntfaJv1h+/jS+Qg= +github.com/bufbuild/protocompile v0.5.1/go.mod h1:G5iLmavmF4NsYtpZFvE3B/zFch2GIY8+wjsYLR/lc40= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -152,8 +148,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= -github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/danieljoos/wincred v1.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE= +github.com/danieljoos/wincred v1.2.0/go.mod h1:FzQLLMKBFdvu+osBrnFODiv32YGwCfx0SkRa/eYHgec= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -228,8 +224,8 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= -github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +github.com/go-kit/kit v0.13.0 h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU= +github.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4FKDg= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= @@ -853,7 +849,6 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/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-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=