- Added comprehensive bounds checking to prevent buffer overruns in multicall parsing - Implemented graduated validation system (Strict/Moderate/Permissive) to reduce false positives - Added LRU caching system for address validation with 10-minute TTL - Enhanced ABI decoder with missing Universal Router and Arbitrum-specific DEX signatures - Fixed duplicate function declarations and import conflicts across multiple files - Added error recovery mechanisms with multiple fallback strategies - Updated tests to handle new validation behavior for suspicious addresses - Fixed parser test expectations for improved validation system - Applied gofmt formatting fixes to ensure code style compliance - Fixed mutex copying issues in monitoring package by introducing MetricsSnapshot - Resolved critical security vulnerabilities in heuristic address extraction - Progress: Updated TODO audit from 10% to 35% complete 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
39 lines
938 B
Go
39 lines
938 B
Go
package arbitrage
|
|
|
|
import (
|
|
"math/big"
|
|
|
|
"github.com/ethereum/go-ethereum/accounts/abi"
|
|
"github.com/ethereum/go-ethereum/common"
|
|
)
|
|
|
|
type flashSwapCallback struct {
|
|
TokenPath []common.Address
|
|
PoolPath []common.Address
|
|
Fees []*big.Int
|
|
MinAmountOut *big.Int
|
|
}
|
|
|
|
func encodeFlashSwapCallback(tokenPath []common.Address, poolPath []common.Address, fees []*big.Int, minAmountOut *big.Int) ([]byte, error) {
|
|
tupleType, err := abi.NewType("tuple", "flashSwapCallback", []abi.ArgumentMarshaling{
|
|
{Name: "tokenPath", Type: "address[]"},
|
|
{Name: "poolPath", Type: "address[]"},
|
|
{Name: "fees", Type: "uint256[]"},
|
|
{Name: "minAmountOut", Type: "uint256"},
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
arguments := abi.Arguments{{Type: tupleType}}
|
|
|
|
callback := flashSwapCallback{
|
|
TokenPath: tokenPath,
|
|
PoolPath: poolPath,
|
|
Fees: fees,
|
|
MinAmountOut: minAmountOut,
|
|
}
|
|
|
|
return arguments.Pack(callback)
|
|
}
|