Compare commits
4 Commits
feature/in
...
feature/us
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fab8741544 | ||
|
|
942dd541e1 | ||
|
|
aec2ed2558 | ||
|
|
f600ec26ff |
@@ -11,9 +11,23 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
|
|
||||||
|
"github.com/your-org/mev-bot/pkg/config"
|
||||||
"github.com/your-org/mev-bot/pkg/validation"
|
"github.com/your-org/mev-bot/pkg/validation"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Package-level DEX configuration
|
||||||
|
var dexConfig *config.DEXConfig
|
||||||
|
|
||||||
|
// InitDEXConfig loads the DEX configuration from file
|
||||||
|
func InitDEXConfig(configPath string) error {
|
||||||
|
cfg, err := config.LoadDEXConfig(configPath)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to load DEX config: %w", err)
|
||||||
|
}
|
||||||
|
dexConfig = cfg
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// L2MessageKind represents the type of L2 message
|
// L2MessageKind represents the type of L2 message
|
||||||
type L2MessageKind uint8
|
type L2MessageKind uint8
|
||||||
|
|
||||||
@@ -233,36 +247,17 @@ func GetSwapProtocol(to *common.Address, data []byte) *DEXProtocol {
|
|||||||
selector := hex.EncodeToString(data[0:4])
|
selector := hex.EncodeToString(data[0:4])
|
||||||
toAddr := to.Hex()
|
toAddr := to.Hex()
|
||||||
|
|
||||||
// Map known router addresses (Arbitrum mainnet)
|
// Check if it's a known router (from config if loaded, else use fallback)
|
||||||
knownRouters := map[string]*DEXProtocol{
|
if dexConfig != nil {
|
||||||
// UniswapV2/V3
|
for addr, routerCfg := range dexConfig.Routers {
|
||||||
"0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506": {Name: "SushiSwap", Version: "V2", Type: "router"},
|
if addr == toAddr {
|
||||||
"0xE592427A0AEce92De3Edee1F18E0157C05861564": {Name: "UniswapV3", Version: "V1", Type: "router"},
|
return &DEXProtocol{
|
||||||
"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45": {Name: "UniswapV3", Version: "V2", Type: "router"},
|
Name: routerCfg.Name,
|
||||||
"0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B": {Name: "UniswapUniversal", Version: "V1", Type: "router"},
|
Version: routerCfg.Version,
|
||||||
|
Type: routerCfg.Type,
|
||||||
// Camelot
|
}
|
||||||
"0xc873fEcbd354f5A56E00E710B90EF4201db2448d": {Name: "Camelot", Version: "V2", Type: "router"},
|
}
|
||||||
"0x1F721E2E82F6676FCE4eA07A5958cF098D339e18": {Name: "Camelot", Version: "V3", Type: "router"},
|
|
||||||
|
|
||||||
// Balancer
|
|
||||||
"0xBA12222222228d8Ba445958a75a0704d566BF2C8": {Name: "Balancer", Version: "V2", Type: "vault"},
|
|
||||||
|
|
||||||
// Curve
|
|
||||||
"0x7544Fe3d184b6B55D6B36c3FCA1157eE0Ba30287": {Name: "Curve", Version: "V1", Type: "router"},
|
|
||||||
|
|
||||||
// Kyber
|
|
||||||
"0x6131B5fae19EA4f9D964eAc0408E4408b66337b5": {Name: "KyberSwap", Version: "V1", Type: "router"},
|
|
||||||
"0xC1e7dFE73E1598E3910EF4C7845B68A19f0e8c6F": {Name: "KyberSwap", Version: "V2", Type: "router"},
|
|
||||||
|
|
||||||
// Aggregators
|
|
||||||
"0x1111111254EEB25477B68fb85Ed929f73A960582": {Name: "1inch", Version: "V5", Type: "router"},
|
|
||||||
"0xDEF171Fe48CF0115B1d80b88dc8eAB59176FEe57": {Name: "Paraswap", Version: "V5", Type: "router"},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if it's a known router
|
|
||||||
if protocol, ok := knownRouters[toAddr]; ok {
|
|
||||||
return protocol
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to identify by function selector
|
// Try to identify by function selector
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package sequencer
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log/slog"
|
|
||||||
"math/big"
|
"math/big"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
@@ -63,7 +62,7 @@ func DefaultReaderConfig() *ReaderConfig {
|
|||||||
// Reader reads pending transactions from the Arbitrum sequencer
|
// Reader reads pending transactions from the Arbitrum sequencer
|
||||||
type Reader struct {
|
type Reader struct {
|
||||||
config *ReaderConfig
|
config *ReaderConfig
|
||||||
logger *slog.Logger
|
logger log.Logger
|
||||||
|
|
||||||
// Components
|
// Components
|
||||||
parsers parsers.Factory
|
parsers parsers.Factory
|
||||||
@@ -102,7 +101,7 @@ func NewReader(
|
|||||||
poolCache cache.PoolCache,
|
poolCache cache.PoolCache,
|
||||||
detector *arbitrage.Detector,
|
detector *arbitrage.Detector,
|
||||||
executor *execution.Executor,
|
executor *execution.Executor,
|
||||||
logger *slog.Logger,
|
logger log.Logger,
|
||||||
) (*Reader, error) {
|
) (*Reader, error) {
|
||||||
if config == nil {
|
if config == nil {
|
||||||
config = DefaultReaderConfig()
|
config = DefaultReaderConfig()
|
||||||
@@ -117,13 +116,13 @@ func NewReader(
|
|||||||
// Create swap filter with pool cache
|
// Create swap filter with pool cache
|
||||||
swapFilter := NewSwapFilter(&SwapFilterConfig{
|
swapFilter := NewSwapFilter(&SwapFilterConfig{
|
||||||
SwapChannelSize: config.BufferSize,
|
SwapChannelSize: config.BufferSize,
|
||||||
Logger: loggerAdapter(logger),
|
Logger: logger,
|
||||||
PoolCacheFile: "data/discovered_pools.json",
|
PoolCacheFile: "data/discovered_pools.json",
|
||||||
})
|
})
|
||||||
|
|
||||||
return &Reader{
|
return &Reader{
|
||||||
config: config,
|
config: config,
|
||||||
logger: logger.With("component", "sequencer_reader"),
|
logger: logger.New("component", "sequencer_reader"),
|
||||||
parsers: parsers,
|
parsers: parsers,
|
||||||
validator: validator,
|
validator: validator,
|
||||||
poolCache: poolCache,
|
poolCache: poolCache,
|
||||||
@@ -136,13 +135,6 @@ func NewReader(
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// loggerAdapter converts slog.Logger to log.Logger interface
|
|
||||||
func loggerAdapter(l *slog.Logger) log.Logger {
|
|
||||||
// For now, create a simple wrapper
|
|
||||||
// TODO: Implement proper adapter if needed
|
|
||||||
return log.Root()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start starts the sequencer reader
|
// Start starts the sequencer reader
|
||||||
func (r *Reader) Start(ctx context.Context) error {
|
func (r *Reader) Start(ctx context.Context) error {
|
||||||
r.logger.Info("starting sequencer reader",
|
r.logger.Info("starting sequencer reader",
|
||||||
@@ -320,7 +312,7 @@ func (r *Reader) readMessages(ctx context.Context, conn *websocket.Conn) error {
|
|||||||
func (r *Reader) worker(ctx context.Context, id int) {
|
func (r *Reader) worker(ctx context.Context, id int) {
|
||||||
defer r.wg.Done()
|
defer r.wg.Done()
|
||||||
|
|
||||||
logger := r.logger.With("worker", id)
|
logger := r.logger.New("worker", id)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
|
|||||||
Reference in New Issue
Block a user