Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 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.
- [#1553](https://github.com/babylonlabs-io/babylon/pull/1553) Remove native Coin precompile from token pairs.
- [#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.
Expand Down
17 changes: 16 additions & 1 deletion 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 @@ -587,7 +593,7 @@ func NewBabylonApp(

// set proposal extension
proposalHandler := prepare.NewProposalHandler(
logger, &app.CheckpointingKeeper, bApp.Mempool(), bApp, app.EncCfg)
logger, &app.CheckpointingKeeper, bApp.Mempool(), bApp, app.EncCfg, bbn.NewEthSignerExtractionAdapter(mempool.NewDefaultSignerExtractionAdapter()))
proposalHandler.SetHandlers(bApp)

// set vote extension
Expand Down Expand Up @@ -981,10 +987,19 @@ func getAppMempool(appOpts servertypes.AppOptions) mempool.Mempool {
maxTxs = cast.ToInt(appOpts.Get(server.FlagMempoolMaxTxs))
mempoolCfg = mempool.DefaultPriorityNonceMempoolConfig()
)
mempoolCfg.SignerExtractor = bbn.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
39 changes: 23 additions & 16 deletions app/keepers/precompiles.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,22 @@ package keepers

import (
"fmt"
"github.com/cosmos/cosmos-sdk/codec"
precisebankkeeper "github.com/cosmos/evm/x/precisebank/keeper"
evmtypes "github.com/cosmos/evm/x/vm/types"
"maps"

evidencekeeper "cosmossdk.io/x/evidence/keeper"
"cosmossdk.io/core/address"
appparams "github.com/babylonlabs-io/babylon/v4/app/params"
"github.com/cosmos/cosmos-sdk/codec"
authcodec "github.com/cosmos/cosmos-sdk/x/auth/codec"
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"
erc20Keeper "github.com/cosmos/evm/x/erc20/keeper"
precisebankkeeper "github.com/cosmos/evm/x/precisebank/keeper"
evmtypes "github.com/cosmos/evm/x/vm/types"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/vm"
)
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
}
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