Skip to content

degatchi/Atomic-Arbitrage

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Atomic Arbitrage

Atomic Arbitrage is a base example of a bare implementation of an arbitrage bot. Written in Go based off an old example bot. Starting with UNI V2 arbs before moving onto UNI v3, Balancer, and Curve arbitrage.

Contributing?

Just tackle a To-Do task and submit a PR, ideally once done I can make some Github actions to test speed and determine if PRs actually improve efficiency. Also if you have design/architecture improvements file and issue and I will start on them, not sure how to make public right away so starting with a conceptually simple bot then gradually evolve it over time.

To - do

  • - Re-write flash-swap to Yul+ instead of Solidity
  • - Build out an example test environment (hopefully in Foundry cramming in Yul+ via FFI and yul-log)
  • - Clean up code structure
  • - Move off hardcoded pairs from json, use event listening with Geth to reconstruct an in-memory db of all pairs for each exchange. (Recreate from factory logs at cold boot) (credit @mempooler)
  • - GraphQL interface instead of relying on JSON-RPC (although this can also be skipped by just moving straight to Geth)
  • - Fuzzing Tests with Go 1.18beta2
  • - Better transaction signing and construction (ie call uniswap call() first then direct it to the arb contract rather than having a contract call it first)
  • - e2e tests and timing
  • - Detect more swaps than just swapExactTokensForTokens (or just use a better method to detect arb opportunities, and dive into the mempool)
  • - Organize Code from flat repo, and fix a lot of code-style issues (credit @0xKitsune)
  • - Goroutine stuff
  • - Remove interfaces in favor of generics where possible? (I think Generics are faster?)
  • - Transactions is also mostly unfinished and un optimized in any way
  • - Has also occured to me file names may need to be changed to be more inline with what they actually do

Go Notes

Some good talks if you are bored, if you want to learn how to make your Go code run faster.

About

Just the essentials done well

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 100.0%