Files
mev-beta/orig/scripts/deploy-production-contracts.sh
Administrator c54c569f30 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>
2025-11-10 10:53:05 +01:00

167 lines
4.8 KiB
Bash
Executable File

#!/bin/bash
# Production contract deployment script for Arbitrum
set -e
echo "🚀 Deploying PRODUCTION MEV arbitrage contracts to Arbitrum..."
# Check environment
if [ -z "$ARBITRUM_RPC_ENDPOINT" ]; then
echo "❌ ARBITRUM_RPC_ENDPOINT not set"
exit 1
fi
if [ -z "$PRIVATE_KEY" ]; then
echo "❌ PRIVATE_KEY not set for deployment"
exit 1
fi
# Install dependencies if not present
if [ ! -d "node_modules" ]; then
echo "📦 Installing dependencies..."
npm install --save-dev @openzeppelin/contracts hardhat @nomiclabs/hardhat-ethers ethers
fi
# Create hardhat config for deployment
cat > hardhat.config.js << EOF
require("@nomiclabs/hardhat-ethers");
module.exports = {
solidity: {
version: "0.8.19",
settings: {
optimizer: {
enabled: true,
runs: 1000000 // Optimize for gas efficiency
}
}
},
networks: {
arbitrum: {
url: "${ARBITRUM_RPC_ENDPOINT}",
accounts: ["${PRIVATE_KEY}"]
}
}
};
EOF
# Create deployment script
cat > scripts/deploy.js << 'EOF'
const { ethers } = require("hardhat");
async function main() {
console.log("🏗️ Deploying ProductionArbitrageExecutor...");
const [deployer] = await ethers.getSigners();
console.log("Deploying with account:", deployer.address);
const balance = await deployer.getBalance();
console.log("Account balance:", ethers.utils.formatEther(balance), "ETH");
// Deploy ProductionArbitrageExecutor
const ArbitrageExecutor = await ethers.getContractFactory("ProductionArbitrageExecutor");
// Estimate gas
const deploymentGas = await ArbitrageExecutor.signer.estimateGas(
ArbitrageExecutor.getDeployTransaction()
);
console.log("Estimated deployment gas:", deploymentGas.toString());
const executor = await ArbitrageExecutor.deploy({
gasLimit: deploymentGas.mul(120).div(100) // 20% buffer
});
await executor.deployed();
console.log("✅ ProductionArbitrageExecutor deployed to:", executor.address);
// Verify contract is working
const minProfit = await executor.minProfitThreshold();
const maxGas = await executor.maxGasPrice();
console.log("📊 Contract Configuration:");
console.log(" Min Profit Threshold:", ethers.utils.formatEther(minProfit), "ETH");
console.log(" Max Gas Price:", ethers.utils.formatUnits(maxGas, "gwei"), "gwei");
// Update config file
const fs = require('fs');
const yaml = require('js-yaml');
try {
const configPath = 'config/arbitrum_production.yaml';
const config = yaml.load(fs.readFileSync(configPath, 'utf8'));
// Update contract addresses
config.contracts.arbitrage_executor = executor.address;
// Write updated config
fs.writeFileSync(configPath, yaml.dump(config));
console.log("✅ Updated config file with contract address");
} catch (error) {
console.log("⚠️ Could not update config file:", error.message);
console.log("📝 Manual update required:");
console.log(` arbitrage_executor: "${executor.address}"`);
}
console.log("🎯 Deployment Summary:");
console.log(" Contract Address:", executor.address);
console.log(" Network: Arbitrum One (Chain ID: 42161)");
console.log(" Gas Used:", deploymentGas.toString());
console.log(" Status: READY FOR PROFITABLE ARBITRAGE");
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error("❌ Deployment failed:", error);
process.exit(1);
});
EOF
# Create package.json if not exists
if [ ! -f "package.json" ]; then
cat > package.json << EOF
{
"name": "mev-bot-contracts",
"version": "1.0.0",
"description": "Production MEV arbitrage contracts",
"scripts": {
"deploy": "hardhat run scripts/deploy.js --network arbitrum"
},
"devDependencies": {
"@openzeppelin/contracts": "^4.9.0",
"hardhat": "^2.17.0",
"@nomiclabs/hardhat-ethers": "^2.2.0",
"ethers": "^5.7.0",
"js-yaml": "^4.1.0"
}
}
EOF
fi
# Install dependencies
echo "📦 Installing contract dependencies..."
npm install
# Compile contracts
echo "🔨 Compiling contracts..."
npx hardhat compile
# Deploy contracts
echo "🚀 Deploying to Arbitrum..."
npx hardhat run scripts/deploy.js --network arbitrum
echo ""
echo "🎉 PRODUCTION CONTRACTS DEPLOYED SUCCESSFULLY!"
echo ""
echo "⚠️ IMPORTANT: Save these addresses securely!"
echo " - Use them in your MEV bot configuration"
echo " - Verify on Arbiscan before using with large amounts"
echo " - Test thoroughly with small amounts first"
echo ""
echo "📈 Next steps:"
echo "1. Update MEV bot config with new contract address"
echo "2. Test arbitrage execution with forked environment"
echo "3. Start with small amounts on mainnet"
echo "4. Monitor profitability and adjust parameters"