Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 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
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)

### Improvements

- [#1430](https://github.com/babylonlabs-io/babylon/pull/1430) Bump Cosmos EVM to 0.41 and add signer extractor.
- [#1555](https://github.com/babylonlabs-io/babylon/pull/1555) Create new mergify rule for v4.
- [#1554](https://github.com/babylonlabs-io/babylon/pull/1554) Bump repo to v4.
- [#1229](https://github.com/babylonlabs-io/babylon/pull/1229) Wire up EVM.
Expand Down
15 changes: 15 additions & 0 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package app
import (
"encoding/json"
"fmt"
"github.com/ethereum/go-ethereum/common"
"io"
"os"
"path/filepath"
Expand Down Expand Up @@ -80,6 +81,7 @@ import (
"github.com/cosmos/cosmos-sdk/x/staking"
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
evmante "github.com/cosmos/evm/ante"
evmencoding "github.com/cosmos/evm/encoding"
srvflags "github.com/cosmos/evm/server/flags"
evmutils "github.com/cosmos/evm/utils"
Expand Down Expand Up @@ -218,6 +220,7 @@ type BabylonApp struct {
legacyAmino *codec.LegacyAmino
appCodec codec.Codec
txConfig client.TxConfig
clientCtx client.Context

interfaceRegistry types.InterfaceRegistry
invCheckPeriod uint
Expand All @@ -231,6 +234,9 @@ type BabylonApp struct {

// module configurator
configurator module.Configurator

// pending tx listeners
pendingTxListeners []evmante.PendingTxListener
}

// NewBabylonApp returns a reference to an initialized BabylonApp.
Expand Down Expand Up @@ -983,10 +989,19 @@ func getAppMempool(appOpts servertypes.AppOptions) mempool.Mempool {
maxTxs = cast.ToInt(appOpts.Get(server.FlagMempoolMaxTxs))
mempoolCfg = mempool.DefaultPriorityNonceMempoolConfig()
)
mempoolCfg.SignerExtractor = NewEthSignerExtractionAdapter(mempool.NewDefaultSignerExtractionAdapter())
mempoolCfg.MaxTx = maxTxs
mp = mempool.NewPriorityMempool(mempoolCfg)
if maxTxs < 0 {
mp = mempool.NoOpMempool{}
}
return mp
}

func (app *BabylonApp) RegisterPendingTxListener(listener func(common.Hash)) {
app.pendingTxListeners = append(app.pendingTxListeners, listener)
}

func (app *BabylonApp) SetClientCtx(clientCtx client.Context) {
app.clientCtx = clientCtx
}
2 changes: 0 additions & 2 deletions app/keepers/keepers.go
Original file line number Diff line number Diff line change
Expand Up @@ -482,15 +482,13 @@ func (ak *AppKeepers) InitKeepers(
ak.Erc20Keeper, // Add ERC20 Keeper for ERC20 transfers
appparams.AccGov.String(),
)

ak.EVMKeeper.WithStaticPrecompiles(
NewAvailableStaticPrecompiles(
appCodec,
ak.PreciseBankKeeper,
ak.Erc20Keeper,
ak.GovKeeper,
ak.SlashingKeeper,
ak.EvidenceKeeper,
),
)
// Create the TokenFactory Keeper
Expand Down
33 changes: 20 additions & 13 deletions app/keepers/precompiles.go
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
package keepers

import (
"cosmossdk.io/core/address"
"fmt"
appparams "github.com/babylonlabs-io/babylon/v4/app/params"
"github.com/cosmos/cosmos-sdk/codec"
authcodec "github.com/cosmos/cosmos-sdk/x/auth/codec"
precisebankkeeper "github.com/cosmos/evm/x/precisebank/keeper"
evmtypes "github.com/cosmos/evm/x/vm/types"
"maps"

evidencekeeper "cosmossdk.io/x/evidence/keeper"
govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper"
slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper"
bankprecompile "github.com/cosmos/evm/precompiles/bank"
"github.com/cosmos/evm/precompiles/bech32"
evidenceprecompile "github.com/cosmos/evm/precompiles/evidence"
govprecompile "github.com/cosmos/evm/precompiles/gov"
"github.com/cosmos/evm/precompiles/p256"
slashingprecompile "github.com/cosmos/evm/precompiles/slashing"
Expand All @@ -33,7 +34,21 @@ var BabylonAvailableStaticPrecompiles = []string{
evmtypes.BankPrecompileAddress,
evmtypes.GovPrecompileAddress,
evmtypes.SlashingPrecompileAddress,
evmtypes.EvidencePrecompileAddress,
}

type PrecompileOptions struct {
// Codec is the codec used to encode and decode messages.
AddressCodec address.Codec
// ValidatorAddressCodec is the codec used to encode and decode validator addresses.
ValidatorAddressCodec address.Codec
// ConsensusAddressCodec is the codec used to encode and decode consensus addresses.
ConsensusAddressCodec address.Codec
}

var CodecOptions = PrecompileOptions{
AddressCodec: authcodec.NewBech32Codec(appparams.Bech32PrefixAccAddr),
ValidatorAddressCodec: authcodec.NewBech32Codec(appparams.Bech32PrefixValAddr),
ConsensusAddressCodec: authcodec.NewBech32Codec(appparams.Bech32PrefixConsAddr),
}

// NewAvailableStaticPrecompiles adds the static precompiles to the EVM
Expand All @@ -44,10 +59,8 @@ func NewAvailableStaticPrecompiles(
erc20Keeper erc20Keeper.Keeper,
govKeeper govkeeper.Keeper,
slashingKeeper slashingkeeper.Keeper,
evidenceKeeper evidencekeeper.Keeper,
) map[common.Address]vm.PrecompiledContract {
// TODO: We can add more custom precompiles here for Babylon Modules

// Clone the mapping from the latest EVM fork.
precompiles := maps.Clone(vm.PrecompiledContractsPrague)

Expand All @@ -64,21 +77,16 @@ func NewAvailableStaticPrecompiles(
panic(fmt.Errorf("failed to instantiate bank precompile: %w", err))
}

govPrecompile, err := govprecompile.NewPrecompile(govKeeper, cdc)
govPrecompile, err := govprecompile.NewPrecompile(govKeeper, cdc, CodecOptions.AddressCodec)
if err != nil {
panic(fmt.Errorf("failed to instantiate gov precompile: %w", err))
}

slashingPrecompile, err := slashingprecompile.NewPrecompile(slashingKeeper)
slashingPrecompile, err := slashingprecompile.NewPrecompile(slashingKeeper, CodecOptions.ValidatorAddressCodec, CodecOptions.ConsensusAddressCodec)
if err != nil {
panic(fmt.Errorf("failed to instantiate slashing precompile: %w", err))
}

evidencePrecompile, err := evidenceprecompile.NewPrecompile(evidenceKeeper)
if err != nil {
panic(fmt.Errorf("failed to instantiate evidence precompile: %w", err))
}

// Stateless precompiles
precompiles[bech32Precompile.Address()] = bech32Precompile
precompiles[p256Precompile.Address()] = p256Precompile
Expand All @@ -87,7 +95,6 @@ func NewAvailableStaticPrecompiles(
precompiles[bankPrecompile.Address()] = bankPrecompile
precompiles[govPrecompile.Address()] = govPrecompile
precompiles[slashingPrecompile.Address()] = slashingPrecompile
precompiles[evidencePrecompile.Address()] = evidencePrecompile

return precompiles
}
44 changes: 44 additions & 0 deletions app/signer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package app

import (
sdk "github.com/cosmos/cosmos-sdk/types"
mempool "github.com/cosmos/cosmos-sdk/types/mempool"
authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
evmtypes "github.com/cosmos/evm/x/vm/types"
//evmtypes "github.com/cosmos/evm/x/vm/types"
)

var _ mempool.SignerExtractionAdapter = EthSignerExtractionAdapter{}

// EthSignerExtractionAdapter is the default implementation of SignerExtractionAdapter. It extracts the signers
// from a cosmos-sdk tx via GetSignaturesV2.
type EthSignerExtractionAdapter struct {
fallback mempool.SignerExtractionAdapter
}

// NewEthSignerExtractionAdapter constructs a new EthSignerExtractionAdapter instance
func NewEthSignerExtractionAdapter(fallback mempool.SignerExtractionAdapter) EthSignerExtractionAdapter {
return EthSignerExtractionAdapter{fallback}
}

// GetSigners implements the Adapter interface
// NOTE: only the first item is used by the mempool
func (s EthSignerExtractionAdapter) GetSigners(tx sdk.Tx) ([]mempool.SignerData, error) {
if txWithExtensions, ok := tx.(authante.HasExtensionOptionsTx); ok {
opts := txWithExtensions.GetExtensionOptions()
if len(opts) > 0 && opts[0].GetTypeUrl() == "/cosmos.evm.vm.v1.ExtensionOptionsEthereumTx" {
for _, msg := range tx.GetMsgs() {
if ethMsg, ok := msg.(*evmtypes.MsgEthereumTx); ok {
return []mempool.SignerData{
mempool.NewSignerData(
ethMsg.GetFrom(),
ethMsg.AsTransaction().Nonce(),
),
}, nil
}
}
}
}

return s.fallback.GetSigners(tx)
}
2 changes: 1 addition & 1 deletion cmd/babylond/cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,7 @@ func txCommand() *cobra.Command {
}

// newApp is an appCreator
func newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, appOpts servertypes.AppOptions) servertypes.Application {
func newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, appOpts servertypes.AppOptions) evmserver.Application {
baseappOptions := server.DefaultBaseappOptions(appOpts)

skipUpgradeHeights := make(map[int64]bool)
Expand Down
33 changes: 15 additions & 18 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ module github.com/babylonlabs-io/babylon/v4
require (
github.com/CosmWasm/wasmd v0.55.1
github.com/btcsuite/btcd v0.24.2
github.com/cometbft/cometbft v0.38.17
github.com/cometbft/cometbft v0.38.18
github.com/cometbft/cometbft-db v0.15.0
github.com/cosmos/cosmos-sdk v0.53.4
github.com/cosmos/evm v0.3.1
github.com/cosmos/evm v0.4.1
github.com/cosmos/ibc-go/modules/light-clients/08-wasm/v10 v10.3.0
github.com/ethereum/go-ethereum v1.15.11
github.com/gorilla/mux v1.8.1
Expand All @@ -22,7 +22,7 @@ require (
github.com/supranational/blst v0.3.14
google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect
google.golang.org/grpc v1.74.2
google.golang.org/protobuf v1.36.6
google.golang.org/protobuf v1.36.7
gopkg.in/yaml.v2 v2.4.0
)

Expand All @@ -32,7 +32,7 @@ require (
cosmossdk.io/collections v1.2.1
cosmossdk.io/core v0.12.0
cosmossdk.io/errors v1.0.2
cosmossdk.io/log v1.6.0
cosmossdk.io/log v1.6.1
cosmossdk.io/math v1.5.3
cosmossdk.io/store v1.1.2
cosmossdk.io/tools/confix v0.1.2
Expand All @@ -48,7 +48,7 @@ require (
github.com/btcsuite/btcd/btcec/v2 v2.3.4
github.com/btcsuite/btcd/btcutil v1.1.6
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0
github.com/cosmos/cosmos-db v1.1.1
github.com/cosmos/cosmos-db v1.1.3
github.com/cosmos/cosmos-proto v1.0.0-beta.5
github.com/cosmos/gogoproto v1.7.0
github.com/cosmos/ibc-go/v10 v10.3.0
Expand Down Expand Up @@ -94,11 +94,10 @@ require (
cosmossdk.io/x/nft v0.1.1 // indirect
github.com/StackExchange/wmi v1.2.1 // indirect
github.com/VictoriaMetrics/fastcache v1.12.2 // indirect
github.com/bytedance/sonic v1.13.2 // indirect
github.com/bytedance/sonic/loader v0.2.4 // indirect
github.com/bytedance/sonic v1.14.0 // indirect
github.com/bytedance/sonic/loader v0.3.0 // indirect
github.com/cloudwego/base64x v0.1.5 // indirect
github.com/consensys/bavard v0.1.27 // indirect
github.com/consensys/gnark-crypto v0.16.0 // indirect
github.com/consensys/gnark-crypto v0.18.0 // indirect
github.com/crate-crypto/go-eth-kzg v1.3.0 // indirect
github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect
github.com/deckarep/golang-set/v2 v2.6.0 // indirect
Expand All @@ -109,7 +108,7 @@ require (
github.com/go-jose/go-jose/v4 v4.0.5 // indirect
github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect
github.com/gofrs/flock v0.8.1 // indirect
github.com/gofrs/flock v0.12.1 // indirect
github.com/gogo/status v1.1.0 // indirect
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect
github.com/holiman/bloomfilter/v2 v2.0.3 // indirect
Expand All @@ -118,7 +117,6 @@ require (
github.com/klauspost/cpuid/v2 v2.2.10 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
github.com/mdp/qrterminal/v3 v3.2.1 // indirect
github.com/mmcloughlin/addchain v0.4.0 // indirect
github.com/olekukonko/tablewriter v0.0.5 // indirect
github.com/pion/dtls/v2 v2.2.7 // indirect
github.com/pion/logging v0.2.2 // indirect
Expand All @@ -139,9 +137,8 @@ require (
github.com/zeebo/errs v1.4.0 // indirect
go.uber.org/mock v0.5.2 // indirect
go.yaml.in/yaml/v2 v2.4.2 // indirect
golang.org/x/arch v0.15.0 // indirect
golang.org/x/arch v0.17.0 // indirect
rsc.io/qr v0.2.0 // indirect
rsc.io/tmplfunc v0.0.3 // indirect
)

require (
Expand Down Expand Up @@ -200,10 +197,10 @@ require (
github.com/tendermint/go-amino v0.16.0 // indirect
github.com/zondax/hid v0.9.2 // indirect
go.etcd.io/bbolt v1.4.0-alpha.1 // indirect
golang.org/x/crypto v0.40.0
golang.org/x/sys v0.34.0 // indirect
golang.org/x/term v0.33.0 // indirect
golang.org/x/text v0.27.0 // indirect
golang.org/x/crypto v0.41.0
golang.org/x/sys v0.35.0 // indirect
golang.org/x/term v0.34.0 // indirect
golang.org/x/text v0.28.0 // indirect
nhooyr.io/websocket v1.8.17 // indirect
)

Expand Down Expand Up @@ -313,7 +310,7 @@ require (
go.opentelemetry.io/otel/metric v1.36.0 // indirect
go.opentelemetry.io/otel/trace v1.36.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/net v0.42.0 // indirect
golang.org/x/net v0.43.0 // indirect
golang.org/x/oauth2 v0.30.0 // indirect
golang.org/x/time v0.10.0 // indirect
google.golang.org/api v0.222.0 // indirect
Expand Down
Loading
Loading