Additional documentation and testing infrastructure: ## Documentation Added - PROFIT_ROADMAP.md - 4-week profitability roadmap - PRODUCTION_DEPLOYMENT.md - Production deployment guide - docs/FLASH_LOAN_DEPLOYMENT_GUIDE.md - Flash loan implementation - docs/FLASH_LOAN_IMPLEMENTATION_SUMMARY.md - Flash loan summary - docs/BINDING_CONSISTENCY_GUIDE.md - Contract binding guidelines - docs/BINDING_QUICK_START.md - Quick start for bindings - docs/COMPLETE_FORK_TESTING_GUIDE.md - Fork testing guide ## Testing Scripts Added - scripts/generate-test-report.sh - Generate test reports - scripts/monitor-24h-test.sh - 24-hour monitoring - scripts/start-24h-test.sh - Start long-running tests - scripts/stop-24h-test.sh - Stop test runs 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
9.3 KiB
Quick Start: Contract Binding Consistency
Immediate Action Items
1. Compile Mev-Alpha Contracts
cd /home/administrator/projects/Mev-Alpha
forge clean
forge build
# This will create out/ directory with compiled artifacts
Note: Compilation may take 2-3 minutes due to 108 dependencies.
2. Generate Go Bindings
Once compilation completes:
cd /home/administrator/projects/mev-beta
./scripts/generate-bindings.sh
This script will:
- Verify compiled artifacts exist
- Generate Go bindings using
abigen - Organize bindings by type (contracts, interfaces, utils, dex)
- Create address constants file
- Backup existing bindings
3. Verify Bindings
# Check generated files
ls -la bindings/
# Verify they compile
go build ./bindings/...
# Run go mod tidy
go mod tidy
Current Binding Inventory
✅ Existing Bindings (May Need Update)
Located in /home/administrator/projects/mev-beta/bindings/:
bindings/
├── contracts/
│ ├── arbitrageexecutor.go # ArbitrageExecutor contract
│ ├── baseflashswapper.go # Base flash swapper
│ ├── uniswapv2flashswapper.go # Uniswap V2 flash swapper
│ ├── uniswapv3flashswapper.go # Uniswap V3 flash swapper
│ ├── dexmath.go # DEX math library
│ └── shared_types.go # Shared type definitions
├── interfaces/
│ ├── arbitrage.go # IArbitrage interface
│ └── flash_swapper.go # IFlashSwapper interface
├── tokens/
│ ├── ierc20.go # ERC20 interface
│ ├── iuniswapv2pair.go # Uniswap V2 pair
│ └── iuniswapv3pool*.go # Uniswap V3 pool interfaces
└── uniswap/
├── uniswap_v2_pair.go # V2 pair binding
└── uniswap_v3_pool_*.go # V3 pool bindings
📋 Contracts in Mev-Alpha (Source of Truth)
Located in /home/administrator/projects/Mev-Alpha/src/:
src/
├── core/
│ ├── ArbitrageExecutor.sol ✅ Has binding
│ ├── BaseFlashSwapper.sol ✅ Has binding
│ ├── DataFetcher.sol ⚠️ Needs binding
│ ├── PriceOracle.sol ⚠️ Needs binding
│ └── liquidation/
│ └── AaveLiquidator.sol ⚠️ Needs binding
├── dex/
│ ├── UniswapV2FlashSwapper.sol ✅ Has binding
│ └── UniswapV3FlashSwapper.sol ✅ Has binding
├── interfaces/
│ ├── IArbitrage.sol ✅ Has binding
│ ├── IFlashSwapper.sol ✅ Has binding
│ ├── IDataFetcher.sol ⚠️ Needs binding
│ └── IERC165.sol ⚠️ Needs binding
├── libraries/
│ ├── DEXMath.sol ✅ Has binding
│ ├── ProfitCalculator.sol ⚠️ Needs binding
│ ├── UniswapV3Math.sol ⚠️ Needs binding
│ ├── CurveMath.sol ⚠️ Needs binding
│ ├── BalancerMath.sol ⚠️ Needs binding
│ └── AlgebraMath.sol ⚠️ Needs binding
└── utils/
├── GasOptimizer.sol ⚠️ Needs binding
├── MulticallUtils.sol ⚠️ Needs binding
└── TokenUtils.sol ⚠️ Needs binding
Legend:
- ✅ Has binding: Binding exists in mev-beta
- ⚠️ Needs binding: No binding found or may be outdated
Files Using Manual ABI Calls (Need Refactoring)
High Priority
-
pkg/uniswap/contracts.go(548 lines)- Manual ABI packing for slot0(), liquidity(), token0(), token1(), fee()
- Replace with:
bindings/tokens.IUniswapV3Poolbinding - Impact: Core pool interaction logic
-
pkg/arbitrum/abi_decoder.go(Critical for transaction parsing)- Manual Keccak256 hashing for function selectors
- Manual ABI unpacking for swap parameters
- Partial refactor: Use bindings for known contracts, keep manual parsing for unknown/multi-protocol
-
pkg/events/parser.go- Event signature hashing
- Replace with: Binding event filters and parsers
Medium Priority
-
pkg/calldata/swaps.go- Swap data encoding
- Use binding methods instead
-
pkg/arbitrum/parser/core.go- Transaction parsing
- Integrate with bindings
-
pkg/pools/create2.go- Pool address calculation
- Keep as-is (doesn't require bindings)
Low Priority (Keep As-Is)
pkg/common/selectors/selectors.go✅ KEEP- Centralized selector definitions
- Useful for quick lookups and validation
- Don't require changes
Refactoring Example
Before (Manual ABI)
// pkg/uniswap/contracts.go (current)
func (p *UniswapV3Pool) callSlot0(ctx context.Context) (*Slot0Data, error) {
data, err := p.abi.Pack("slot0")
if err != nil {
return nil, fmt.Errorf("failed to pack slot0 call: %w", err)
}
msg := ethereum.CallMsg{
To: &p.address,
Data: data,
}
result, err := p.client.CallContract(ctx, msg, nil)
if err != nil {
return nil, fmt.Errorf("failed to call slot0: %w", err)
}
unpacked, err := p.abi.Unpack("slot0", result)
// ... manual unpacking logic
}
After (Using Bindings)
// pkg/uniswap/contracts.go (refactored)
import (
"github.com/yourusername/mev-beta/bindings/tokens"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
)
func (p *UniswapV3Pool) callSlot0(ctx context.Context) (*Slot0Data, error) {
pool, err := tokens.NewIUniswapV3PoolState(p.address, p.client)
if err != nil {
return nil, fmt.Errorf("failed to create pool binding: %w", err)
}
slot0, err := pool.Slot0(&bind.CallOpts{Context: ctx})
if err != nil {
return nil, fmt.Errorf("failed to call slot0: %w", err)
}
return &Slot0Data{
SqrtPriceX96: uint256.MustFromBig(slot0.SqrtPriceX96),
Tick: int(slot0.Tick.Int64()),
// ... use typed struct fields directly
}, nil
}
Benefits:
- 50% less code
- Type-safe (compile-time errors instead of runtime)
- Auto-completion in IDE
- Handles ABI changes automatically on regeneration
Testing Strategy
1. Unit Tests
# Test each refactored package
go test ./pkg/uniswap -v
go test ./pkg/arbitrum -v
go test ./pkg/events -v
2. Integration Tests
# Test against Arbitrum testnet
export ARBITRUM_RPC_ENDPOINT="https://sepolia-rollup.arbitrum.io/rpc"
export ARBITRUM_WS_ENDPOINT="wss://sepolia-rollup.arbitrum.io/ws"
go test ./pkg/... -tags=integration -v
3. Build Validation
# Ensure everything compiles
cd /home/administrator/projects/mev-beta
go mod tidy
go build ./...
# Run the bot with --dry-run to validate
./mev-bot start --dry-run
Common Issues & Solutions
Issue: abigen not found
# Install abigen
go install github.com/ethereum/go-ethereum/cmd/abigen@latest
# Verify installation
which abigen
abigen --version
Issue: jq command not found
# Ubuntu/Debian
sudo apt-get update && sudo apt-get install -y jq
# macOS
brew install jq
Issue: Compilation errors after binding update
# Clear Go cache
go clean -cache -modcache -testcache
# Re-download dependencies
go mod tidy
go mod download
# Rebuild
go build ./...
Issue: Binding mismatch with deployed contract
Solution: Ensure you're using the correct contract version:
- Check deployed contract address
- Verify ABI matches on Arbiscan
- Regenerate bindings from correct source
- Update address in
bindings/addresses.go
Performance Considerations
Binding Size
Generated bindings can be large (10-30KB per contract). This is normal and doesn't impact runtime performance.
Compilation Time
Initial go build after generating bindings may take 30-60 seconds due to:
- ABI parsing
- Type generation
- Method generation
Subsequent builds use Go's build cache and are much faster.
Next Steps After Binding Generation
- Update imports: Replace manual ABI imports with binding imports
- Refactor pkg/uniswap: Highest impact, most direct mapping
- Refactor pkg/arbitrum: Careful - keep flexibility for multi-protocol
- Add tests: Unit tests for each refactored function
- Integration test: End-to-end arbitrage detection
- Document changes: Update code comments and docs
- Performance test: Ensure no regression in transaction processing
Useful Commands
# Find all manual ABI packing calls
grep -r "abi\.Pack\|abi\.Unpack" pkg/ --exclude-dir=test -n
# Find all Keccak256 selector computations
grep -r "crypto\.Keccak256" pkg/ --exclude-dir=test -n
# Count binding files
find bindings/ -name "*.go" | wc -l
# Check binding package imports
go list -f '{{join .Imports "\n"}}' ./bindings/... | sort -u
# Validate all Go files compile
gofmt -l pkg/ bindings/
# Run static analysis
go vet ./...
golangci-lint run
Support & References
- Comprehensive Guide: See
docs/BINDING_CONSISTENCY_GUIDE.md - abigen Documentation: https://geth.ethereum.org/docs/tools/abigen
- Foundry Build: https://book.getfoundry.sh/reference/forge/forge-build
- Go-Ethereum Bindings: https://pkg.go.dev/github.com/ethereum/go-ethereum/accounts/abi/bind
Status: Ready to Execute
Next Action: Run forge build in Mev-Alpha directory