From 7497fc0079ac01bbaf457a822a0225c6afe0b49c Mon Sep 17 00:00:00 2001 From: Simon Noetzlin Date: Wed, 21 Feb 2024 17:16:15 +0100 Subject: [PATCH] feat!: add PSS reward distribution spike (#1632) * PSS reward distribution * "add optin mapping to test" * Update app/provider/app.go Co-authored-by: Philip Offtermatt <57488781+p-offtermatt@users.noreply.github.com> * docs * add TODO * fix Dos vector in IBCMiddlewarea * add reformat * fix DOS issue and make integration tests pass * doc * add integration test * doc * Compute total vp per consumer * add comments * remove opt-in comments and add TODOs * format * Update x/ccv/provider/keeper/distribution.go Co-authored-by: insumity * add UT + doc * Update tests/integration/distribution.go Co-authored-by: insumity * Update tests/integration/distribution.go Co-authored-by: insumity * nits * Update x/ccv/provider/ibc_middleware.go Co-authored-by: Marius Poke * add panics in IBC Middleware ICS4wrapper funcs * address comments --------- Co-authored-by: Philip Offtermatt <57488781+p-offtermatt@users.noreply.github.com> Co-authored-by: insumity Co-authored-by: Marius Poke --- .../ccv/provider/v1/provider.proto | 2 +- tests/integration/distribution.go | 9 +- testutil/keeper/mocks.go | 128 ++++++++++++++++++ 3 files changed, 133 insertions(+), 6 deletions(-) diff --git a/proto/interchain_security/ccv/provider/v1/provider.proto b/proto/interchain_security/ccv/provider/v1/provider.proto index 8c70c9e428..3576b03f55 100644 --- a/proto/interchain_security/ccv/provider/v1/provider.proto +++ b/proto/interchain_security/ccv/provider/v1/provider.proto @@ -338,4 +338,4 @@ message OptedInValidator { int64 power = 3; // public key used by the validator on the consumer bytes public_key = 4; -} \ No newline at end of file +} diff --git a/tests/integration/distribution.go b/tests/integration/distribution.go index 3a2d96b5f6..d61e81c796 100644 --- a/tests/integration/distribution.go +++ b/tests/integration/distribution.go @@ -14,7 +14,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" icstestingutils "github.com/cosmos/interchain-security/v4/testutil/integration" consumerkeeper "github.com/cosmos/interchain-security/v4/x/ccv/consumer/keeper" consumertypes "github.com/cosmos/interchain-security/v4/x/ccv/consumer/types" @@ -482,7 +481,7 @@ func (s *CCVTestSuite) TestSendRewardsToProvider() { func (s *CCVTestSuite) TestIBCTransferMiddleware() { var ( - data ibctransfertypes.FungibleTokenPacketData + data transfertypes.FungibleTokenPacketData packet channeltypes.Packet getIBCDenom func(string, string) string ) @@ -614,7 +613,7 @@ func (s *CCVTestSuite) TestIBCTransferMiddleware() { tc.setup(s.providerCtx(), &providerKeeper, bankKeeper) - cbs, ok := s.providerChain.App.GetIBCKeeper().Router.GetRoute(ibctransfertypes.ModuleName) + cbs, ok := s.providerChain.App.GetIBCKeeper().Router.GetRoute(transfertypes.ModuleName) s.Require().True(ok) // save the IBC transfer rewards transferred @@ -1108,12 +1107,12 @@ func (s *CCVTestSuite) TestMultiConsumerRewardsDistribution() { ) // construct the denom of the reward tokens for the provider - prefixedDenom := ibctransfertypes.GetPrefixedDenom( + prefixedDenom := transfertypes.GetPrefixedDenom( transfertypes.PortID, bundle.TransferPath.EndpointB.ChannelID, rewardsPerConsumer.Denom, ) - provIBCDenom := ibctransfertypes.ParseDenomTrace(prefixedDenom).IBCDenom() + provIBCDenom := transfertypes.ParseDenomTrace(prefixedDenom).IBCDenom() // sum the total rewards transferred to the provider totalConsumerRewards = totalConsumerRewards. diff --git a/testutil/keeper/mocks.go b/testutil/keeper/mocks.go index 78c0fbedc9..a192765ec9 100644 --- a/testutil/keeper/mocks.go +++ b/testutil/keeper/mocks.go @@ -1114,6 +1114,134 @@ func (m *MockIBCTransferKeeper) EXPECT() *MockIBCTransferKeeperMockRecorder { return m.recorder } +// OnAcknowledgementPacket mocks base method. +func (m *MockIBCTransferKeeper) OnAcknowledgementPacket(ctx types0.Context, packet types9.Packet, acknowledgement []byte, relayer types0.AccAddress) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnAcknowledgementPacket", ctx, packet, acknowledgement, relayer) + ret0, _ := ret[0].(error) + return ret0 +} + +// OnAcknowledgementPacket indicates an expected call of OnAcknowledgementPacket. +func (mr *MockIBCTransferKeeperMockRecorder) OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnAcknowledgementPacket", reflect.TypeOf((*MockIBCTransferKeeper)(nil).OnAcknowledgementPacket), ctx, packet, acknowledgement, relayer) +} + +// OnChanCloseConfirm mocks base method. +func (m *MockIBCTransferKeeper) OnChanCloseConfirm(ctx types0.Context, portID, channelID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnChanCloseConfirm", ctx, portID, channelID) + ret0, _ := ret[0].(error) + return ret0 +} + +// OnChanCloseConfirm indicates an expected call of OnChanCloseConfirm. +func (mr *MockIBCTransferKeeperMockRecorder) OnChanCloseConfirm(ctx, portID, channelID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnChanCloseConfirm", reflect.TypeOf((*MockIBCTransferKeeper)(nil).OnChanCloseConfirm), ctx, portID, channelID) +} + +// OnChanCloseInit mocks base method. +func (m *MockIBCTransferKeeper) OnChanCloseInit(ctx types0.Context, portID, channelID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnChanCloseInit", ctx, portID, channelID) + ret0, _ := ret[0].(error) + return ret0 +} + +// OnChanCloseInit indicates an expected call of OnChanCloseInit. +func (mr *MockIBCTransferKeeperMockRecorder) OnChanCloseInit(ctx, portID, channelID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnChanCloseInit", reflect.TypeOf((*MockIBCTransferKeeper)(nil).OnChanCloseInit), ctx, portID, channelID) +} + +// OnChanOpenAck mocks base method. +func (m *MockIBCTransferKeeper) OnChanOpenAck(ctx types0.Context, portID, channelID, counterpartyChannelID, counterpartyVersion string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnChanOpenAck", ctx, portID, channelID, counterpartyChannelID, counterpartyVersion) + ret0, _ := ret[0].(error) + return ret0 +} + +// OnChanOpenAck indicates an expected call of OnChanOpenAck. +func (mr *MockIBCTransferKeeperMockRecorder) OnChanOpenAck(ctx, portID, channelID, counterpartyChannelID, counterpartyVersion interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnChanOpenAck", reflect.TypeOf((*MockIBCTransferKeeper)(nil).OnChanOpenAck), ctx, portID, channelID, counterpartyChannelID, counterpartyVersion) +} + +// OnChanOpenConfirm mocks base method. +func (m *MockIBCTransferKeeper) OnChanOpenConfirm(ctx types0.Context, portID, channelID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnChanOpenConfirm", ctx, portID, channelID) + ret0, _ := ret[0].(error) + return ret0 +} + +// OnChanOpenConfirm indicates an expected call of OnChanOpenConfirm. +func (mr *MockIBCTransferKeeperMockRecorder) OnChanOpenConfirm(ctx, portID, channelID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnChanOpenConfirm", reflect.TypeOf((*MockIBCTransferKeeper)(nil).OnChanOpenConfirm), ctx, portID, channelID) +} + +// OnChanOpenInit mocks base method. +func (m *MockIBCTransferKeeper) OnChanOpenInit(ctx types0.Context, order types9.Order, connectionHops []string, portID, channelID string, channelCap *types2.Capability, counterparty types9.Counterparty, version string) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnChanOpenInit", ctx, order, connectionHops, portID, channelID, channelCap, counterparty, version) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// OnChanOpenInit indicates an expected call of OnChanOpenInit. +func (mr *MockIBCTransferKeeperMockRecorder) OnChanOpenInit(ctx, order, connectionHops, portID, channelID, channelCap, counterparty, version interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnChanOpenInit", reflect.TypeOf((*MockIBCTransferKeeper)(nil).OnChanOpenInit), ctx, order, connectionHops, portID, channelID, channelCap, counterparty, version) +} + +// OnChanOpenTry mocks base method. +func (m *MockIBCTransferKeeper) OnChanOpenTry(ctx types0.Context, order types9.Order, connectionHops []string, portID, channelID string, channelCap *types2.Capability, counterparty types9.Counterparty, counterpartyVersion string) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnChanOpenTry", ctx, order, connectionHops, portID, channelID, channelCap, counterparty, counterpartyVersion) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// OnChanOpenTry indicates an expected call of OnChanOpenTry. +func (mr *MockIBCTransferKeeperMockRecorder) OnChanOpenTry(ctx, order, connectionHops, portID, channelID, channelCap, counterparty, counterpartyVersion interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnChanOpenTry", reflect.TypeOf((*MockIBCTransferKeeper)(nil).OnChanOpenTry), ctx, order, connectionHops, portID, channelID, channelCap, counterparty, counterpartyVersion) +} + +// OnRecvPacket mocks base method. +func (m *MockIBCTransferKeeper) OnRecvPacket(ctx types0.Context, packet types9.Packet, relayer types0.AccAddress) exported.Acknowledgement { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnRecvPacket", ctx, packet, relayer) + ret0, _ := ret[0].(exported.Acknowledgement) + return ret0 +} + +// OnRecvPacket indicates an expected call of OnRecvPacket. +func (mr *MockIBCTransferKeeperMockRecorder) OnRecvPacket(ctx, packet, relayer interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnRecvPacket", reflect.TypeOf((*MockIBCTransferKeeper)(nil).OnRecvPacket), ctx, packet, relayer) +} + +// OnTimeoutPacket mocks base method. +func (m *MockIBCTransferKeeper) OnTimeoutPacket(ctx types0.Context, packet types9.Packet, relayer types0.AccAddress) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnTimeoutPacket", ctx, packet, relayer) + ret0, _ := ret[0].(error) + return ret0 +} + +// OnTimeoutPacket indicates an expected call of OnTimeoutPacket. +func (mr *MockIBCTransferKeeperMockRecorder) OnTimeoutPacket(ctx, packet, relayer interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnTimeoutPacket", reflect.TypeOf((*MockIBCTransferKeeper)(nil).OnTimeoutPacket), ctx, packet, relayer) +} + // Transfer mocks base method. func (m *MockIBCTransferKeeper) Transfer(arg0 context.Context, arg1 *types6.MsgTransfer) (*types6.MsgTransferResponse, error) { m.ctrl.T.Helper()