Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into feat/consensus-messages
Browse files Browse the repository at this point in the history
  • Loading branch information
Faulty Tolly committed Oct 20, 2024
2 parents 3a4370f + cfa9e08 commit e74854f
Show file tree
Hide file tree
Showing 8 changed files with 164 additions and 69 deletions.
12 changes: 0 additions & 12 deletions .github/workflows/e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,6 @@ name: E2E Tests

on:
workflow_dispatch:
pull_request:
types:
# trigger workflow if PR is opened directly as R4R.
- opened
# trigger workflow if changes are pushed to the branch.
- synchronize
# trigger workflow if PR is marked ready for review.
- ready_for_review
paths-ignore:
- 'docs/**'
- '**.md'
- 'LICENSE'

permissions:
contents: read
Expand Down
10 changes: 0 additions & 10 deletions .github/workflows/e2e_test_upgrade.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,6 @@ name: E2E Tests Upgrade

on:
workflow_dispatch:
pull_request:
types:
# trigger workflow if PR is opened directly as R4R.
- opened
# trigger workflow if changes are pushed to the branch.
- synchronize
# trigger workflow if PR is marked ready for review.
- ready_for_review
paths:
- 'app/upgrades/**'

permissions:
contents: read
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ Modify `dymint.toml` in the chain directory (`~/.rollapp/config`)

