{"id":13657722,"url":"https://github.com/flashbots/simple-blind-arbitrage","last_synced_at":"2026-02-03T02:37:14.921Z","repository":{"id":160754658,"uuid":"635239882","full_name":"flashbots/simple-blind-arbitrage","owner":"flashbots","description":null,"archived":false,"fork":false,"pushed_at":"2023-12-21T14:23:41.000Z","size":9494,"stargazers_count":378,"open_issues_count":8,"forks_count":103,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-11-15T00:05:40.676Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Solidity","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flashbots.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-05-02T09:13:34.000Z","updated_at":"2025-11-08T03:34:19.000Z","dependencies_parsed_at":"2024-01-19T14:13:58.021Z","dependency_job_id":"07a1b701-3643-4f6d-a4a1-2cffb5820205","html_url":"https://github.com/flashbots/simple-blind-arbitrage","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/flashbots/simple-blind-arbitrage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flashbots%2Fsimple-blind-arbitrage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flashbots%2Fsimple-blind-arbitrage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flashbots%2Fsimple-blind-arbitrage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flashbots%2Fsimple-blind-arbitrage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flashbots","download_url":"https://codeload.github.com/flashbots/simple-blind-arbitrage/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flashbots%2Fsimple-blind-arbitrage/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29028744,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T02:28:16.591Z","status":"ssl_error","status_checked_at":"2026-02-03T02:27:48.904Z","response_time":96,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T05:00:49.653Z","updated_at":"2026-02-03T02:37:14.877Z","avatar_url":"https://github.com/flashbots.png","language":"Solidity","funding_links":[],"categories":["Repos"],"sub_categories":[],"readme":"# simple-blind-arbitrage\nThis repository contains a simple, mechanical system for blindly submitting atomic arbitrage opportunities to the Flashbots MEV-Share Node. For more details on MEV-Share please see this [beta launch announcement](https://collective.flashbots.net/t/announcing-mev-share-beta/1650) and the [docs](https://docs.flashbots.net/flashbots-mev-share/overview). For high level design details see [the design document on the Flashbots Forum](https://collective.flashbots.net/t/mev-share-programmably-private-orderflow-to-share-mev-with-users/1264).\n\nAlthough user trade details are hidden by default to prevent frontrunning, this script can atomically backrun Uniswap v2 transactions from the Node **by calculating the optimal arbitrage between two Uniswap v2 pools entirely on-chain**. Off-chain logic is relatively simple and no trade details are needed beyond the pool that the user is trading on to discover and attempt to execute atomic arbitrage opportunities.\n\nContained in this repository are two things. First, a [smart contract](/src/BlindBackrunLogic.sol) that attempts to execute an atomic arbitrage between two Uniswap v2 pools. Second, a [script](/execute/index.js) that listens to the Flashbots MEV-Share Node and submits attempted arbitrages.\n\nThis script is intended to be used as an example of blind atomic MEV and how to integrate with the Flashbots MEV-Share Node. Please do your own research and understand the code before using it or putting your money in it. We hope that you will use this code to build your own MEV strategies and share them with the community.\n\n### Installation\n\n1. Clone the repository:\n```bash\ngit clone https://github.com/yourusername/simple-blind-arbitrage.git\n```\n\n2. Change to the project directory:\n```bash\ncd simple-blind-arbitrage/execute\n```\n\n3. Install the required dependencies:\n```bash\nnpm install\n```\n\nNote that this repo also uses [Foundry](https://github.com/foundry-rs/foundry).\n\n### Setup\n1. Deploy the [smart contract](/src/BlindBackrunLogic.sol) using your preferred method. The dependencies may need to be changed if not using Foundry. Further, you must provide the WETH address on your deployment network as a constructor argument. Finally, please note the account that deploys the contract is the only one that can execute arbitrages.\n2. Transfer WETH to your contract.\n3. Setup your .env file by copying the template and filling it out. \n\n```makefile\nrpcUrl=\u003cYOUR_RPC_URL\u003e\nprivateKey=\u003cYOUR_PRIVATE_KEY\u003e\nexecutorContractAddress=\u003cCONTRACT_ADDRESS\u003e\n```\nReplace \u003cYOUR_RPC_URL\u003e with the URL of your Ethereum RPC provider, \u003cYOUR_PRIVATE_KEY\u003e with the private key of the Ethereum address you want to use for executing the transactions, and \u003cCONTRACT_ADDRESS\u003e with the address of the deployed BlindBackrun smart contract from above.\n\nBy default this bot bids 50% of its profits to `block.coinbase` but this can be configured by changing `percentageToKeep` in the [config file](./execute/utils/config.json). After a short time after open sourcing it is likely that you will need to increase `percentageToKeep` for your bundles to be competitive.\n\n### Usage\nTo start listening to the Flashbots MEV-Share Node and submitting blind arbitrage transactions, run the following command:\n```bash\nnode index.js -n \u003cnetwork\u003e\n```\nReplace \u003cnetwork\u003e with either mainnet or goerli depending on the network you want to use. \n\n### Testing\nA test in Foundry for the smart contract is provided. Please test using a fork of Goerli, from the root folder please run `forge test -f \u003cGOERLI_RPC_URL\u003e` and run with `-vv` to display `console.log()`s with relevant information during execution.\n\nIf you would like to test the monitoring and execution script, please configure for Goerli and run `node index.js -n goerli`.\n\n### Prerequisites\nBefore using this tool, make sure you have the following software installed on your system:\n\n* Node.js (version 14.x or higher)\n* npm (usually comes with Node.js)\n* Foundry is optional for smart contract development/testing/deployment\n\n### Security\nThe tool requires a private key for signing transactions. Make sure you don't share your private key or .env file with anyone or commit it to a public repository.\n\n### Contributing, improvements, and further work\nContributions are welcome! If you'd like to contribute to this project, feel free to open a pull request. `simple-blind-arbitrage` is a starting point that can be extended to encompass other MEV strategies. Here are a few improvements we would like to see:\n- Extending the bot to arb across more pools than two.\n- Using a [specialized smart contract to more efficiently query the chain](https://github.com/flashbots/simple-arbitrage/blob/master/contracts/UniswapFlashQuery.sol) for information. All the calls made off-chain can in theory be replaced with a single call.\n- Loading all Uniswap v2 pairs upfront instead of checking for them at runtime.\n- Using flashloans instead of relying on upfront capital.\n- Checking for pools from other Uniswap v2 forks beyond Uniswap and Sushiswap.\n- Arbing coins that are not WETH (DAI, USDC, etc).\n- Integrating other DEXes.\n- Submitting with custom hints that allow other searchers to build on your bundles while retaining bundle privacy.\n\n### License\nThis project is licensed under the MIT License - see the LICENSE file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflashbots%2Fsimple-blind-arbitrage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflashbots%2Fsimple-blind-arbitrage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflashbots%2Fsimple-blind-arbitrage/lists"}