Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 21 additions & 48 deletions app/ante.go
Original file line number Diff line number Diff line change
@@ -1,58 +1,31 @@
package app

import (
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec"
errorsmod "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
"github.com/evmos/evmos/v20/app/ante"
ethante "github.com/evmos/evmos/v20/app/ante/evm"
etherminttypes "github.com/evmos/evmos/v20/types"
poaante "github.com/xrplevm/node/v9/x/poa/ante"
errortypes "github.com/cosmos/cosmos-sdk/types/errors"
evmante "github.com/cosmos/evm/evmd/ante"
)

type AnteHandlerOptions ante.HandlerOptions

func NewAnteHandlerOptionsFromApp(app *App, txConfig client.TxConfig, maxGasWanted uint64) *AnteHandlerOptions {
return &AnteHandlerOptions{
Cdc: app.appCodec,
AccountKeeper: app.AccountKeeper,
BankKeeper: app.BankKeeper,
ExtensionOptionChecker: etherminttypes.HasDynamicFeeExtensionOption,
EvmKeeper: app.EvmKeeper,
FeegrantKeeper: app.FeeGrantKeeper,
IBCKeeper: app.IBCKeeper,
FeeMarketKeeper: app.FeeMarketKeeper,
SignModeHandler: txConfig.SignModeHandler(),
SigGasConsumer: ante.SigVerificationGasConsumer,
MaxTxGasWanted: maxGasWanted,
TxFeeChecker: ethante.NewDynamicFeeChecker(app.EvmKeeper),
StakingKeeper: app.StakingKeeper,
DistributionKeeper: app.DistrKeeper,
ExtraDecorator: poaante.NewPoaDecorator(),
AuthzDisabledMsgTypes: []string{
sdk.MsgTypeURL(&stakingtypes.MsgUndelegate{}),
sdk.MsgTypeURL(&stakingtypes.MsgBeginRedelegate{}),
sdk.MsgTypeURL(&stakingtypes.MsgCancelUnbondingDelegation{}),
sdk.MsgTypeURL(&stakingtypes.MsgDelegate{}),
},
}
type HandlerOptions struct {
evmante.HandlerOptions
StakingKeeper StakingKeeper
DistributionKeeper DistributionKeeper
ExtraDecorator sdk.AnteDecorator
AuthzDisabledMsgTypes []string
}

func (aa *AnteHandlerOptions) Validate() error {
return (*ante.HandlerOptions)(aa).Validate()
}

func (aa *AnteHandlerOptions) Options() ante.HandlerOptions {
return ante.HandlerOptions(*aa)
}

func (aa *AnteHandlerOptions) WithCodec(cdc codec.BinaryCodec) *AnteHandlerOptions {
aa.Cdc = cdc
return aa
// Validate checks if the keepers are defined
func (options *HandlerOptions) Validate() error {
if options.StakingKeeper == nil {
return errorsmod.Wrap(errortypes.ErrLogic, "staking keeper is required for AnteHandler")
}
if options.DistributionKeeper == nil {
return errorsmod.Wrap(errortypes.ErrLogic, "distribution keeper is required for AnteHandler")
}
return options.HandlerOptions.Validate()
}

func (aa *AnteHandlerOptions) WithMaxTxGasWanted(maxTxGasWanted uint64) *AnteHandlerOptions {
aa.MaxTxGasWanted = maxTxGasWanted
return aa
}
func NewAnteHandler(options HandlerOptions) sdk.AnteHandler {
return evmante.NewAnteHandler(options.HandlerOptions)
}
29 changes: 29 additions & 0 deletions app/ante_interfaces.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package app

import (
"context"

addresscodec "cosmossdk.io/core/address"
sdk "github.com/cosmos/cosmos-sdk/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
)

// BankKeeper defines the exposed interface for using functionality of the bank keeper
// in the context of the AnteHandler utils package.
type BankKeeper interface {
GetBalance(ctx context.Context, addr sdk.AccAddress, denom string) sdk.Coin
}

// DistributionKeeper defines the exposed interface for using functionality of the distribution
// keeper in the context of the AnteHandler utils package.
type DistributionKeeper interface {
WithdrawDelegationRewards(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (sdk.Coins, error)
}

// StakingKeeper defines the exposed interface for using functionality of the staking keeper
// in the context of the AnteHandler utils package.
type StakingKeeper interface {
BondDenom(ctx context.Context) (string, error)
ValidatorAddressCodec() addresscodec.Codec
IterateDelegations(ctx context.Context, delegator sdk.AccAddress, fn func(index int64, delegation stakingtypes.DelegationI) (stop bool)) error
}
119 changes: 76 additions & 43 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,20 @@ import (
"cosmossdk.io/client/v2/autocli"
"cosmossdk.io/core/appmodule"

"cosmossdk.io/math"
"github.com/cosmos/cosmos-sdk/client/grpc/cmtservice"
"github.com/cosmos/cosmos-sdk/types/msgservice"
distr "github.com/cosmos/cosmos-sdk/x/distribution"
distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
paramproposal "github.com/cosmos/cosmos-sdk/x/params/types/proposal"
sdkstaking "github.com/cosmos/cosmos-sdk/x/staking"
"github.com/cosmos/evm/ante"
ethante "github.com/cosmos/evm/ante/evm"
"github.com/cosmos/evm/encoding"
evmante "github.com/cosmos/evm/evmd/ante"
etherminttypes "github.com/cosmos/evm/types"
cosmosevmutils "github.com/cosmos/evm/utils"
"github.com/cosmos/gogoproto/proto"
ratelimit "github.com/cosmos/ibc-apps/modules/rate-limiting/v8"
ratelimittypes "github.com/cosmos/ibc-apps/modules/rate-limiting/v8/types"
Expand All @@ -24,16 +33,11 @@ import (
ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types"
ibctm "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint"
ibctesting "github.com/cosmos/ibc-go/v8/testing"
"github.com/evmos/evmos/v20/encoding"
"github.com/evmos/evmos/v20/utils"
"github.com/evmos/evmos/v20/x/evm/core/vm"

"cosmossdk.io/math"
distr "github.com/cosmos/cosmos-sdk/x/distribution"
distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
"github.com/ethereum/go-ethereum/core/vm"
"github.com/spf13/cast"

vmmod "github.com/cosmos/evm/x/vm"

autocliv1 "cosmossdk.io/api/cosmos/autocli/v1"
reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1"
"github.com/cosmos/cosmos-sdk/runtime"
Expand Down Expand Up @@ -101,10 +105,10 @@ import (
slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper"
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
evmostypes "github.com/cosmos/evm/types"
"github.com/cosmos/ibc-go/modules/capability"
capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper"
capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types"
evmostypes "github.com/evmos/evmos/v20/types"

ratelimitkeeper "github.com/cosmos/ibc-apps/modules/rate-limiting/v8/keeper"
ica "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts"
Expand All @@ -121,31 +125,29 @@ import (
ibctestingtypes "github.com/cosmos/ibc-go/v8/testing/types"

"github.com/xrplevm/node/v9/docs"
poaante "github.com/xrplevm/node/v9/x/poa/ante"
poakeeper "github.com/xrplevm/node/v9/x/poa/keeper"
poatypes "github.com/xrplevm/node/v9/x/poa/types"

// "github.com/xrplevm/node/v9/app/ante"
"github.com/evmos/evmos/v20/app/ante"
srvflags "github.com/evmos/evmos/v20/server/flags"
srvflags "github.com/cosmos/evm/server/flags"

"github.com/evmos/evmos/v20/x/erc20"
erc20keeper "github.com/evmos/evmos/v20/x/erc20/keeper"
erc20types "github.com/evmos/evmos/v20/x/erc20/types"
"github.com/evmos/evmos/v20/x/evm"
evmkeeper "github.com/evmos/evmos/v20/x/evm/keeper"
evmtypes "github.com/evmos/evmos/v20/x/evm/types"
"github.com/evmos/evmos/v20/x/feemarket"
feemarketkeeper "github.com/evmos/evmos/v20/x/feemarket/keeper"
feemarkettypes "github.com/evmos/evmos/v20/x/feemarket/types"
"github.com/cosmos/evm/x/erc20"
erc20keeper "github.com/cosmos/evm/x/erc20/keeper"
erc20types "github.com/cosmos/evm/x/erc20/types"
"github.com/cosmos/evm/x/feemarket"
feemarketkeeper "github.com/cosmos/evm/x/feemarket/keeper"
feemarkettypes "github.com/cosmos/evm/x/feemarket/types"
evmkeeper "github.com/cosmos/evm/x/vm/keeper"
evmtypes "github.com/cosmos/evm/x/vm/types"

// Overriders
"github.com/evmos/evmos/v20/x/ibc/transfer"
ibctransferkeeper "github.com/evmos/evmos/v20/x/ibc/transfer/keeper"
"github.com/evmos/evmos/v20/x/staking"
stakingkeeper "github.com/evmos/evmos/v20/x/staking/keeper"
"github.com/cosmos/cosmos-sdk/x/staking"
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
"github.com/cosmos/evm/x/ibc/transfer"
ibctransferkeeper "github.com/cosmos/evm/x/ibc/transfer/keeper"

// Force load evmos app for variable modification
_ "github.com/evmos/evmos/v20/app"
_ "github.com/cosmos/evm/evmd"
// Force-load the tracer engines to trigger registration due to Go-Ethereum v1.10.15 changes
_ "github.com/ethereum/go-ethereum/eth/tracers/js"
_ "github.com/ethereum/go-ethereum/eth/tracers/native"
Expand All @@ -159,6 +161,8 @@ const (
DisplayDenom = "xrp"
// BaseDenom defines to the default denomination used in EVM
BaseDenom = "axrp"
// BaseDenomUnit defines the unit of the base denomination
BaseDenomUnit = 18
)

var (
Expand Down Expand Up @@ -271,11 +275,12 @@ func New(
loadLatest bool,
skipUpgradeHeights map[int64]bool,
homePath string,
evmChainID uint64,
invCheckPeriod uint,
appOpts servertypes.AppOptions,
baseAppOptions ...func(*baseapp.BaseApp),
) *App {
encodingConfig := encoding.MakeConfig()
encodingConfig := encoding.MakeConfig(evmChainID)
appCodec := encodingConfig.Codec
cdc := encodingConfig.Amino
interfaceRegistry := encodingConfig.InterfaceRegistry
Expand Down Expand Up @@ -349,6 +354,7 @@ func New(
app.AccountKeeper = authkeeper.NewAccountKeeper(
appCodec,
runtime.NewKVStoreService(keys[authtypes.StoreKey]),
// TODO: Update when replacing with forked cosmos/evm version is installed
evmostypes.ProtoAccount,
maccPerms,
authcodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()),
Expand Down Expand Up @@ -464,32 +470,30 @@ func New(
// Ethermint keepers

// Feemarket Keeper
feeMarketSs := app.GetSubspace(feemarkettypes.ModuleName)
app.FeeMarketKeeper = feemarketkeeper.NewKeeper(
appCodec,
authtypes.NewModuleAddress(govtypes.ModuleName),
keys[feemarkettypes.StoreKey],
tkeys[feemarkettypes.TransientKey],
feeMarketSs,
)
// EVM Keeper
tracer := cast.ToString(appOpts.Get(srvflags.EVMTracer))
evmSs := app.GetSubspace(evmtypes.ModuleName)
app.EvmKeeper = evmkeeper.NewKeeper(
appCodec, keys[evmtypes.StoreKey], tkeys[evmtypes.TransientKey],
appCodec, keys[evmtypes.StoreKey], tkeys[evmtypes.TransientKey], keys,
authtypes.NewModuleAddress(govtypes.ModuleName),
app.AccountKeeper, app.BankKeeper, app.StakingKeeper, app.FeeMarketKeeper,
&app.ConsensusParamsKeeper,
// FIX: Temporary solution to solve keeper interdependency while new precompile module
// is being developed.
&app.Erc20Keeper,
tracer, evmSs,
tracer,
)

// ERC20 Keeper
app.Erc20Keeper = erc20keeper.NewKeeper(
keys[erc20types.StoreKey], appCodec, authtypes.NewModuleAddress(govtypes.ModuleName),
app.AccountKeeper, app.BankKeeper, app.EvmKeeper, app.StakingKeeper,
app.AuthzKeeper, &app.TransferKeeper,
&app.TransferKeeper,
)

// Create IBC Keeper
Expand All @@ -512,6 +516,7 @@ func New(
app.IBCKeeper.ChannelKeeper, // ICS4Wrapper
)
// Create Transfer Keepers
// TODO: Update when migrating to v10
app.TransferKeeper = ibctransferkeeper.NewKeeper(
appCodec,
keys[ibctransfertypes.StoreKey],
Expand All @@ -523,7 +528,6 @@ func New(
app.BankKeeper,
scopedTransferKeeper,
app.Erc20Keeper, // Add ERC20 Keeper for ERC20 transfers
authAddress,
)
transferModule := transfer.NewAppModule(app.TransferKeeper)
// Create the app.ICAHostKeeper
Expand Down Expand Up @@ -588,7 +592,9 @@ func New(
app.AuthzKeeper,
app.TransferKeeper,
app.IBCKeeper.ChannelKeeper,
app.EvmKeeper,
app.GovKeeper,
app.AppCodec(),
),
)

Expand Down Expand Up @@ -616,6 +622,7 @@ func New(
// create IBC module from top to bottom of stack
var transferStack ibcporttypes.IBCModule

// TODO: Update when migrating to v10
transferStack = transfer.NewIBCModule(app.TransferKeeper)
transferStack = ratelimit.NewIBCMiddleware(app.RateLimitKeeper, transferStack)
transferStack = erc20.NewIBCMiddleware(app.Erc20Keeper, transferStack)
Expand Down Expand Up @@ -669,9 +676,9 @@ func New(
ratelimit.NewAppModule(appCodec, app.RateLimitKeeper),

// Ethermint app modules
feemarket.NewAppModule(app.FeeMarketKeeper, feeMarketSs),
evm.NewAppModule(app.EvmKeeper, app.AccountKeeper, evmSs),
erc20.NewAppModule(app.Erc20Keeper, app.AccountKeeper, app.GetSubspace(erc20types.ModuleName)),
feemarket.NewAppModule(app.FeeMarketKeeper),
vmmod.NewAppModule(app.EvmKeeper, app.AccountKeeper, app.AccountKeeper.AddressCodec()),
erc20.NewAppModule(app.Erc20Keeper, app.AccountKeeper),

// exrp app modules
poa.NewAppModule(appCodec, app.PoaKeeper, app.BankKeeper, app.StakingKeeper, app.AccountKeeper, app.interfaceRegistry),
Expand All @@ -685,12 +692,13 @@ func New(
app.mm,
map[string]module.AppModuleBasic{
genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator),
stakingtypes.ModuleName: staking.AppModuleBasic{AppModuleBasic: &sdkstaking.AppModuleBasic{}},
stakingtypes.ModuleName: staking.AppModuleBasic{},
govtypes.ModuleName: gov.NewAppModuleBasic(
[]govclient.ProposalHandler{
paramsclient.ProposalHandler,
},
),
// TODO: Update when migrating to v10
ibctransfertypes.ModuleName: transfer.AppModuleBasic{AppModuleBasic: &ibctransfer.AppModuleBasic{}},
},
)
Expand Down Expand Up @@ -840,13 +848,38 @@ func New(

// use Ethermint's custom AnteHandler
func (app *App) setAnteHandler(txConfig client.TxConfig, maxGasWanted uint64) {
handlerOpts := NewAnteHandlerOptionsFromApp(app, txConfig, maxGasWanted)
handlerOpts := &HandlerOptions{
HandlerOptions: evmante.HandlerOptions{
Cdc: app.appCodec,
AccountKeeper: app.AccountKeeper,
BankKeeper: app.BankKeeper,
ExtensionOptionChecker: etherminttypes.HasDynamicFeeExtensionOption,
EvmKeeper: app.EvmKeeper,
FeegrantKeeper: app.FeeGrantKeeper,
// TODO: Update when migrating to v10
IBCKeeper: app.IBCKeeper,
FeeMarketKeeper: app.FeeMarketKeeper,
SignModeHandler: txConfig.SignModeHandler(),
SigGasConsumer: ante.SigVerificationGasConsumer,
MaxTxGasWanted: maxGasWanted,
TxFeeChecker: ethante.NewDynamicFeeChecker(app.FeeMarketKeeper),
},
StakingKeeper: app.StakingKeeper,
DistributionKeeper: app.DistrKeeper,
ExtraDecorator: poaante.NewPoaDecorator(),
AuthzDisabledMsgTypes: []string{
sdk.MsgTypeURL(&stakingtypes.MsgUndelegate{}),
sdk.MsgTypeURL(&stakingtypes.MsgBeginRedelegate{}),
sdk.MsgTypeURL(&stakingtypes.MsgCancelUnbondingDelegation{}),
sdk.MsgTypeURL(&stakingtypes.MsgDelegate{}),
},
}

if err := handlerOpts.Validate(); err != nil {
panic(err)
}

app.SetAnteHandler(ante.NewAnteHandler(handlerOpts.Options()))
app.SetAnteHandler(NewAnteHandler(*handlerOpts))
}

func (app *App) setPostHandler() {
Expand Down Expand Up @@ -920,12 +953,12 @@ func (app *App) BlockedModuleAccountAddrs() map[string]bool {
}

blockedPrecompilesHex := evmtypes.AvailableStaticPrecompiles
for _, addr := range vm.PrecompiledAddressesBerlin {
for _, addr := range vm.PrecompiledAddressesPrague {
blockedPrecompilesHex = append(blockedPrecompilesHex, addr.Hex())
}

for _, precompile := range blockedPrecompilesHex {
blockedAddrs[utils.EthHexToSDKAddr(precompile).String()] = true
blockedAddrs[cosmosevmutils.Bech32StringFromHexAddress(precompile)] = true
}

return blockedAddrs
Expand Down
Loading
Loading