#!/bin/bash set -e # Flash Loan Contract Deployment Script # Deploys ArbitrageExecutor to Arbitrum mainnet echo "🚀 MEV Flash Loan Contract Deployment" echo "=====================================" echo "" # Check required tools if ! command -v forge &> /dev/null; then echo "❌ Foundry not installed. Installing..." curl -L https://foundry.paradigm.xyz | bash source ~/.bashrc foundryup fi # Check environment variables if [ -z "$PRIVATE_KEY" ]; then echo "❌ ERROR: PRIVATE_KEY environment variable not set" echo "Usage: export PRIVATE_KEY=0x..." exit 1 fi if [ -z "$ARBISCAN_API_KEY" ]; then echo "⚠️ WARNING: ARBISCAN_API_KEY not set. Contract won't be verified." echo "Get one at: https://arbiscan.io/apis" fi # Configuration RPC_URL="${ARBITRUM_RPC_URL:-https://arb1.arbitrum.io/rpc}" AAVE_POOL_PROVIDER="0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb" CHAIN_ID="42161" echo "📋 Deployment Configuration:" echo " RPC URL: $RPC_URL" echo " Aave Pool Provider: $AAVE_POOL_PROVIDER" echo " Chain ID: $CHAIN_ID" echo "" # Install dependencies echo "📦 Installing dependencies..." cd "$(dirname "$0")/.." forge install aave/aave-v3-core --no-commit 2>/dev/null || true forge install OpenZeppelin/openzeppelin-contracts --no-commit 2>/dev/null || true # Compile echo "🔨 Compiling contract..." forge build # Get gas price echo "⛽ Checking gas price..." GAS_PRICE=$(cast gas-price --rpc-url "$RPC_URL") echo " Current gas price: $GAS_PRICE wei" # Estimate deployment cost echo "💰 Estimating deployment cost..." echo " Contract size: $(wc -c < contracts/ArbitrageExecutor.sol) bytes" echo " Estimated cost: ~$0.10 (Arbitrum is cheap!)" echo "" read -p "Deploy contract? (y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "Deployment cancelled" exit 1 fi # Deploy echo "🚀 Deploying ArbitrageExecutor..." DEPLOY_OUTPUT=$(forge create \ --rpc-url "$RPC_URL" \ --private-key "$PRIVATE_KEY" \ --constructor-args "$AAVE_POOL_PROVIDER" \ contracts/ArbitrageExecutor.sol:ArbitrageExecutor) echo "$DEPLOY_OUTPUT" # Extract contract address CONTRACT_ADDRESS=$(echo "$DEPLOY_OUTPUT" | grep "Deployed to:" | awk '{print $3}') if [ -z "$CONTRACT_ADDRESS" ]; then echo "❌ Failed to extract contract address" exit 1 fi echo "" echo "✅ Contract deployed successfully!" echo "📍 Contract Address: $CONTRACT_ADDRESS" echo "" # Save address echo "$CONTRACT_ADDRESS" > .contract-address echo "💾 Contract address saved to .contract-address" # Verify on Arbiscan if [ -n "$ARBISCAN_API_KEY" ]; then echo "" echo "🔍 Verifying contract on Arbiscan..." sleep 5 # Wait for contract to propagate forge verify-contract \ --chain-id "$CHAIN_ID" \ --constructor-args $(cast abi-encode "constructor(address)" "$AAVE_POOL_PROVIDER") \ "$CONTRACT_ADDRESS" \ contracts/ArbitrageExecutor.sol:ArbitrageExecutor \ --etherscan-api-key "$ARBISCAN_API_KEY" \ --watch || echo "⚠️ Verification failed, try manually: https://arbiscan.io/verifyContract" echo "" echo "✅ Contract verified!" else echo "" echo "⚠️ Contract not verified (ARBISCAN_API_KEY not set)" echo "Verify manually at: https://arbiscan.io/verifyContract" fi # Generate Go bindings echo "" echo "📝 Generating Go bindings..." if command -v abigen &> /dev/null; then abigen --sol contracts/ArbitrageExecutor.sol \ --pkg execution \ --out pkg/execution/arbitrage_executor.go || echo "⚠️ Failed to generate bindings" echo "✅ Go bindings generated: pkg/execution/arbitrage_executor.go" else echo "⚠️ abigen not installed. Install with:" echo " go install github.com/ethereum/go-ethereum/cmd/abigen@latest" fi # Final instructions echo "" echo "=========================================" echo "✅ DEPLOYMENT COMPLETE!" echo "=========================================" echo "" echo "📍 Contract Address: $CONTRACT_ADDRESS" echo "🔗 View on Arbiscan: https://arbiscan.io/address/$CONTRACT_ADDRESS" echo "" echo "📋 Next Steps:" echo "1. Update pkg/execution/flashloan_executor.go with contract address:" echo " var ArbitrageExecutorAddress = common.HexToAddress(\"$CONTRACT_ADDRESS\")" echo "" echo "2. Fund your deployer address with 0.01 ETH for gas:" echo " deployer: $(cast wallet address --private-key "$PRIVATE_KEY")" echo "" echo "3. Run the bot:" echo " export ARBITRUM_RPC_URL=\"$RPC_URL\"" echo " export PRIVATE_KEY=\"\$PRIVATE_KEY\"" echo " ./bin/mev-flashloan" echo "" echo "4. Monitor profits:" echo " https://arbiscan.io/address/$CONTRACT_ADDRESS#internaltx" echo "" echo "💰 Start profiting with ZERO capital!" echo ""