Skip to content
This repository was archived by the owner on Nov 16, 2023. It is now read-only.

Commit 53519ea

Browse files
authored
refactor: simplify hooks implementation (cosmos#13396)
1 parent dcb0c9c commit 53519ea

24 files changed

+209
-212
lines changed

Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ cosmovisor:
146146

147147

148148
mocks: $(MOCKS_DIR)
149+
@go install github.com/golang/mock/[email protected]
149150
sh ./scripts/mockgen.sh
150151
.PHONY: mocks
151152

scripts/mockgen.sh

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
#!/usr/bin/env bash
22

3-
mockgen_cmd="go run github.com/golang/mock/mockgen"
3+
mockgen_cmd="mockgen"
44
$mockgen_cmd -source=client/account_retriever.go -package mock -destination testutil/mock/account_retriever.go
55
$mockgen_cmd -package mock -destination testutil/mock/tendermint_tm_db_DB.go github.com/tendermint/tm-db DB
6-
$mockgen_cmd -source db/types.go -package mock -destination testutil/mock/db/types.go
76
$mockgen_cmd -source=types/module/module.go -package mock -destination testutil/mock/types_module_module.go
87
$mockgen_cmd -source=types/invariant.go -package mock -destination testutil/mock/types_invariant.go
98
$mockgen_cmd -source=types/router.go -package mock -destination testutil/mock/types_router.go

store/tools/ics23/iavl/helpers/helpers.go

+3
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ func GetNonKey(allkeys [][]byte, loc tmproofs.Where) []byte {
8888
// returns a list of all keys in sorted order
8989
func BuildTree(size int) (tree *iavl.MutableTree, keys [][]byte, err error) {
9090
tree, err = iavl.NewMutableTree(db.NewMemDB(), 0)
91+
if err != nil {
92+
return nil, nil, err
93+
}
9194

9295
// insert lots of info and store the bytes
9396
keys = make([][]byte, size)

x/distribution/keeper/hooks.go

+7-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ type Hooks struct {
1414
var _ stakingtypes.StakingHooks = Hooks{}
1515

1616
// Create new distribution hooks
17-
func (k Keeper) Hooks() Hooks { return Hooks{k} }
17+
func (k Keeper) Hooks() Hooks {
18+
return Hooks{k}
19+
}
1820

1921
// initialize validator distribution record
2022
func (h Hooks) AfterValidatorCreated(ctx sdk.Context, valAddr sdk.ValAddress) error {
@@ -109,7 +111,10 @@ func (h Hooks) BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, f
109111
return nil
110112
}
111113

112-
func (h Hooks) BeforeValidatorModified(_ sdk.Context, _ sdk.ValAddress) error { return nil }
114+
func (h Hooks) BeforeValidatorModified(_ sdk.Context, _ sdk.ValAddress) error {
115+
return nil
116+
}
117+
113118
func (h Hooks) AfterValidatorBonded(_ sdk.Context, _ sdk.ConsAddress, _ sdk.ValAddress) error {
114119
return nil
115120
}

x/gov/abci.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func EndBlocker(ctx sdk.Context, keeper *keeper.Keeper) {
2424
keeper.RefundAndDeleteDeposits(ctx, proposal.Id) // refund deposit if proposal got removed without getting 100% of the proposal
2525

2626
// called when proposal become inactive
27-
keeper.AfterProposalFailedMinDeposit(ctx, proposal.Id)
27+
keeper.Hooks().AfterProposalFailedMinDeposit(ctx, proposal.Id)
2828

2929
ctx.EventManager().EmitEvent(
3030
sdk.NewEvent(
@@ -104,7 +104,7 @@ func EndBlocker(ctx sdk.Context, keeper *keeper.Keeper) {
104104
keeper.RemoveFromActiveProposalQueue(ctx, proposal.Id, *proposal.VotingEndTime)
105105

106106
// when proposal become active
107-
keeper.AfterProposalVotingPeriodEnded(ctx, proposal.Id)
107+
keeper.Hooks().AfterProposalVotingPeriodEnded(ctx, proposal.Id)
108108

109109
logger.Info(
110110
"proposal tallied",

x/gov/keeper/deposit.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ func (keeper Keeper) AddDeposit(ctx sdk.Context, proposalID uint64, depositorAdd
147147
}
148148

149149
// called when deposit has been added to a proposal, however the proposal may not be active
150-
keeper.AfterProposalDeposit(ctx, proposalID, depositorAddr)
150+
keeper.Hooks().AfterProposalDeposit(ctx, proposalID, depositorAddr)
151151

152152
ctx.EventManager().EmitEvent(
153153
sdk.NewEvent(

x/gov/keeper/hooks.go

-44
This file was deleted.

x/gov/keeper/keeper.go

+10
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,16 @@ func NewKeeper(
9292
}
9393
}
9494

95+
// Hooks gets the hooks for governance *Keeper {
96+
func (keeper *Keeper) Hooks() types.GovHooks {
97+
if keeper.hooks == nil {
98+
// return a no-op implementation if no hooks are set
99+
return types.MultiGovHooks{}
100+
}
101+
102+
return keeper.hooks
103+
}
104+
95105
// SetHooks sets the hooks for governance
96106
func (keeper *Keeper) SetHooks(gh types.GovHooks) *Keeper {
97107
if keeper.hooks != nil {

x/gov/keeper/proposal.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ func (keeper Keeper) SubmitProposal(ctx sdk.Context, messages []sdk.Msg, metadat
8282
keeper.SetProposalID(ctx, proposalID+1)
8383

8484
// called right after a proposal is submitted
85-
keeper.AfterProposalSubmission(ctx, proposalID)
85+
keeper.Hooks().AfterProposalSubmission(ctx, proposalID)
8686

8787
ctx.EventManager().EmitEvent(
8888
sdk.NewEvent(

x/gov/keeper/vote.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func (keeper Keeper) AddVote(ctx sdk.Context, proposalID uint64, voterAddr sdk.A
3333
keeper.SetVote(ctx, vote)
3434

3535
// called after a vote on a proposal is cast
36-
keeper.AfterProposalVote(ctx, proposalID, voterAddr)
36+
keeper.Hooks().AfterProposalVote(ctx, proposalID, voterAddr)
3737

3838
ctx.EventManager().EmitEvent(
3939
sdk.NewEvent(

x/slashing/keeper/hooks.go

+26-41
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,26 @@ import (
99
"github.com/cosmos/cosmos-sdk/x/slashing/types"
1010
)
1111

12-
func (k Keeper) AfterValidatorBonded(ctx sdk.Context, address sdk.ConsAddress, _ sdk.ValAddress) error {
13-
// Update the signing info start height or create a new signing info
14-
signingInfo, found := k.GetValidatorSigningInfo(ctx, address)
12+
var _ types.StakingHooks = Hooks{}
13+
14+
// Hooks wrapper struct for slashing keeper
15+
type Hooks struct {
16+
k Keeper
17+
}
18+
19+
// Return the slashing hooks
20+
func (k Keeper) Hooks() Hooks {
21+
return Hooks{k}
22+
}
23+
24+
// AfterValidatorBonded updates the signing info start height or create a new signing info
25+
func (h Hooks) AfterValidatorBonded(ctx sdk.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress) error {
26+
signingInfo, found := h.k.GetValidatorSigningInfo(ctx, consAddr)
1527
if found {
1628
signingInfo.StartHeight = ctx.BlockHeight()
1729
} else {
1830
signingInfo = types.NewValidatorSigningInfo(
19-
address,
31+
consAddr,
2032
ctx.BlockHeight(),
2133
0,
2234
time.Unix(0, 0),
@@ -25,53 +37,26 @@ func (k Keeper) AfterValidatorBonded(ctx sdk.Context, address sdk.ConsAddress, _
2537
)
2638
}
2739

28-
k.SetValidatorSigningInfo(ctx, address, signingInfo)
40+
h.k.SetValidatorSigningInfo(ctx, consAddr, signingInfo)
2941

3042
return nil
3143
}
3244

45+
// AfterValidatorRemoved deletes the address-pubkey relation when a validator is removed,
46+
func (h Hooks) AfterValidatorRemoved(ctx sdk.Context, consAddr sdk.ConsAddress, _ sdk.ValAddress) error {
47+
h.k.deleteAddrPubkeyRelation(ctx, crypto.Address(consAddr))
48+
return nil
49+
}
50+
3351
// AfterValidatorCreated adds the address-pubkey relation when a validator is created.
34-
func (k Keeper) AfterValidatorCreated(ctx sdk.Context, valAddr sdk.ValAddress) error {
35-
validator := k.sk.Validator(ctx, valAddr)
52+
func (h Hooks) AfterValidatorCreated(ctx sdk.Context, valAddr sdk.ValAddress) error {
53+
validator := h.k.sk.Validator(ctx, valAddr)
3654
consPk, err := validator.ConsPubKey()
3755
if err != nil {
3856
return err
3957
}
4058

41-
return k.AddPubkey(ctx, consPk)
42-
}
43-
44-
// AfterValidatorRemoved deletes the address-pubkey relation when a validator is removed,
45-
func (k Keeper) AfterValidatorRemoved(ctx sdk.Context, address sdk.ConsAddress) error {
46-
k.deleteAddrPubkeyRelation(ctx, crypto.Address(address))
47-
return nil
48-
}
49-
50-
// Hooks wrapper struct for slashing keeper
51-
type Hooks struct {
52-
k Keeper
53-
}
54-
55-
var _ types.StakingHooks = Hooks{}
56-
57-
// Return the wrapper struct
58-
func (k Keeper) Hooks() Hooks {
59-
return Hooks{k}
60-
}
61-
62-
// Implements sdk.ValidatorHooks
63-
func (h Hooks) AfterValidatorBonded(ctx sdk.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress) error {
64-
return h.k.AfterValidatorBonded(ctx, consAddr, valAddr)
65-
}
66-
67-
// Implements sdk.ValidatorHooks
68-
func (h Hooks) AfterValidatorRemoved(ctx sdk.Context, consAddr sdk.ConsAddress, _ sdk.ValAddress) error {
69-
return h.k.AfterValidatorRemoved(ctx, consAddr)
70-
}
71-
72-
// Implements sdk.ValidatorHooks
73-
func (h Hooks) AfterValidatorCreated(ctx sdk.Context, valAddr sdk.ValAddress) error {
74-
return h.k.AfterValidatorCreated(ctx, valAddr)
59+
return h.k.AddPubkey(ctx, consPk)
7560
}
7661

7762
func (h Hooks) AfterValidatorBeginUnbonding(_ sdk.Context, _ sdk.ConsAddress, _ sdk.ValAddress) error {

x/slashing/keeper/hooks_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ func (s *KeeperTestSuite) TestAfterValidatorBonded() {
1111
require := s.Require()
1212

1313
valAddr := sdk.ValAddress(consAddr.Bytes())
14-
keeper.AfterValidatorBonded(ctx, consAddr, valAddr)
14+
keeper.Hooks().AfterValidatorBonded(ctx, consAddr, valAddr)
1515

1616
_, ok := keeper.GetValidatorSigningInfo(ctx, consAddr)
1717
require.True(ok)
@@ -28,14 +28,14 @@ func (s *KeeperTestSuite) TestAfterValidatorCreatedOrRemoved() {
2828
require.NoError(err)
2929

3030
s.stakingKeeper.EXPECT().Validator(ctx, valAddr).Return(validator)
31-
err = keeper.AfterValidatorCreated(ctx, valAddr)
31+
err = keeper.Hooks().AfterValidatorCreated(ctx, valAddr)
3232
require.NoError(err)
3333

3434
ePubKey, err := keeper.GetPubkey(ctx, addr.Bytes())
3535
require.NoError(err)
3636
require.Equal(ePubKey, pubKey)
3737

38-
err = keeper.AfterValidatorRemoved(ctx, sdk.ConsAddress(addr))
38+
err = keeper.Hooks().AfterValidatorRemoved(ctx, sdk.ConsAddress(addr), nil)
3939
require.NoError(err)
4040

4141
_, err = keeper.GetPubkey(ctx, addr.Bytes())

x/slashing/testutil/expected_keepers_mocks.go

+98
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)