Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/FlashArbitrage.sol
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// SPDX-License-Identifier: UNLICENSED
// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

import "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol";
Expand Down
81 changes: 81 additions & 0 deletions src/onchain/TestArbitrage.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

import "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol";
import "@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol";
import {ISwapRouter} from "@uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/Pausable.sol";

/**
* @title TestArbitrage
* @author FlashArbAI
* @notice Enhanced test version of the arbitrage contract with comprehensive testing features
* @dev This contract is designed for thorough on-chain testing with detailed logging, error handling, and test utilities
*
* Key Testing Features:
* - Detailed event logging for all operations
* - Comprehensive error messages with context
* - Test mode functionality for simulation
* - Emergency functions with proper access control
* - Gas usage tracking and optimization metrics
* - Profit calculation and validation
* - Multiple safety checks and validations
* - Configurable parameters for different test scenarios
*
* Security Features:
* - ReentrancyGuard protection
* - Ownership controls with OpenZeppelin
* - Pausable functionality for emergency stops
* - SafeERC20 for secure token transfers
* - Input validation and bounds checking
*
* @custom:testing This contract includes additional features specifically for testing and validation
* @custom:security Multiple layers of security controls implemented
*/
contract TestArbitrage is IFlashLoanRecipient, ReentrancyGuard, Ownable, Pausable {
//////////////////////////////////////////////////////////////
// CONSTANTS //
//////////////////////////////////////////////////////////////

/// @notice Balancer V2 Vault address for flash loans
/// @dev Mainnet: 0xBA12222222228d8Ba445958a75a0704d566BF2C8
/// @dev This is immutable for gas optimization
IVault private constant VAULT = IVault(0xBA12222222228d8Ba445958a75a0704d566BF2C8);

/// @notice Maximum basis points (100%) for percentage calculations
/// @dev Used for slippage calculations and profit validations
uint256 private constant MAX_BPS = 10000;

/// @notice Minimum profit threshold in basis points (0.1%)
/// @dev Ensures arbitrage is profitable enough to justify gas costs
uint256 private constant MIN_PROFIT_BPS = 10;

/// @notice Maximum slippage tolerance in basis points (5%)
/// @dev Safety limit to prevent excessive slippage in volatile conditions
uint256 private constant MAX_SLIPPAGE_BPS = 500;

/// @notice Gas limit buffer for swap operations
/// @dev Used to ensure sufficient gas for complex swaps
uint256 private constant GAS_BUFFER = 100000;

//////////////////////////////////////////////////////////////
// CONSTRUCTOR //
//////////////////////////////////////////////////////////////

/// @notice Initializes the test arbitrage contract
/// @dev Sets up initial configuration and authorizes deployer
constructor() {
// Set initial configuration
profitRecipient = msg.sender;

// Authorize the deployer for initial testing
authorizedTraders[msg.sender] = true;

// Initialize stats
stats.lastTradeTimestamp = block.timestamp;

emit ConfigurationUpdated("deployment", 0, block.timestamp, msg.sender);
}
}
Loading