refactor: move all remaining files to orig/ directory
Completed clean root directory structure: - Root now contains only: .git, .env, docs/, orig/ - Moved all remaining files and directories to orig/: - Config files (.claude, .dockerignore, .drone.yml, etc.) - All .env variants (except active .env) - Git config (.gitconfig, .github, .gitignore, etc.) - Tool configs (.golangci.yml, .revive.toml, etc.) - Documentation (*.md files, @prompts) - Build files (Dockerfiles, Makefile, go.mod, go.sum) - Docker compose files - All source directories (scripts, tests, tools, etc.) - Runtime directories (logs, monitoring, reports) - Dependency files (node_modules, lib, cache) - Special files (--delete) - Removed empty runtime directories (bin/, data/) V2 structure is now clean: - docs/planning/ - V2 planning documents - orig/ - Complete V1 codebase preserved - .env - Active environment config (not in git) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
180
orig/tests/integration/pool_discovery_test.go
Normal file
180
orig/tests/integration/pool_discovery_test.go
Normal file
@@ -0,0 +1,180 @@
|
||||
//go:build integration && legacy && forked
|
||||
// +build integration,legacy,forked
|
||||
|
||||
// Package integration provides integration tests for the MEV bot using a forked Arbitrum environment
|
||||
package integration
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/fraktal/mev-beta/internal/logger"
|
||||
"github.com/fraktal/mev-beta/pkg/pools"
|
||||
)
|
||||
|
||||
// TestPoolDiscovery tests that the pool discovery mechanism works correctly
|
||||
func TestPoolDiscovery(t *testing.T) {
|
||||
// Skip this test in short mode
|
||||
if testing.Short() {
|
||||
t.Skip("skipping pool discovery test in short mode")
|
||||
}
|
||||
|
||||
// Create test logger
|
||||
log := logger.New("debug", "text", "")
|
||||
|
||||
// Create CREATE2 calculator
|
||||
calculator := pools.NewCREATE2Calculator(log)
|
||||
|
||||
// Test discovering pools for common token pairs on Arbitrum
|
||||
testCases := []struct {
|
||||
name string
|
||||
token0 string
|
||||
token1 string
|
||||
expected int
|
||||
}{
|
||||
{
|
||||
name: "USDC/WETH",
|
||||
token0: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
|
||||
token1: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", // WETH
|
||||
expected: 3, // Uniswap V3, SushiSwap, Camelot V3
|
||||
},
|
||||
{
|
||||
name: "USDT/WETH",
|
||||
token0: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9", // USDT
|
||||
token1: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", // WETH
|
||||
expected: 3, // Uniswap V3, SushiSwap, Camelot V3
|
||||
},
|
||||
{
|
||||
name: "ARB/WETH",
|
||||
token0: "0x912CE59144191C1204E64559FE8253a0e49E6548", // ARB
|
||||
token1: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", // WETH
|
||||
expected: 3, // Uniswap V3, SushiSwap, Camelot V3
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
// Convert hex addresses to common.Address
|
||||
token0 := common.HexToAddress(tc.token0)
|
||||
token1 := common.HexToAddress(tc.token1)
|
||||
|
||||
// Discover pools for this token pair
|
||||
pools, err := calculator.FindPoolsForTokenPair(token0, token1)
|
||||
require.NoError(t, err, "failed to discover pools for token pair")
|
||||
|
||||
// Verify we found the expected number of pools
|
||||
assert.GreaterOrEqual(t, len(pools), tc.expected, "should find at least %d pools for %s", tc.expected, tc.name)
|
||||
|
||||
// Verify each pool has valid data
|
||||
for i, pool := range pools {
|
||||
assert.NotEqual(t, "", pool.Factory, "pool %d should have a factory name", i)
|
||||
assert.NotEqual(t, common.Address{}, pool.Token0, "pool %d should have token0", i)
|
||||
assert.NotEqual(t, common.Address{}, pool.Token1, "pool %d should have token1", i)
|
||||
assert.NotEqual(t, common.Address{}, pool.PoolAddr, "pool %d should have a pool address", i)
|
||||
assert.True(t, pool.Fee >= 0, "pool %d should have a non-negative fee", i)
|
||||
|
||||
log.Info("Discovered pool:", pool.Factory, pool.PoolAddr.Hex())
|
||||
}
|
||||
|
||||
log.Info("Found", len(pools), "pools for", tc.name)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// TestFactoryConfigurations tests that all factory configurations are properly loaded
|
||||
func TestFactoryConfigurations(t *testing.T) {
|
||||
// Create test logger
|
||||
log := logger.New("debug", "text", "")
|
||||
|
||||
// Create CREATE2 calculator
|
||||
calculator := pools.NewCREATE2Calculator(log)
|
||||
|
||||
// Get list of all factories
|
||||
factories := calculator.ListFactories()
|
||||
assert.Greater(t, len(factories), 0, "should have at least one factory configured")
|
||||
|
||||
// Verify each factory has valid configuration
|
||||
for _, factoryName := range factories {
|
||||
t.Run(factoryName, func(t *testing.T) {
|
||||
config, err := calculator.GetFactoryConfig(factoryName)
|
||||
assert.NoError(t, err, "should be able to get config for factory %s", factoryName)
|
||||
assert.NotNil(t, config, "config should not be nil for factory %s", factoryName)
|
||||
assert.NotEqual(t, common.Address{}, config.Address, "factory %s should have a valid address", factoryName)
|
||||
assert.NotEqual(t, common.Hash{}, config.InitCodeHash, "factory %s should have a valid init code hash", factoryName)
|
||||
assert.Greater(t, len(config.FeeStructure.DefaultFees), 0, "factory %s should have default fees", factoryName)
|
||||
})
|
||||
}
|
||||
|
||||
log.Info("Verified", len(factories), "factories")
|
||||
}
|
||||
|
||||
// TestPoolAddressCalculation tests that pool addresses are calculated correctly
|
||||
func TestPoolAddressCalculation(t *testing.T) {
|
||||
// Create test logger
|
||||
log := logger.New("debug", "text", "")
|
||||
|
||||
// Create CREATE2 calculator
|
||||
calculator := pools.NewCREATE2Calculator(log)
|
||||
|
||||
// Test known pool addresses on Arbitrum
|
||||
testCases := []struct {
|
||||
name string
|
||||
factory string
|
||||
token0 string
|
||||
token1 string
|
||||
fee uint32
|
||||
expectedAddr string
|
||||
}{
|
||||
{
|
||||
name: "Uniswap V3 USDC/WETH 0.05%",
|
||||
factory: "uniswap_v3",
|
||||
token0: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
|
||||
token1: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", // WETH
|
||||
fee: 500, // 0.05%
|
||||
expectedAddr: "0xC6962004f452bE9203591991D15f6b388e09E8D0",
|
||||
},
|
||||
{
|
||||
name: "Uniswap V3 USDC/WETH 0.3%",
|
||||
factory: "uniswap_v3",
|
||||
token0: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
|
||||
token1: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", // WETH
|
||||
fee: 3000, // 0.3%
|
||||
expectedAddr: "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640",
|
||||
},
|
||||
{
|
||||
name: "Uniswap V3 USDC/WETH 1%",
|
||||
factory: "uniswap_v3",
|
||||
token0: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
|
||||
token1: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1", // WETH
|
||||
fee: 10000, // 1%
|
||||
expectedAddr: "0x7f90122BF0700F9E7e1F688fe926940E8839F353",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
// Convert hex addresses to common.Address
|
||||
token0 := common.HexToAddress(tc.token0)
|
||||
token1 := common.HexToAddress(tc.token1)
|
||||
expectedAddr := common.HexToAddress(tc.expectedAddr)
|
||||
|
||||
// Calculate pool address
|
||||
calculatedAddr, err := calculator.CalculatePoolAddress(tc.factory, token0, token1, tc.fee)
|
||||
require.NoError(t, err, "should be able to calculate pool address")
|
||||
|
||||
// Verify the calculated address matches expected (this may fail for placeholder addresses)
|
||||
if tc.expectedAddr != "0x0000000000000000000000000000000000000000" {
|
||||
// For now, just log the addresses for verification
|
||||
log.Info("Calculated pool address:", calculatedAddr.Hex())
|
||||
log.Info("Expected pool address: ", expectedAddr.Hex())
|
||||
log.Info("Match:", calculatedAddr == expectedAddr)
|
||||
} else {
|
||||
// Just verify the address is not zero
|
||||
assert.NotEqual(t, common.Address{}, calculatedAddr, "calculated address should not be zero")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user