package adapters import ( "context" "math/big" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" ) // EVMAdapter implements ChainAdapter for EVM-compatible chains type EVMAdapter struct { client *ethclient.Client chainID int64 } // NewEVMAdapter creates a new EVM chain adapter func NewEVMAdapter(client *ethclient.Client, chainID int64) *EVMAdapter { return &EVMAdapter{ client: client, chainID: chainID, } } // ChainAdapter defines the interface for chain adapters type ChainAdapter interface { GetBlockByNumber(ctx context.Context, number int64) (*types.Block, error) GetTransaction(ctx context.Context, hash common.Hash) (*types.Transaction, bool, error) GetTransactionReceipt(ctx context.Context, hash common.Hash) (*types.Receipt, error) GetCode(ctx context.Context, address common.Address) ([]byte, error) GetBalance(ctx context.Context, address common.Address) (*big.Int, error) GetGasPrice(ctx context.Context) (*big.Int, error) ChainID() int64 } // GetBlockByNumber gets a block by number func (e *EVMAdapter) GetBlockByNumber(ctx context.Context, number int64) (*types.Block, error) { return e.client.BlockByNumber(ctx, big.NewInt(number)) } // GetTransaction gets a transaction by hash func (e *EVMAdapter) GetTransaction(ctx context.Context, hash common.Hash) (*types.Transaction, bool, error) { return e.client.TransactionByHash(ctx, hash) } // GetTransactionReceipt gets a transaction receipt func (e *EVMAdapter) GetTransactionReceipt(ctx context.Context, hash common.Hash) (*types.Receipt, error) { return e.client.TransactionReceipt(ctx, hash) } // GetCode gets contract code func (e *EVMAdapter) GetCode(ctx context.Context, address common.Address) ([]byte, error) { return e.client.CodeAt(ctx, address, nil) } // GetBalance gets account balance func (e *EVMAdapter) GetBalance(ctx context.Context, address common.Address) (*big.Int, error) { return e.client.BalanceAt(ctx, address, nil) } // GetGasPrice gets current gas price func (e *EVMAdapter) GetGasPrice(ctx context.Context) (*big.Int, error) { return e.client.SuggestGasPrice(ctx) } // ChainID returns the chain ID func (e *EVMAdapter) ChainID() int64 { return e.chainID }