From b4acd391508cd1a4de314af9b15c463ec4fdee3b Mon Sep 17 00:00:00 2001 From: MaxMustermann2 <82761650+MaxMustermann2@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:55:46 +0000 Subject: [PATCH 01/12] fix: RTE-01 --- app/ante/cosmos/sigverify.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/app/ante/cosmos/sigverify.go b/app/ante/cosmos/sigverify.go index 84f8cf25a..0fe22af0d 100644 --- a/app/ante/cosmos/sigverify.go +++ b/app/ante/cosmos/sigverify.go @@ -7,6 +7,7 @@ import ( "errors" "fmt" + errorsmod "cosmossdk.io/errors" "github.com/ExocoreNetwork/exocore/app/ante/utils" oracletypes "github.com/ExocoreNetwork/exocore/x/oracle/types" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" @@ -16,6 +17,7 @@ import ( cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/crypto/types/multisig" sdk "github.com/cosmos/cosmos-sdk/types" + errortypes "github.com/cosmos/cosmos-sdk/types/errors" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/tx/signing" authante "github.com/cosmos/cosmos-sdk/x/auth/ante" @@ -495,7 +497,17 @@ func ConsumeMultisignatureVerificationGas( meter sdk.GasMeter, sig *signing.MultiSignatureData, pubkey multisig.PubKey, params types.Params, accSeq uint64, ) error { + pubkeys := pubkey.GetPubKeys() size := sig.BitArray.Count() + if size != len(pubkeys) { + return errorsmod.Wrapf(errortypes.ErrInvalidPubKey, "bitarray length doesn't match the number of public keys") + } + if len(sig.Signatures) != sig.BitArray.NumTrueBitsBefore(size) { + return errorsmod.Wrapf(errortypes.ErrTooManySignatures, "number of signatures exceeds number of bits in bitarray") + } + // we have verified that size == len(pubkeys) + // and that the number of signatures == number of true bits in the bitarray + // so we can safely iterate over the pubkeys and signatures sigIndex := 0 for i := 0; i < size; i++ { @@ -503,7 +515,7 @@ func ConsumeMultisignatureVerificationGas( continue } sigV2 := signing.SignatureV2{ - PubKey: pubkey.GetPubKeys()[i], + PubKey: pubkeys[i], Data: sig.Signatures[sigIndex], Sequence: accSeq, } From d2a9d6531de6615a2ef88adeff7a51179b2132c4 Mon Sep 17 00:00:00 2001 From: MaxMustermann2 <82761650+MaxMustermann2@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:56:15 +0000 Subject: [PATCH 02/12] fix: TOW-02 --- x/avs/keeper/keeper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/avs/keeper/keeper.go b/x/avs/keeper/keeper.go index 50265144d..0fd948f03 100644 --- a/x/avs/keeper/keeper.go +++ b/x/avs/keeper/keeper.go @@ -133,7 +133,7 @@ func (k Keeper) UpdateAVSInfo(ctx sdk.Context, params *types.AVSRegisterOrDeregi // If avs DeRegisterAction check UnbondingPeriod // #nosec G115 - if epoch.CurrentEpoch-int64(avsInfo.GetInfo().StartingEpoch) > int64(avsInfo.Info.AvsUnbondingPeriod) { + if epoch.CurrentEpoch-int64(avsInfo.GetInfo().StartingEpoch) <= int64(avsInfo.Info.AvsUnbondingPeriod) { return errorsmod.Wrap(types.ErrUnbondingPeriod, fmt.Sprintf("not qualified to deregister %s", avsInfo)) } From 20e7631a59f3d140bebc3dffe8ef0fddbb06a3e9 Mon Sep 17 00:00:00 2001 From: MaxMustermann2 <82761650+MaxMustermann2@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:57:51 +0000 Subject: [PATCH 03/12] fix: GWT-01 --- x/reward/keeper/claim_reward.go | 56 ++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/x/reward/keeper/claim_reward.go b/x/reward/keeper/claim_reward.go index 97ba0d275..2d2650ba7 100644 --- a/x/reward/keeper/claim_reward.go +++ b/x/reward/keeper/claim_reward.go @@ -3,7 +3,6 @@ package keeper import ( "bytes" "encoding/binary" - "fmt" "log" "math/big" "strings" @@ -125,32 +124,37 @@ func (k Keeper) PostTxProcessing(ctx sdk.Context, _ core.Message, receipt *ethty } func (k Keeper) RewardForWithdraw(ctx sdk.Context, event *RewardParams) error { - // check event parameter then execute RewardForWithdraw operation - if event.OpAmount.IsNegative() { - return errorsmod.Wrap(rtypes.ErrRewardAmountIsNegative, fmt.Sprintf("the amount is:%s", event.OpAmount)) - } - stakeID, assetID := getStakeIDAndAssetID(event) - // check is asset exist - if !k.assetsKeeper.IsStakingAsset(ctx, assetID) { - return errorsmod.Wrap(rtypes.ErrRewardAssetNotExist, fmt.Sprintf("the assetID is:%s", assetID)) - } + // TODO: rewards aren't yet supported + // it is safe to return an error, since the precompile call will prevent an error + // if err != nil return false + // the false will ensure no unnecessary LZ messages are sent by the gateway + return rtypes.ErrNotSupportYet + // // check event parameter then execute RewardForWithdraw operation + // if event.OpAmount.IsNegative() { + // return errorsmod.Wrap(rtypes.ErrRewardAmountIsNegative, fmt.Sprintf("the amount is:%s", event.OpAmount)) + // } + // stakeID, assetID := getStakeIDAndAssetID(event) + // // check is asset exist + // if !k.assetsKeeper.IsStakingAsset(ctx, assetID) { + // return errorsmod.Wrap(rtypes.ErrRewardAssetNotExist, fmt.Sprintf("the assetID is:%s", assetID)) + // } - // TODO - changeAmount := types.DeltaStakerSingleAsset{ - TotalDepositAmount: event.OpAmount, - WithdrawableAmount: event.OpAmount, - } - // TODO: there should be a reward pool to be transferred from for native tokens' reward, don't update staker-asset-info, just transfer exo-native-token:pool->staker or handled by validators since the reward would be transferred to validators directly. - if assetID != types.ExocoreAssetID { - err := k.assetsKeeper.UpdateStakerAssetState(ctx, stakeID, assetID, changeAmount) - if err != nil { - return err - } - if err = k.assetsKeeper.UpdateStakingAssetTotalAmount(ctx, assetID, event.OpAmount); err != nil { - return err - } - } - return nil + // // TODO verify the reward amount is valid + // changeAmount := types.DeltaStakerSingleAsset{ + // TotalDepositAmount: event.OpAmount, + // WithdrawableAmount: event.OpAmount, + // } + // // TODO: there should be a reward pool to be transferred from for native tokens' reward, don't update staker-asset-info, just transfer exo-native-token:pool->staker or handled by validators since the reward would be transferred to validators directly. + // if assetID != types.ExocoreAssetID { + // err := k.assetsKeeper.UpdateStakerAssetState(ctx, stakeID, assetID, changeAmount) + // if err != nil { + // return err + // } + // if err = k.assetsKeeper.UpdateStakingAssetTotalAmount(ctx, assetID, event.OpAmount); err != nil { + // return err + // } + // } + // return nil } // WithdrawDelegationRewards is an implementation of a function in the distribution interface. From e9acd5ac5f48ae4d0692b43025a906c918d15903 Mon Sep 17 00:00:00 2001 From: MaxMustermann2 <82761650+MaxMustermann2@users.noreply.github.com> Date: Wed, 16 Oct 2024 12:24:04 +0000 Subject: [PATCH 04/12] chore: lint --- x/reward/keeper/claim_reward.go | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/x/reward/keeper/claim_reward.go b/x/reward/keeper/claim_reward.go index 2d2650ba7..03502443f 100644 --- a/x/reward/keeper/claim_reward.go +++ b/x/reward/keeper/claim_reward.go @@ -5,7 +5,6 @@ import ( "encoding/binary" "log" "math/big" - "strings" errorsmod "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" @@ -13,7 +12,6 @@ import ( rtypes "github.com/ExocoreNetwork/exocore/x/reward/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core" ethtypes "github.com/ethereum/go-ethereum/core/types" "github.com/evmos/evmos/v16/rpc/namespaces/ethereum/eth/filters" @@ -82,13 +80,6 @@ func getRewardParamsFromEventLog(log *ethtypes.Log) (*RewardParams, error) { }, nil } -func getStakeIDAndAssetID(params *RewardParams) (stakeID string, assetID string) { - clientChainLzIDStr := hexutil.EncodeUint64(params.ClientChainLzID) - stakeID = strings.Join([]string{hexutil.Encode(params.WithdrawRewardAddress), clientChainLzIDStr}, "_") - assetID = strings.Join([]string{hexutil.Encode(params.AssetsAddress), clientChainLzIDStr}, "_") - return -} - func (k Keeper) PostTxProcessing(ctx sdk.Context, _ core.Message, receipt *ethtypes.Receipt) error { // TODO check if contract address is valid layerZero relayer address // check if log address and topicId is valid @@ -123,7 +114,7 @@ func (k Keeper) PostTxProcessing(ctx sdk.Context, _ core.Message, receipt *ethty return nil } -func (k Keeper) RewardForWithdraw(ctx sdk.Context, event *RewardParams) error { +func (k Keeper) RewardForWithdraw(sdk.Context, *RewardParams) error { // TODO: rewards aren't yet supported // it is safe to return an error, since the precompile call will prevent an error // if err != nil return false From bc3f5c2a3939202cd6b45cfd7edc0133d7582885 Mon Sep 17 00:00:00 2001 From: MaxMustermann2 <82761650+MaxMustermann2@users.noreply.github.com> Date: Wed, 16 Oct 2024 12:24:13 +0000 Subject: [PATCH 05/12] refactor: optimize shared code --- app/ante/cosmos/sigverify.go | 79 +++++++++++++++++++++--------------- app/ante/sigverify.go | 35 ++-------------- 2 files changed, 51 insertions(+), 63 deletions(-) diff --git a/app/ante/cosmos/sigverify.go b/app/ante/cosmos/sigverify.go index 0fe22af0d..c6984f308 100644 --- a/app/ante/cosmos/sigverify.go +++ b/app/ante/cosmos/sigverify.go @@ -7,7 +7,6 @@ import ( "errors" "fmt" - errorsmod "cosmossdk.io/errors" "github.com/ExocoreNetwork/exocore/app/ante/utils" oracletypes "github.com/ExocoreNetwork/exocore/x/oracle/types" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" @@ -17,7 +16,6 @@ import ( cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/crypto/types/multisig" sdk "github.com/cosmos/cosmos-sdk/types" - errortypes "github.com/cosmos/cosmos-sdk/types/errors" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/tx/signing" authante "github.com/cosmos/cosmos-sdk/x/auth/ante" @@ -497,36 +495,9 @@ func ConsumeMultisignatureVerificationGas( meter sdk.GasMeter, sig *signing.MultiSignatureData, pubkey multisig.PubKey, params types.Params, accSeq uint64, ) error { - pubkeys := pubkey.GetPubKeys() - size := sig.BitArray.Count() - if size != len(pubkeys) { - return errorsmod.Wrapf(errortypes.ErrInvalidPubKey, "bitarray length doesn't match the number of public keys") - } - if len(sig.Signatures) != sig.BitArray.NumTrueBitsBefore(size) { - return errorsmod.Wrapf(errortypes.ErrTooManySignatures, "number of signatures exceeds number of bits in bitarray") - } - // we have verified that size == len(pubkeys) - // and that the number of signatures == number of true bits in the bitarray - // so we can safely iterate over the pubkeys and signatures - sigIndex := 0 - - for i := 0; i < size; i++ { - if !sig.BitArray.GetIndex(i) { - continue - } - sigV2 := signing.SignatureV2{ - PubKey: pubkeys[i], - Data: sig.Signatures[sigIndex], - Sequence: accSeq, - } - err := DefaultSigVerificationGasConsumer(meter, sigV2, params) - if err != nil { - return err - } - sigIndex++ - } - - return nil + return ConsumeMultisignatureVerificationGasWithVerifier( + meter, sig, pubkey, params, accSeq, DefaultSigVerificationGasConsumer, + ) } // GetSignerAcc returns an account for a given address that is expected to sign @@ -592,3 +563,47 @@ func signatureDataToBz(data signing.SignatureData) ([][]byte, error) { return nil, sdkerrors.ErrInvalidType.Wrapf("unexpected signature data type %T", data) } } + +// ConsumeMultisignatureVerificationGasWithVerifier consumes gas from a GasMeter for verifying +// a multisig pubkey signature. It uses the provided verifier function to verify each signature +// and consume gas accordingly. +func ConsumeMultisignatureVerificationGasWithVerifier( + meter sdk.GasMeter, sig *signing.MultiSignatureData, pubkey multisig.PubKey, + params types.Params, accSeq uint64, verifier authante.SignatureVerificationGasConsumer, +) error { + pubkeys := pubkey.GetPubKeys() + size := sig.BitArray.Count() + if size != len(pubkeys) { + return sdkerrors.ErrInvalidPubKey.Wrap( + "bitarray length doesn't match the number of public keys", + ) + } + if len(sig.Signatures) != sig.BitArray.NumTrueBitsBefore(size) { + return sdkerrors.ErrTooManySignatures.Wrap( + "number of signatures doesn't equal the number of true bits in bitarray", + ) + } + // we have verified that size == len(pubkeys) + // and that the number of signatures == number of true bits in the bitarray + // so we can safely iterate over the pubkeys and signatures + sigIndex := 0 + + for i := 0; i < size; i++ { + if !sig.BitArray.GetIndex(i) { + // not signed + continue + } + sigV2 := signing.SignatureV2{ + PubKey: pubkeys[i], + Data: sig.Signatures[sigIndex], + Sequence: accSeq, + } + err := verifier(meter, sigV2, params) + if err != nil { + return err + } + sigIndex++ + } + + return nil +} diff --git a/app/ante/sigverify.go b/app/ante/sigverify.go index e4303d62f..4ed530392 100644 --- a/app/ante/sigverify.go +++ b/app/ante/sigverify.go @@ -4,6 +4,7 @@ import ( "fmt" errorsmod "cosmossdk.io/errors" + cosmosante "github.com/ExocoreNetwork/exocore/app/ante/cosmos" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" "github.com/cosmos/cosmos-sdk/crypto/types/multisig" sdk "github.com/cosmos/cosmos-sdk/types" @@ -64,35 +65,7 @@ func ConsumeMultisignatureVerificationGas( meter sdk.GasMeter, sig *signing.MultiSignatureData, pubkey multisig.PubKey, params authtypes.Params, accSeq uint64, ) error { - pubkeys := pubkey.GetPubKeys() - size := sig.BitArray.Count() - if size != len(pubkeys) { - return errorsmod.Wrapf(errortypes.ErrInvalidPubKey, "bitarray length doesn't match the number of public keys") - } - if len(sig.Signatures) != sig.BitArray.NumTrueBitsBefore(size) { - return errorsmod.Wrapf(errortypes.ErrTooManySignatures, "number of signatures exceeds number of bits in bitarray") - } - // we have verified that size == len(pubkeys) - // and that the number of signatures == number of true bits in the bitarray - // so we can safely iterate over the pubkeys and signatures - sigIndex := 0 - - for i := 0; i < size; i++ { - if !sig.BitArray.GetIndex(i) { - // not signed - continue - } - sigV2 := signing.SignatureV2{ - PubKey: pubkeys[i], - Data: sig.Signatures[sigIndex], - Sequence: accSeq, - } - err := SigVerificationGasConsumer(meter, sigV2, params) - if err != nil { - return err - } - sigIndex++ - } - - return nil + return cosmosante.ConsumeMultisignatureVerificationGasWithVerifier( + meter, sig, pubkey, params, accSeq, SigVerificationGasConsumer, + ) } From b2966b5874904d5702863432452da5bd9249e08c Mon Sep 17 00:00:00 2001 From: MaxMustermann2 <82761650+MaxMustermann2@users.noreply.github.com> Date: Thu, 17 Oct 2024 05:45:29 +0000 Subject: [PATCH 06/12] fix: ENO-01 --- app/app.go | 12 +++++++----- testutil/keeper/oracle.go | 3 +++ x/assets/keeper/keeper.go | 7 +++++-- x/assets/keeper/msg_server.go | 8 ++++++++ x/dogfood/keeper/keeper.go | 7 ++++++- x/dogfood/keeper/msg_server.go | 18 +++++++++--------- x/exomint/keeper/msg_server.go | 16 ++++++++-------- x/oracle/keeper/keeper.go | 4 +++- x/oracle/keeper/msg_server_update_params.go | 13 ++++++++----- x/reward/keeper/keeper.go | 4 ++++ x/reward/keeper/msg_server.go | 8 ++++++++ x/slash/keeper/keeper.go | 4 ++++ x/slash/keeper/msg_server.go | 8 ++++++++ 13 files changed, 81 insertions(+), 31 deletions(-) diff --git a/app/app.go b/app/app.go index 1eeffa625..f84763c36 100644 --- a/app/app.go +++ b/app/app.go @@ -546,7 +546,10 @@ func NewExocoreApp( ) // asset and client chain registry. - app.AssetsKeeper = assetsKeeper.NewKeeper(keys[assetsTypes.StoreKey], appCodec, &app.OracleKeeper, app.BankKeeper, &app.DelegationKeeper) + app.AssetsKeeper = assetsKeeper.NewKeeper( + keys[assetsTypes.StoreKey], appCodec, &app.OracleKeeper, + app.BankKeeper, &app.DelegationKeeper, authAddrString, + ) // handles delegations by stakers, and must know if the delegatee operator is registered. app.DelegationKeeper = delegationKeeper.NewKeeper( @@ -574,18 +577,17 @@ func NewExocoreApp( // these two modules aren't finalized yet. app.RewardKeeper = rewardKeeper.NewKeeper( appCodec, keys[rewardTypes.StoreKey], app.AssetsKeeper, - app.AVSManagerKeeper, + app.AVSManagerKeeper, authAddrString, ) app.ExoSlashKeeper = slashKeeper.NewKeeper( - appCodec, keys[exoslashTypes.StoreKey], app.AssetsKeeper, + appCodec, keys[exoslashTypes.StoreKey], app.AssetsKeeper, authAddrString, ) // x/oracle is not fully integrated (or enabled) but allows for exchange rates to be added. app.OracleKeeper = oracleKeeper.NewKeeper( appCodec, keys[oracleTypes.StoreKey], memKeys[oracleTypes.MemStoreKey], app.GetSubspace(oracleTypes.ModuleName), app.StakingKeeper, - &app.DelegationKeeper, - &app.AssetsKeeper, + &app.DelegationKeeper, &app.AssetsKeeper, authAddrString, ) // the SDK slashing module is used to slash validators in the case of downtime. it tracks diff --git a/testutil/keeper/oracle.go b/testutil/keeper/oracle.go index 3316c0b36..4308d54df 100644 --- a/testutil/keeper/oracle.go +++ b/testutil/keeper/oracle.go @@ -14,6 +14,8 @@ import ( "github.com/cosmos/cosmos-sdk/store" storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" typesparams "github.com/cosmos/cosmos-sdk/x/params/types" assetskeeper "github.com/ExocoreNetwork/exocore/x/assets/keeper" @@ -49,6 +51,7 @@ func OracleKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { dogfoodkeeper.Keeper{}, delegationkeeper.Keeper{}, assetskeeper.Keeper{}, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) ctx := sdk.NewContext(stateStore, tmproto.Header{ diff --git a/x/assets/keeper/keeper.go b/x/assets/keeper/keeper.go index e4c324a27..3f3398a75 100644 --- a/x/assets/keeper/keeper.go +++ b/x/assets/keeper/keeper.go @@ -13,8 +13,9 @@ type Keeper struct { storeKey storetypes.StoreKey cdc codec.BinaryCodec assetstype.OracleKeeper - bk assetstype.BankKeeper - dk delegationKeeper + bk assetstype.BankKeeper + dk delegationKeeper + authority string } func NewKeeper( @@ -23,6 +24,7 @@ func NewKeeper( oracleKeeper assetstype.OracleKeeper, bk assetstype.BankKeeper, dk delegationKeeper, + authority string, ) Keeper { return Keeper{ storeKey: storeKey, @@ -30,6 +32,7 @@ func NewKeeper( OracleKeeper: oracleKeeper, bk: bk, dk: dk, + authority: authority, } } diff --git a/x/assets/keeper/msg_server.go b/x/assets/keeper/msg_server.go index 5038f3103..05711d08e 100644 --- a/x/assets/keeper/msg_server.go +++ b/x/assets/keeper/msg_server.go @@ -3,8 +3,10 @@ package keeper import ( "context" + "github.com/ExocoreNetwork/exocore/utils" assetstype "github.com/ExocoreNetwork/exocore/x/assets/types" sdk "github.com/cosmos/cosmos-sdk/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ) var _ assetstype.MsgServer = &Keeper{} @@ -12,6 +14,12 @@ var _ assetstype.MsgServer = &Keeper{} // UpdateParams This function should be triggered by the governance in the future func (k Keeper) UpdateParams(ctx context.Context, params *assetstype.MsgUpdateParams) (*assetstype.MsgUpdateParamsResponse, error) { c := sdk.UnwrapSDKContext(ctx) + if utils.IsMainnet(c.ChainID()) && k.authority != params.Authority { + return nil, govtypes.ErrInvalidSigner.Wrapf( + "invalid authority; expected %s, got %s", + k.authority, params.Authority, + ) + } err := k.SetParams(c, ¶ms.Params) if err != nil { return nil, err diff --git a/x/dogfood/keeper/keeper.go b/x/dogfood/keeper/keeper.go index 861a69b82..f8a023fc6 100644 --- a/x/dogfood/keeper/keeper.go +++ b/x/dogfood/keeper/keeper.go @@ -40,7 +40,12 @@ type ( ) // NewKeeper creates a new dogfood keeper. -func NewKeeper(cdc codec.BinaryCodec, storeKey storetypes.StoreKey, epochsKeeper types.EpochsKeeper, operatorKeeper types.OperatorKeeper, delegationKeeper keeper.Keeper, restakingKeeper types.AssetsKeeper, avsKeeper types.AVSKeeper, authority string) Keeper { +func NewKeeper( + cdc codec.BinaryCodec, storeKey storetypes.StoreKey, + epochsKeeper types.EpochsKeeper, operatorKeeper types.OperatorKeeper, + delegationKeeper keeper.Keeper, restakingKeeper types.AssetsKeeper, + avsKeeper types.AVSKeeper, authority string, +) Keeper { k := Keeper{ cdc: cdc, storeKey: storeKey, diff --git a/x/dogfood/keeper/msg_server.go b/x/dogfood/keeper/msg_server.go index f4ced9f73..67e2d95da 100644 --- a/x/dogfood/keeper/msg_server.go +++ b/x/dogfood/keeper/msg_server.go @@ -5,12 +5,13 @@ import ( "strings" "cosmossdk.io/errors" + "github.com/ExocoreNetwork/exocore/utils" avskeeper "github.com/ExocoreNetwork/exocore/x/avs/keeper" avstypes "github.com/ExocoreNetwork/exocore/x/avs/types" - "github.com/ExocoreNetwork/exocore/x/dogfood/types" + epochstypes "github.com/ExocoreNetwork/exocore/x/epochs/types" sdk "github.com/cosmos/cosmos-sdk/types" - epochstypes "github.com/evmos/evmos/v16/x/epochs/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ) type msgServer struct { @@ -31,13 +32,12 @@ func (k Keeper) UpdateParams( ctx context.Context, msg *types.MsgUpdateParams, ) (*types.MsgUpdateParamsResponse, error) { c := sdk.UnwrapSDKContext(ctx) - // if k.authority != msg.Authority { - // return nil, errorsmod.Wrapf( - // govtypes.ErrInvalidSigner, - // "invalid authority; expected %s, got %s", - // k.authority, msg.Authority, - // ) - // } + if utils.IsMainnet(c.ChainID()) && k.authority != msg.Authority { + return nil, govtypes.ErrInvalidSigner.Wrapf( + "invalid authority; expected %s, got %s", + k.authority, msg.Authority, + ) + } prevParams := k.GetDogfoodParams(c) nextParams := msg.Params logger := k.Logger(c) diff --git a/x/exomint/keeper/msg_server.go b/x/exomint/keeper/msg_server.go index 16a9175e3..8f49baee1 100644 --- a/x/exomint/keeper/msg_server.go +++ b/x/exomint/keeper/msg_server.go @@ -4,9 +4,10 @@ import ( "context" errorsmod "cosmossdk.io/errors" - + "github.com/ExocoreNetwork/exocore/utils" "github.com/ExocoreNetwork/exocore/x/exomint/types" sdk "github.com/cosmos/cosmos-sdk/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ) type msgServer struct { @@ -27,13 +28,12 @@ func (k Keeper) UpdateParams( ctx context.Context, msg *types.MsgUpdateParams, ) (*types.MsgUpdateParamsResponse, error) { c := sdk.UnwrapSDKContext(ctx) - // if k.authority != msg.Authority { - // return nil, errorsmod.Wrapf( - // govtypes.ErrInvalidSigner, - // "invalid authority; expected %s, got %s", - // k.authority, msg.Authority, - // ) - // } + if utils.IsMainnet(c.ChainID()) && k.authority != msg.Authority { + return nil, govtypes.ErrInvalidSigner.Wrapf( + "invalid authority; expected %s, got %s", + k.authority, msg.Authority, + ) + } prevParams := k.GetParams(c) nextParams := msg.Params // stateless validations diff --git a/x/oracle/keeper/keeper.go b/x/oracle/keeper/keeper.go index c86fe9b04..c117ec4b3 100644 --- a/x/oracle/keeper/keeper.go +++ b/x/oracle/keeper/keeper.go @@ -21,7 +21,7 @@ type ( storeKey storetypes.StoreKey memKey storetypes.StoreKey paramstore paramtypes.Subspace - // authority string + authority string common.KeeperDogfood delegationKeeper types.DelegationKeeper assetsKeeper types.AssetsKeeper @@ -38,6 +38,7 @@ func NewKeeper( sKeeper common.KeeperDogfood, delegationKeeper types.DelegationKeeper, assetsKeeper types.AssetsKeeper, + authority string, ) Keeper { // set KeyTable if it has not already been set if !ps.HasKeyTable() { @@ -52,6 +53,7 @@ func NewKeeper( KeeperDogfood: sKeeper, delegationKeeper: delegationKeeper, assetsKeeper: assetsKeeper, + authority: authority, } } diff --git a/x/oracle/keeper/msg_server_update_params.go b/x/oracle/keeper/msg_server_update_params.go index 96f06a23e..279cb668a 100644 --- a/x/oracle/keeper/msg_server_update_params.go +++ b/x/oracle/keeper/msg_server_update_params.go @@ -3,19 +3,22 @@ package keeper import ( "context" + utils "github.com/ExocoreNetwork/exocore/utils" "github.com/ExocoreNetwork/exocore/x/oracle/keeper/cache" "github.com/ExocoreNetwork/exocore/x/oracle/types" sdk "github.com/cosmos/cosmos-sdk/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ) func (ms msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - // TODO: skip the authority check for test - // if ms.authority != msg.Authority { - // return nil, govtypes.ErrInvalidSigner.Wrapf("invalid authority; expected %s, got %s", ms.authority, msg.Authority) - // } - + if utils.IsMainnet(ctx.ChainID()) && ms.Keeper.authority != msg.Authority { + return nil, govtypes.ErrInvalidSigner.Wrapf( + "invalid authority; expected %s, got %s", + ms.Keeper.authority, msg.Authority, + ) + } p := ms.GetParams(ctx) var err error defer func() { diff --git a/x/reward/keeper/keeper.go b/x/reward/keeper/keeper.go index b359dc16d..931acc185 100644 --- a/x/reward/keeper/keeper.go +++ b/x/reward/keeper/keeper.go @@ -30,6 +30,8 @@ type Keeper struct { banker bankkeeper.Keeper distributor types.Distributor avsKeeper avsKeeper.Keeper + + authority string } func NewKeeper( @@ -37,12 +39,14 @@ func NewKeeper( storeKey storetypes.StoreKey, assetsKeeper assetsKeeper.Keeper, avsKeeper avsKeeper.Keeper, + authority string, ) Keeper { return Keeper{ cdc: cdc, storeKey: storeKey, assetsKeeper: assetsKeeper, avsKeeper: avsKeeper, + authority: authority, } } diff --git a/x/reward/keeper/msg_server.go b/x/reward/keeper/msg_server.go index cf86b183a..0851b876a 100644 --- a/x/reward/keeper/msg_server.go +++ b/x/reward/keeper/msg_server.go @@ -3,8 +3,10 @@ package keeper import ( "context" + "github.com/ExocoreNetwork/exocore/utils" "github.com/ExocoreNetwork/exocore/x/reward/types" sdk "github.com/cosmos/cosmos-sdk/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ) type msgServer struct { @@ -13,6 +15,12 @@ type msgServer struct { func (k Keeper) UpdateParams(ctx context.Context, params *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { c := sdk.UnwrapSDKContext(ctx) + if utils.IsMainnet(c.ChainID()) && k.authority != params.Authority { + return nil, govtypes.ErrInvalidSigner.Wrapf( + "invalid authority; expected %s, got %s", + k.authority, params.Authority, + ) + } err := k.SetParams(c, ¶ms.Params) if err != nil { return nil, err diff --git a/x/slash/keeper/keeper.go b/x/slash/keeper/keeper.go index b4c167223..7c6a1b2d5 100644 --- a/x/slash/keeper/keeper.go +++ b/x/slash/keeper/keeper.go @@ -21,17 +21,21 @@ type Keeper struct { // other keepers assetsKeeper keeper.Keeper + + authority string } func NewKeeper( cdc codec.BinaryCodec, storeKey storetypes.StoreKey, assetsKeeper keeper.Keeper, + authority string, ) Keeper { return Keeper{ cdc: cdc, storeKey: storeKey, assetsKeeper: assetsKeeper, + authority: authority, } } diff --git a/x/slash/keeper/msg_server.go b/x/slash/keeper/msg_server.go index d334d6086..d5156b236 100644 --- a/x/slash/keeper/msg_server.go +++ b/x/slash/keeper/msg_server.go @@ -3,8 +3,10 @@ package keeper import ( "context" + "github.com/ExocoreNetwork/exocore/utils" "github.com/ExocoreNetwork/exocore/x/slash/types" sdk "github.com/cosmos/cosmos-sdk/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ) // nolint: unused // Implementation of the msgServer (via proto) to be done. @@ -14,6 +16,12 @@ type msgServer struct { func (k Keeper) UpdateParams(ctx context.Context, params *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { c := sdk.UnwrapSDKContext(ctx) + if utils.IsMainnet(c.ChainID()) && k.authority != params.Authority { + return nil, govtypes.ErrInvalidSigner.Wrapf( + "invalid authority; expected %s, got %s", + k.authority, params.Authority, + ) + } err := k.SetParams(c, ¶ms.Params) if err != nil { return nil, err From ef48a6da7523a610a6af27b6d761c333c08f155b Mon Sep 17 00:00:00 2001 From: MaxMustermann2 <82761650+MaxMustermann2@users.noreply.github.com> Date: Fri, 18 Oct 2024 02:46:21 +0000 Subject: [PATCH 07/12] Revert "fix: TOW-02" This reverts commit d2a9d6531de6615a2ef88adeff7a51179b2132c4. Instead, the fix is carved out into another PR. --- x/avs/keeper/keeper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/avs/keeper/keeper.go b/x/avs/keeper/keeper.go index 0fd948f03..50265144d 100644 --- a/x/avs/keeper/keeper.go +++ b/x/avs/keeper/keeper.go @@ -133,7 +133,7 @@ func (k Keeper) UpdateAVSInfo(ctx sdk.Context, params *types.AVSRegisterOrDeregi // If avs DeRegisterAction check UnbondingPeriod // #nosec G115 - if epoch.CurrentEpoch-int64(avsInfo.GetInfo().StartingEpoch) <= int64(avsInfo.Info.AvsUnbondingPeriod) { + if epoch.CurrentEpoch-int64(avsInfo.GetInfo().StartingEpoch) > int64(avsInfo.Info.AvsUnbondingPeriod) { return errorsmod.Wrap(types.ErrUnbondingPeriod, fmt.Sprintf("not qualified to deregister %s", avsInfo)) } From e6468bd2b9f9e9b94f1f018c2ae355bc67a82f37 Mon Sep 17 00:00:00 2001 From: MaxMustermann2 <82761650+MaxMustermann2@users.noreply.github.com> Date: Fri, 18 Oct 2024 02:53:31 +0000 Subject: [PATCH 08/12] fix(test): fix the claim reward test --- precompiles/reward/reward_test.go | 4 +++- x/reward/keeper/claim_reward_test.go | 30 +++++++++++++++------------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/precompiles/reward/reward_test.go b/precompiles/reward/reward_test.go index 3512238b4..548195533 100644 --- a/precompiles/reward/reward_test.go +++ b/precompiles/reward/reward_test.go @@ -83,7 +83,9 @@ func (s *RewardPrecompileTestSuite) TestRunRewardThroughClientChain() { s.Require().NoError(err, "failed to pack input") return s.Address, input } - successRet, err := s.precompile.Methods[reward.MethodReward].Outputs.Pack(true, new(big.Int).Add(depositAmount, withdrawAmount)) + // successRet, err := s.precompile.Methods[reward.MethodReward].Outputs.Pack(true, new(big.Int).Add(depositAmount, withdrawAmount)) + // TODO: reward precompile is disabled, so it always errors and returns fail + successRet, err := s.precompile.Methods[reward.MethodReward].Outputs.Pack(false, new(big.Int)) s.Require().NoError(err) testcases := []struct { name string diff --git a/x/reward/keeper/claim_reward_test.go b/x/reward/keeper/claim_reward_test.go index a566e3412..04b7a9098 100644 --- a/x/reward/keeper/claim_reward_test.go +++ b/x/reward/keeper/claim_reward_test.go @@ -9,7 +9,7 @@ import ( ) func (suite *RewardTestSuite) TestClaimWithdrawRequest() { - assets, err := suite.App.AssetsKeeper.GetAllStakingAssetsInfo(suite.Ctx) + _, err := suite.App.AssetsKeeper.GetAllStakingAssetsInfo(suite.Ctx) suite.NoError(err) usdtAddress := common.HexToAddress("0xdAC17F958D2ee523a2206206994597C13D831ec7") @@ -24,24 +24,26 @@ func (suite *RewardTestSuite) TestClaimWithdrawRequest() { // test the case that the deposit asset hasn't registered event.AssetsAddress = usdcAddress[:] err = suite.App.RewardKeeper.RewardForWithdraw(suite.Ctx, event) - suite.ErrorContains(err, rewardtype.ErrRewardAssetNotExist.Error()) + // suite.ErrorContains(err, rewardtype.ErrRewardAssetNotExist.Error()) + suite.ErrorContains(err, rewardtype.ErrNotSupportYet.Error()) // test the normal case event.AssetsAddress = usdtAddress[:] err = suite.App.RewardKeeper.RewardForWithdraw(suite.Ctx, event) - suite.NoError(err) + // suite.NoError(err) + suite.ErrorContains(err, rewardtype.ErrNotSupportYet.Error()) // check state after reward - stakerID, assetID := types.GetStakerIDAndAssetID(event.ClientChainLzID, event.WithdrawRewardAddress, event.AssetsAddress) - info, err := suite.App.AssetsKeeper.GetStakerSpecifiedAssetInfo(suite.Ctx, stakerID, assetID) - suite.NoError(err) - suite.Equal(types.StakerAssetInfo{ - TotalDepositAmount: sdkmath.NewInt(10), - WithdrawableAmount: sdkmath.NewInt(10), - PendingUndelegationAmount: sdkmath.NewInt(0), - }, *info) + // stakerID, assetID := types.GetStakerIDAndAssetID(event.ClientChainLzID, event.WithdrawRewardAddress, event.AssetsAddress) + // info, err := suite.App.AssetsKeeper.GetStakerSpecifiedAssetInfo(suite.Ctx, stakerID, assetID) + // suite.NoError(err) + // suite.Equal(types.StakerAssetInfo{ + // TotalDepositAmount: sdkmath.NewInt(10), + // WithdrawableAmount: sdkmath.NewInt(10), + // PendingUndelegationAmount: sdkmath.NewInt(0), + // }, *info) - assetInfo, err := suite.App.AssetsKeeper.GetStakingAssetInfo(suite.Ctx, assetID) - suite.NoError(err) - suite.Equal(sdkmath.NewInt(10).Add(assets[0].StakingTotalAmount), assetInfo.StakingTotalAmount) + // assetInfo, err := suite.App.AssetsKeeper.GetStakingAssetInfo(suite.Ctx, assetID) + // suite.NoError(err) + // suite.Equal(sdkmath.NewInt(10).Add(assets[0].StakingTotalAmount), assetInfo.StakingTotalAmount) } From 2c059a66271471caa3272a08ebe3c4fa1728df52 Mon Sep 17 00:00:00 2001 From: MaxMustermann2 <82761650+MaxMustermann2@users.noreply.github.com> Date: Fri, 18 Oct 2024 06:04:49 +0000 Subject: [PATCH 09/12] fix: validate auth addr as bech32 --- x/assets/keeper/keeper.go | 6 ++++++ x/dogfood/keeper/keeper.go | 4 ++++ x/exomint/keeper/keeper.go | 4 ++++ x/oracle/keeper/keeper.go | 4 ++++ x/reward/keeper/keeper.go | 4 ++++ x/slash/keeper/keeper.go | 4 ++++ 6 files changed, 26 insertions(+) diff --git a/x/assets/keeper/keeper.go b/x/assets/keeper/keeper.go index 3f3398a75..eaddf0e73 100644 --- a/x/assets/keeper/keeper.go +++ b/x/assets/keeper/keeper.go @@ -1,6 +1,8 @@ package keeper import ( + "fmt" + assetstype "github.com/ExocoreNetwork/exocore/x/assets/types" "github.com/cosmos/cosmos-sdk/codec" storetypes "github.com/cosmos/cosmos-sdk/store/types" @@ -26,6 +28,10 @@ func NewKeeper( dk delegationKeeper, authority string, ) Keeper { + // ensure authority is a valid bech32 address + if _, err := sdk.AccAddressFromBech32(authority); err != nil { + panic(fmt.Sprintf("authority address %s is invalid: %s", authority, err)) + } return Keeper{ storeKey: storeKey, cdc: cdc, diff --git a/x/dogfood/keeper/keeper.go b/x/dogfood/keeper/keeper.go index f8a023fc6..7198320fa 100644 --- a/x/dogfood/keeper/keeper.go +++ b/x/dogfood/keeper/keeper.go @@ -118,6 +118,10 @@ func (k Keeper) mustValidateFields() { types.PanicIfNil(k.delegationKeeper, "delegationKeeper") types.PanicIfNil(k.restakingKeeper, "restakingKeeper") types.PanicIfNil(k.avsKeeper, "avsKeeper") + // ensure authority is a valid bech32 address + if _, err := sdk.AccAddressFromBech32(k.authority); err != nil { + panic(fmt.Sprintf("authority address %s is invalid: %s", k.authority, err)) + } } // Add the function to get detail information through the operatorKeeper within the dogfood diff --git a/x/exomint/keeper/keeper.go b/x/exomint/keeper/keeper.go index f2172b116..febec52aa 100644 --- a/x/exomint/keeper/keeper.go +++ b/x/exomint/keeper/keeper.go @@ -36,6 +36,10 @@ func NewKeeper( if addr := ak.GetModuleAddress(types.ModuleName); addr == nil { panic(fmt.Sprintf("the x/%s module account has not been set", types.ModuleName)) } + // ensure authority is a valid bech32 address + if _, err := sdk.AccAddressFromBech32(authority); err != nil { + panic(fmt.Sprintf("authority address %s is invalid: %s", authority, err)) + } return Keeper{ cdc: cdc, diff --git a/x/oracle/keeper/keeper.go b/x/oracle/keeper/keeper.go index c117ec4b3..8ec37b5f9 100644 --- a/x/oracle/keeper/keeper.go +++ b/x/oracle/keeper/keeper.go @@ -40,6 +40,10 @@ func NewKeeper( assetsKeeper types.AssetsKeeper, authority string, ) Keeper { + // ensure authority is a valid bech32 address + if _, err := sdk.AccAddressFromBech32(authority); err != nil { + panic(fmt.Sprintf("authority address %s is invalid: %s", authority, err)) + } // set KeyTable if it has not already been set if !ps.HasKeyTable() { ps = ps.WithKeyTable(types.ParamKeyTable()) diff --git a/x/reward/keeper/keeper.go b/x/reward/keeper/keeper.go index 931acc185..b91985ae4 100644 --- a/x/reward/keeper/keeper.go +++ b/x/reward/keeper/keeper.go @@ -41,6 +41,10 @@ func NewKeeper( avsKeeper avsKeeper.Keeper, authority string, ) Keeper { + // ensure authority is a valid bech32 address + if _, err := sdk.AccAddressFromBech32(authority); err != nil { + panic(fmt.Sprintf("authority address %s is invalid: %s", authority, err)) + } return Keeper{ cdc: cdc, storeKey: storeKey, diff --git a/x/slash/keeper/keeper.go b/x/slash/keeper/keeper.go index 7c6a1b2d5..78b37dd96 100644 --- a/x/slash/keeper/keeper.go +++ b/x/slash/keeper/keeper.go @@ -31,6 +31,10 @@ func NewKeeper( assetsKeeper keeper.Keeper, authority string, ) Keeper { + // ensure authority is a valid bech32 address + if _, err := sdk.AccAddressFromBech32(authority); err != nil { + panic(fmt.Sprintf("authority address %s is invalid: %s", authority, err)) + } return Keeper{ cdc: cdc, storeKey: storeKey, From f29c75e150f03085d640a7387c94f006cd505714 Mon Sep 17 00:00:00 2001 From: MaxMustermann2 <82761650+MaxMustermann2@users.noreply.github.com> Date: Fri, 18 Oct 2024 06:05:14 +0000 Subject: [PATCH 10/12] fix(feedistr): add authority validation --- x/feedistribution/keeper/msg_update_params.go | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/x/feedistribution/keeper/msg_update_params.go b/x/feedistribution/keeper/msg_update_params.go index 08edf1c86..c6f37dd8b 100644 --- a/x/feedistribution/keeper/msg_update_params.go +++ b/x/feedistribution/keeper/msg_update_params.go @@ -6,20 +6,24 @@ import ( errorsmod "cosmossdk.io/errors" - sdk "github.com/cosmos/cosmos-sdk/types" - + "github.com/ExocoreNetwork/exocore/utils" "github.com/ExocoreNetwork/exocore/x/feedistribution/types" + sdk "github.com/cosmos/cosmos-sdk/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ) func (k msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { - // For test purpose, skip for now - // if k.GetAuthority() != req.Authority { - // return nil, errorsmod.Wrapf(types.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), req.Authority) - // } - ctx := sdk.UnwrapSDKContext(goCtx) - epochIdentifier := req.Params.EpochIdentifier + if utils.IsMainnet(ctx.ChainID()) && k.authority != req.Authority { + return nil, govtypes.ErrInvalidSigner.Wrapf( + "invalid authority; expected %s, got %s", + k.authority, req.Authority, + ) + } + + // validate the existence of the epoch (stateful) + epochIdentifier := req.Params.EpochIdentifier _, found := k.epochsKeeper.GetEpochInfo(ctx, epochIdentifier) if !found { return &types.MsgUpdateParamsResponse{}, errorsmod.Wrap(types.ErrEpochNotFound, fmt.Sprintf("epoch info not found %s", epochIdentifier)) From daff41ebe9e0d5757619f678ed76737741d16f48 Mon Sep 17 00:00:00 2001 From: MaxMustermann2 <82761650+MaxMustermann2@users.noreply.github.com> Date: Fri, 18 Oct 2024 06:43:23 +0000 Subject: [PATCH 11/12] fix: add logs for arbitrary UpdateParams --- x/assets/keeper/msg_server.go | 5 +++++ x/dogfood/keeper/msg_server.go | 5 +++++ x/exomint/keeper/msg_server.go | 5 +++++ x/feedistribution/keeper/msg_update_params.go | 6 ++++++ x/oracle/keeper/msg_server_update_params.go | 7 +++++++ x/reward/keeper/msg_server.go | 7 +++++++ x/slash/keeper/msg_server.go | 12 +++++++----- 7 files changed, 42 insertions(+), 5 deletions(-) diff --git a/x/assets/keeper/msg_server.go b/x/assets/keeper/msg_server.go index 05711d08e..a1593acd4 100644 --- a/x/assets/keeper/msg_server.go +++ b/x/assets/keeper/msg_server.go @@ -20,6 +20,11 @@ func (k Keeper) UpdateParams(ctx context.Context, params *assetstype.MsgUpdatePa k.authority, params.Authority, ) } + c.Logger().Info( + "UpdateParams request from arbitrary address", + "authority", k.authority, + "params.AUthority", params.Authority, + ) err := k.SetParams(c, ¶ms.Params) if err != nil { return nil, err diff --git a/x/dogfood/keeper/msg_server.go b/x/dogfood/keeper/msg_server.go index 67e2d95da..bf8f11d3c 100644 --- a/x/dogfood/keeper/msg_server.go +++ b/x/dogfood/keeper/msg_server.go @@ -38,6 +38,11 @@ func (k Keeper) UpdateParams( k.authority, msg.Authority, ) } + k.Logger(c).Info( + "UpdateParams request from arbitrary address", + "authority", k.authority, + "params.Authority", msg.Authority, + ) prevParams := k.GetDogfoodParams(c) nextParams := msg.Params logger := k.Logger(c) diff --git a/x/exomint/keeper/msg_server.go b/x/exomint/keeper/msg_server.go index 8f49baee1..1fbaa9d15 100644 --- a/x/exomint/keeper/msg_server.go +++ b/x/exomint/keeper/msg_server.go @@ -34,6 +34,11 @@ func (k Keeper) UpdateParams( k.authority, msg.Authority, ) } + k.Logger(c).Info( + "UpdateParams request from arbitrary address", + "authority", k.authority, + "params.Authority", msg.Authority, + ) prevParams := k.GetParams(c) nextParams := msg.Params // stateless validations diff --git a/x/feedistribution/keeper/msg_update_params.go b/x/feedistribution/keeper/msg_update_params.go index c6f37dd8b..b3af44b4d 100644 --- a/x/feedistribution/keeper/msg_update_params.go +++ b/x/feedistribution/keeper/msg_update_params.go @@ -22,6 +22,12 @@ func (k msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParam ) } + k.Logger().Info( + "UpdateParams request from arbitrary address", + "authority", k.authority, + "params.Authority", req.Authority, + ) + // validate the existence of the epoch (stateful) epochIdentifier := req.Params.EpochIdentifier _, found := k.epochsKeeper.GetEpochInfo(ctx, epochIdentifier) diff --git a/x/oracle/keeper/msg_server_update_params.go b/x/oracle/keeper/msg_server_update_params.go index 279cb668a..747ebb0a3 100644 --- a/x/oracle/keeper/msg_server_update_params.go +++ b/x/oracle/keeper/msg_server_update_params.go @@ -19,6 +19,13 @@ func (ms msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdatePara ms.Keeper.authority, msg.Authority, ) } + + ms.Keeper.Logger(ctx).Info( + "UpdateParams request from arbitrary address", + "authority", ms.Keeper.authority, + "params.AUthority", msg.Authority, + ) + p := ms.GetParams(ctx) var err error defer func() { diff --git a/x/reward/keeper/msg_server.go b/x/reward/keeper/msg_server.go index 0851b876a..8e78414d1 100644 --- a/x/reward/keeper/msg_server.go +++ b/x/reward/keeper/msg_server.go @@ -21,6 +21,13 @@ func (k Keeper) UpdateParams(ctx context.Context, params *types.MsgUpdateParams) k.authority, params.Authority, ) } + + k.Logger(c).Info( + "UpdateParams request from arbitrary address", + "authority", k.authority, + "params.AUthority", params.Authority, + ) + err := k.SetParams(c, ¶ms.Params) if err != nil { return nil, err diff --git a/x/slash/keeper/msg_server.go b/x/slash/keeper/msg_server.go index d5156b236..77329c948 100644 --- a/x/slash/keeper/msg_server.go +++ b/x/slash/keeper/msg_server.go @@ -9,11 +9,6 @@ import ( govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" ) -// nolint: unused // Implementation of the msgServer (via proto) to be done. -type msgServer struct { - Keeper -} - func (k Keeper) UpdateParams(ctx context.Context, params *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { c := sdk.UnwrapSDKContext(ctx) if utils.IsMainnet(c.ChainID()) && k.authority != params.Authority { @@ -22,6 +17,13 @@ func (k Keeper) UpdateParams(ctx context.Context, params *types.MsgUpdateParams) k.authority, params.Authority, ) } + + k.Logger(c).Info( + "UpdateParams request from arbitrary address", + "authority", k.authority, + "params.AUthority", params.Authority, + ) + err := k.SetParams(c, ¶ms.Params) if err != nil { return nil, err From 6a8cda6c74c8c4387750dc7e97c1a060098e36ae Mon Sep 17 00:00:00 2001 From: MaxMustermann2 <82761650+MaxMustermann2@users.noreply.github.com> Date: Fri, 18 Oct 2024 07:04:41 +0000 Subject: [PATCH 12/12] fix(doc): update log --- x/assets/keeper/msg_server.go | 2 +- x/dogfood/keeper/msg_server.go | 2 +- x/exomint/keeper/msg_server.go | 2 +- x/feedistribution/keeper/msg_update_params.go | 2 +- x/oracle/keeper/msg_server_update_params.go | 2 +- x/reward/keeper/msg_server.go | 2 +- x/slash/keeper/msg_server.go | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/x/assets/keeper/msg_server.go b/x/assets/keeper/msg_server.go index a1593acd4..d72f511ae 100644 --- a/x/assets/keeper/msg_server.go +++ b/x/assets/keeper/msg_server.go @@ -21,7 +21,7 @@ func (k Keeper) UpdateParams(ctx context.Context, params *assetstype.MsgUpdatePa ) } c.Logger().Info( - "UpdateParams request from arbitrary address", + "UpdateParams request", "authority", k.authority, "params.AUthority", params.Authority, ) diff --git a/x/dogfood/keeper/msg_server.go b/x/dogfood/keeper/msg_server.go index bf8f11d3c..63a810670 100644 --- a/x/dogfood/keeper/msg_server.go +++ b/x/dogfood/keeper/msg_server.go @@ -39,7 +39,7 @@ func (k Keeper) UpdateParams( ) } k.Logger(c).Info( - "UpdateParams request from arbitrary address", + "UpdateParams request", "authority", k.authority, "params.Authority", msg.Authority, ) diff --git a/x/exomint/keeper/msg_server.go b/x/exomint/keeper/msg_server.go index 1fbaa9d15..daadd4957 100644 --- a/x/exomint/keeper/msg_server.go +++ b/x/exomint/keeper/msg_server.go @@ -35,7 +35,7 @@ func (k Keeper) UpdateParams( ) } k.Logger(c).Info( - "UpdateParams request from arbitrary address", + "UpdateParams request", "authority", k.authority, "params.Authority", msg.Authority, ) diff --git a/x/feedistribution/keeper/msg_update_params.go b/x/feedistribution/keeper/msg_update_params.go index b3af44b4d..c9c493d92 100644 --- a/x/feedistribution/keeper/msg_update_params.go +++ b/x/feedistribution/keeper/msg_update_params.go @@ -23,7 +23,7 @@ func (k msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParam } k.Logger().Info( - "UpdateParams request from arbitrary address", + "UpdateParams request", "authority", k.authority, "params.Authority", req.Authority, ) diff --git a/x/oracle/keeper/msg_server_update_params.go b/x/oracle/keeper/msg_server_update_params.go index 747ebb0a3..400dd7de8 100644 --- a/x/oracle/keeper/msg_server_update_params.go +++ b/x/oracle/keeper/msg_server_update_params.go @@ -21,7 +21,7 @@ func (ms msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdatePara } ms.Keeper.Logger(ctx).Info( - "UpdateParams request from arbitrary address", + "UpdateParams request", "authority", ms.Keeper.authority, "params.AUthority", msg.Authority, ) diff --git a/x/reward/keeper/msg_server.go b/x/reward/keeper/msg_server.go index 8e78414d1..8f14b58df 100644 --- a/x/reward/keeper/msg_server.go +++ b/x/reward/keeper/msg_server.go @@ -23,7 +23,7 @@ func (k Keeper) UpdateParams(ctx context.Context, params *types.MsgUpdateParams) } k.Logger(c).Info( - "UpdateParams request from arbitrary address", + "UpdateParams request", "authority", k.authority, "params.AUthority", params.Authority, ) diff --git a/x/slash/keeper/msg_server.go b/x/slash/keeper/msg_server.go index 77329c948..9eb4c862a 100644 --- a/x/slash/keeper/msg_server.go +++ b/x/slash/keeper/msg_server.go @@ -19,7 +19,7 @@ func (k Keeper) UpdateParams(ctx context.Context, params *types.MsgUpdateParams) } k.Logger(c).Info( - "UpdateParams request from arbitrary address", + "UpdateParams request", "authority", k.authority, "params.AUthority", params.Authority, )