```shell
dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "settlement_layer" -v "dymension"
dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "node_address" -v "$HUB_RPC_URL"
dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "settlement_node_address" -v "$HUB_RPC_URL"
dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "rollapp_id" -v "$ROLLAPP_CHAIN_ID"
dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "max_idle_time" -v "2s"
dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "max_proof_time" -v "1s"
Expand Down
136 changes: 112 additions & 24 deletions app/ante.go
Original file line number Diff line number Diff line change
@@ -1,19 +1,26 @@
package app

import (
"fmt"
"runtime/debug"

errorsmod "cosmossdk.io/errors"
wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper"
wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
storetypes "github.com/cosmos/cosmos-sdk/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
conntypes "github.com/cosmos/ibc-go/v6/modules/core/03-connection/types"
ibcante "github.com/cosmos/ibc-go/v6/modules/core/ante"
ibckeeper "github.com/cosmos/ibc-go/v6/modules/core/keeper"
cosmosante "github.com/evmos/evmos/v12/app/ante/cosmos"
evmostypes "github.com/evmos/evmos/v12/types"
evmtypes "github.com/evmos/evmos/v12/x/evm/types"
tmlog "github.com/tendermint/tendermint/libs/log"

"github.com/dymensionxyz/dymension-rdk/x/gasless"
gaslesskeeper "github.com/dymensionxyz/dymension-rdk/x/gasless/keeper"
cosmosante "github.com/evmos/evmos/v12/app/ante/cosmos"
)

// HandlerOptions are the options required for constructing a default SDK AnteHandler.
Expand All @@ -26,13 +33,74 @@ type HandlerOptions struct {
GaslessKeeper gaslesskeeper.Keeper
}

func GetAnteDecorators(options HandlerOptions) []sdk.AnteDecorator {
// NewAnteHandler returns an AnteHandler that checks and increments sequence
// numbers, checks signatures & account numbers, and deducts fees from the first
// signer.
func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
if err := options.validate(); err != nil {
return nil, fmt.Errorf("options validate: %w", err)
}

return func(
ctx sdk.Context, tx sdk.Tx, sim bool,
) (newCtx sdk.Context, err error) {
var anteHandler sdk.AnteHandler

defer Recover(ctx.Logger(), &err)

txWithExtensions, ok := tx.(ante.HasExtensionOptionsTx)
if ok {
opts := txWithExtensions.GetExtensionOptions()
if len(opts) > 0 {
switch typeURL := opts[0].GetTypeUrl(); typeURL {
case "/ethermint.types.v1.ExtensionOptionsWeb3Tx":
// Deprecated: Handle as normal Cosmos SDK tx, except signature is checked for Legacy EIP712 representation
options.ExtensionOptionChecker = func(c *codectypes.Any) bool {

Check failure on line 58 in app/ante.go

View workflow job for this annotation

GitHub Actions / golangci-lint

options.ExtensionOptionChecker undefined (type HandlerOptions has no field or method ExtensionOptionChecker) (typecheck)
_, ok := c.GetCachedValue().(*evmostypes.ExtensionOptionsWeb3Tx)
return ok
}
anteHandler = cosmosHandler(
options,
// nolint:staticcheck
cosmosante.NewLegacyEip712SigVerificationDecorator(options.AccountKeeper.(evmtypes.AccountKeeper), options.SignModeHandler), // Use old signature verification: uses EIP instead of the cosmos signature validator

Check failure on line 65 in app/ante.go

View workflow job for this annotation

GitHub Actions / golangci-lint

options.AccountKeeper undefined (type HandlerOptions has no field or method AccountKeeper) (typecheck)
)
default:
return ctx, errorsmod.Wrapf(
sdkerrors.ErrUnknownExtensionOptions,
"rejecting tx with unsupported extension option: %s", typeURL,
)
}

return anteHandler(ctx, tx, sim)
}
}

// handle as totally normal Cosmos SDK tx
switch tx.(type) {
case sdk.Tx:
// we reject any extension
anteHandler = cosmosHandler(
options,
ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler), // Use modern signature verification
)
default:
return ctx, errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "invalid transaction type: %T", tx)
}

return anteHandler(ctx, tx, sim)
}, nil
}

func cosmosHandler(options HandlerOptions, sigChecker sdk.AnteDecorator) sdk.AnteHandler {
sigGasConsumer := options.SigGasConsumer

Check failure on line 95 in app/ante.go

View workflow job for this annotation

GitHub Actions / golangci-lint

options.SigGasConsumer undefined (type HandlerOptions has no field or method SigGasConsumer) (typecheck)
if sigGasConsumer == nil {
sigGasConsumer = ante.DefaultSigVerificationGasConsumer
}

anteDecorators := []sdk.AnteDecorator{
// only override the modern sig checker, and preserve the legacy one
if _, ok := sigChecker.(ante.SigVerificationDecorator); ok {
sigChecker = NewSigCheckDecorator(options.AccountKeeper.(accountKeeper), options.SignModeHandler)

Check failure on line 101 in app/ante.go

View workflow job for this annotation

GitHub Actions / golangci-lint

options.AccountKeeper undefined (type HandlerOptions has no field or method AccountKeeper) (typecheck)
}
return sdk.ChainAnteDecorators(
ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first
cosmosante.NewRejectMessagesDecorator(
[]string{
Expand All @@ -53,35 +121,55 @@ func GetAnteDecorators(options HandlerOptions) []sdk.AnteDecorator {
ante.NewSetPubKeyDecorator(options.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators
ante.NewValidateSigCountDecorator(options.AccountKeeper),
ante.NewSigGasConsumeDecorator(options.AccountKeeper, sigGasConsumer),
NewSigCheckDecorator(options.AccountKeeper.(accountKeeper), options.SignModeHandler),
sigChecker,
ante.NewIncrementSequenceDecorator(options.AccountKeeper),
}

anteDecorators = append(anteDecorators, ibcante.NewRedundantRelayDecorator(options.IBCKeeper))

return anteDecorators
)
}

// NewAnteHandler returns an AnteHandler that checks and increments sequence
// numbers, checks signatures & account numbers, and deducts fees from the first
// signer.
func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
func (o HandlerOptions) validate() error {
// From x/auth/ante.go
if options.AccountKeeper == nil {
return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "account keeper is required for ante builder")
if o.AccountKeeper == nil {

Check failure on line 131 in app/ante.go

View workflow job for this annotation

GitHub Actions / golangci-lint

o.AccountKeeper undefined (type HandlerOptions has no field or method AccountKeeper) (typecheck)
return errorsmod.Wrap(sdkerrors.ErrLogic, "account keeper is required for ante builder")
}

if options.BankKeeper == nil {
return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "bank keeper is required for ante builder")
if o.BankKeeper == nil {
return errorsmod.Wrap(sdkerrors.ErrLogic, "bank keeper is required for ante builder")
}

if options.SignModeHandler == nil {
return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "sign mode handler is required for ante builder")
if o.SignModeHandler == nil {
return errorsmod.Wrap(sdkerrors.ErrLogic, "sign mode handler is required for ante builder")
}

if options.WasmConfig == nil {
return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "wasm config is required for ante builder")
if o.WasmConfig == nil {
return errorsmod.Wrap(sdkerrors.ErrLogic, "wasm config is required for ante builder")
}

return sdk.ChainAnteDecorators(GetAnteDecorators(options)...), nil
if o.TxCounterStoreKey == nil {
return errorsmod.Wrap(sdkerrors.ErrLogic, "tx counter store key is required for ante builder")
}

if o.SigGasConsumer == nil {
return errorsmod.Wrap(sdkerrors.ErrLogic, "signature gas consumer is required for ante builder")
}

return nil
}

func Recover(logger tmlog.Logger, err *error) {
if r := recover(); r != nil {
*err = errorsmod.Wrapf(sdkerrors.ErrPanic, "%v", r)

if e, ok := r.(error); ok {
logger.Error(
"ante handler panicked",
"error", e,
"stack trace", string(debug.Stack()),
)
} else {
logger.Error(
"ante handler panicked",
"recover", fmt.Sprintf("%v", r),
)
}
}
}
29 changes: 18 additions & 11 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@ import (
"github.com/cosmos/cosmos-sdk/x/authz"
authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper"
authzmodule "github.com/cosmos/cosmos-sdk/x/authz/module"
gaslessmodule "github.com/dymensionxyz/dymension-rdk/x/gasless"
gaslesskeeper "github.com/dymensionxyz/dymension-rdk/x/gasless/keeper"
gaslesstypes "github.com/dymensionxyz/dymension-rdk/x/gasless/types"
evmosante "github.com/evmos/evmos/v12/app/ante"
"github.com/gogo/protobuf/proto"
"github.com/gorilla/mux"
"github.com/rakyll/statik/fs"
Expand All @@ -24,6 +22,10 @@ import (
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
dbm "github.com/tendermint/tm-db"

gaslessmodule "github.com/dymensionxyz/dymension-rdk/x/gasless"
gaslesskeeper "github.com/dymensionxyz/dymension-rdk/x/gasless/keeper"
gaslesstypes "github.com/dymensionxyz/dymension-rdk/x/gasless/types"

"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/client"
nodeservice "github.com/cosmos/cosmos-sdk/client/grpc/node"
Expand Down Expand Up @@ -511,28 +513,33 @@ func NewRollapp(
keys[hubgentypes.StoreKey],
app.GetSubspace(hubgentypes.ModuleName),
app.AccountKeeper,
app.BankKeeper,
app.MintKeeper,
)

app.HubKeeper = hubkeeper.NewKeeper(
appCodec,
keys[hubtypes.StoreKey],
)

denomMetadataMiddleware := denommetadata.NewICS4Wrapper(
var ics4Wrapper ibcporttypes.ICS4Wrapper
// The IBC tranfer submit is wrapped with the following middlewares:
// - denom metadata middleware
ics4Wrapper = denommetadata.NewICS4Wrapper(
app.IBCKeeper.ChannelKeeper,
app.HubKeeper,
app.BankKeeper,
app.HubGenesisKeeper.GetState,
)

genesisTransfersBlocker := hubgenkeeper.NewICS4Wrapper(denomMetadataMiddleware, app.HubGenesisKeeper) // ICS4 Wrapper: claims IBC middleware
// - genesis bridge - IBC transfer disabled until genesis bridge protocol completes
ics4Wrapper = hubgenkeeper.NewICS4Wrapper(ics4Wrapper, app.HubGenesisKeeper)

// Create Transfer Keepers
app.TransferKeeper = ibctransferkeeper.NewKeeper(
appCodec,
keys[ibctransfertypes.StoreKey],
app.GetSubspace(ibctransfertypes.ModuleName),
genesisTransfersBlocker,
ics4Wrapper,
app.IBCKeeper.ChannelKeeper,
&app.IBCKeeper.PortKeeper,
app.AccountKeeper,
Expand All @@ -554,9 +561,9 @@ func NewRollapp(

transferStack = hubgenkeeper.NewIBCModule(
transferStack,
app.TransferKeeper,
app.HubGenesisKeeper,
app.BankKeeper,
app.IBCKeeper.ChannelKeeper,
)

app.CallbackKeeper = callbackKeeper.NewKeeper(
Expand Down Expand Up @@ -857,14 +864,14 @@ func NewRollapp(
}

func (app *App) setAnteHandler(txConfig client.TxConfig, wasmConfig wasmtypes.WasmConfig) {
anteHandler, err := NewAnteHandler(
handler, err := NewAnteHandler(
HandlerOptions{
HandlerOptions: ante.HandlerOptions{
AccountKeeper: app.AccountKeeper,
BankKeeper: app.BankKeeper,
FeegrantKeeper: app.FeeGrantKeeper,
SignModeHandler: txConfig.SignModeHandler(),
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
SigGasConsumer: evmosante.SigVerificationGasConsumer,
},
IBCKeeper: app.IBCKeeper,
WasmConfig: &wasmConfig,
Expand All @@ -876,7 +883,7 @@ func (app *App) setAnteHandler(txConfig client.TxConfig, wasmConfig wasmtypes.Wa
panic(err)
}

app.SetAnteHandler(anteHandler)
app.SetAnteHandler(handler)
}

func (app *App) setPostHandler() {
Expand Down
21 changes: 19 additions & 2 deletions app/encoding.go
Original file line number Diff line number Diff line change
@@ -1,17 +1,34 @@
package app

import (
"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
"github.com/cosmos/cosmos-sdk/std"
sdk "github.com/cosmos/cosmos-sdk/types"
cryptocodec "github.com/evmos/evmos/v12/crypto/codec"

"github.com/dymensionxyz/rollapp-wasm/app/params"
)

// MakeEncodingConfig creates an EncodingConfig for testing
func MakeEncodingConfig() params.EncodingConfig {
encodingConfig := params.MakeEncodingConfig()
std.RegisterLegacyAminoCodec(encodingConfig.Amino)
std.RegisterInterfaces(encodingConfig.InterfaceRegistry)
RegisterLegacyAminoCodec(encodingConfig.Amino)
RegisterInterfaces(encodingConfig.InterfaceRegistry)
ModuleBasics.RegisterLegacyAminoCodec(encodingConfig.Amino)
ModuleBasics.RegisterInterfaces(encodingConfig.InterfaceRegistry)
return encodingConfig
}

// RegisterLegacyAminoCodec registers Interfaces from types, crypto, and SDK std.
func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {
sdk.RegisterLegacyAminoCodec(cdc)
cryptocodec.RegisterCrypto(cdc)
codec.RegisterEvidences(cdc)
}

// RegisterInterfaces registers Interfaces from types, crypto, and SDK std.
func RegisterInterfaces(interfaceRegistry codectypes.InterfaceRegistry) {
std.RegisterInterfaces(interfaceRegistry)
cryptocodec.RegisterInterfaces(interfaceRegistry)
}
5 changes: 4 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ require (
github.com/cosmos/gogoproto v1.5.0
github.com/cosmos/ibc-go/v6 v6.3.0
github.com/dvsekhvalnov/jose2go v1.5.0
github.com/dymensionxyz/dymension-rdk v1.6.1-0.20240930130421-82c4d5f8c093
github.com/dymensionxyz/dymension-rdk v1.6.1-0.20241009122948-623826e0daa4
github.com/dymensionxyz/dymint v1.2.0-rc01.0.20240919105350-66f9b353655d
github.com/ethereum/go-ethereum v1.12.0
github.com/evmos/evmos/v12 v12.1.6
Expand Down Expand Up @@ -113,8 +113,10 @@ require (
github.com/dgraph-io/badger/v3 v3.2103.3 // indirect
github.com/dgraph-io/ristretto v0.1.1 // indirect
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 // indirect
github.com/docker/distribution v2.8.2+incompatible // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/dymensionxyz/cosmosclient v0.4.2-beta.0.20240821081230-b4018b2bac13 // indirect
github.com/dymensionxyz/gerr-cosmos v1.0.0 // indirect
Expand All @@ -135,6 +137,7 @@ require (
github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect
github.com/go-stack/stack v1.8.1 // indirect
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
Expand Down
Loading

0 comments on commit e74854f

Please sign in to comment.