GithubHelp home page GithubHelp logo

mfrank2016 / simple-arbitrage-keeper Goto Github PK

View Code? Open in Web Editor NEW

This project forked from makerdao/simple-arbitrage-keeper

0.0 0.0 0.0 316 KB

Arbitrage Keeper on OasisDEX and Uniswap V1

License: GNU Affero General Public License v3.0

Python 99.13% Shell 0.87%

simple-arbitrage-keeper's Introduction

simple-arbitrage-keeper

NOTE: This keeper is not complete. It uses pymaker and accidentally calls MatchingMarket.offer(), which isn't a guaranteed market buy (i.e. take order) in all permutations, so to improve this keeper, you'll need to call one of OasisDex's Taker functions.

This keeper performs simple arbitrage between OasisDex and Uniswap. It's structure is inspired by the original arbitrage-keeper, which performs arbitrage on the smart contracts powering Oasis.app, join, exit, boom and bust in Single Collateral Dai.

This keeper constantly looks for profitable arbitrage opportunities within a token pair across OasisDex and Uniswap V1 and attempts to execute them the moment they becomes available.

It is simple in construction, utilizing the Oasis REST Api and on-chain matching engine. It is also bounded by a single token pair and would increase its opportunity horizon and profitability if it evaluates all token pairs, overlapping across both exchanges.

The opportunity is defined as the profit amount of the best arbitrage opportunity, which follows a simple call structure:

  • Sell entry_token and buy arb_token on start_exchange
  • Sell arb_token and buy entry_token on end_exchange

Provided that a TxManager is deployed and owned by the ETH_FROM address, this keeper can execute contract calls atomically, meaning any failed function call will revert the entire transaction; this prevents the case where ETH_FROM, the account the keeper operates from, would be left with the arb_token if the selling function call on end_exchange fails.

Deployment steps and source code of the TxManager can be found here: https://github.com/makerdao/tx-manager.

We reccommend that first time users go through the Simple Arbitrage Keeper guide.

Installation

This project uses the python version in pymaker.

In order to clone the project and install required third-party packages please execute:

git clone https://github.com/makerdao/simple-arbitrage-keeper.git
cd simple-arbitrage-keeper
git submodule update --init --recursive
pip3 install -r lib/pymaker/requirements.txt

For some known Ubuntu and macOS issues see the pymaker README.

Usage

While in the simple-arbitrage-keeper directory, run the following command with required arguments:

usage: simple-arbitrage-keeper [-h] [--rpc-host RPC_HOST]
                               [--rpc-port RPC_PORT]
                               [--rpc-timeout RPC_TIMEOUT] --eth-from ETH_FROM
                               --eth-key [ETH_KEY [ETH_KEY ...]]
                               --uniswap-entry-exchange UNISWAP_ENTRY_EXCHANGE
                               --uniswap-arb-exchange UNISWAP_ARB_EXCHANGE
                               --oasis-address OASIS_ADDRESS
                               --oasis-api-endpoint OASIS_API_ENDPOINT
                               [--relayer-per-page RELAYER_PER_PAGE]
                               --tx-manager TX_MANAGER [--gas-price GAS_PRICE]
                               --entry-token ENTRY_TOKEN --arb-token ARB_TOKEN
                               --arb-token-name ARB_TOKEN_NAME --min-profit
                               MIN_PROFIT --max-engagement MAX_ENGAGEMENT
                               [--max-errors MAX_ERRORS] [--debug]

optional arguments:
  -h, --help            show this help message and exit
  --rpc-host RPC_HOST   JSON-RPC host (default: `localhost')
  --rpc-port RPC_PORT   JSON-RPC port (default: `8545')
  --rpc-timeout RPC_TIMEOUT
                        JSON-RPC timeout (in seconds, default: 10)
  --eth-from ETH_FROM   Ethereum address from which to send transactions;
                        checksummed (e.g. '0x12AebC')
  --eth-key [ETH_KEY [ETH_KEY ...]]
                        Ethereum private key(s) to use (e.g. 'key_file=/path/t
                        o/keystore.json,pass_file=/path/to/passphrase.txt')
  --uniswap-entry-exchange UNISWAP_ENTRY_EXCHANGE
                        Ethereum address of the Uniswap Exchange contract for
                        the entry token market; checksummed (e.g. '0x12AebC')
  --uniswap-arb-exchange UNISWAP_ARB_EXCHANGE
                        Ethereum address of the Uniswap Exchange contract for
                        the arb token market; checksummed (e.g. '0x12AebC')
  --oasis-address OASIS_ADDRESS
                        Ethereum address of the OasisDEX contract; checksummed
                        (e.g. '0x12AebC')
  --oasis-api-endpoint OASIS_API_ENDPOINT
                        Endpoint of of the Oasis V2 REST API (e.g. 'https://kovan-api.oasisdex.com' )
  --relayer-per-page RELAYER_PER_PAGE
                        Number of orders to fetch per one page from the 0x
                        Relayer API (default: 100)
  --tx-manager TX_MANAGER
                        Ethereum address of the TxManager contract to use for
                        multi-step arbitrage; checksummed (e.g. '0x12AebC')
  --gas-price GAS_PRICE
                        Gas price in Wei (default: node default), (e.g.
                        1000000000 for 1 GWei)
  --entry-token ENTRY_TOKEN
                        The token address that the bot starts and ends with in
                        every transaction; checksummed (e.g. '0x12AebC')
  --arb-token ARB_TOKEN
                        The token address that arbitraged between both
                        exchanges; checksummed (e.g. '0x12AebC')
  --arb-token-name ARB_TOKEN_NAME
                        The token name that arbitraged between both exchanges
                        (e.g. 'SAI', 'WETH', 'REP')
  --min-profit MIN_PROFIT
                        Ether amount of minimum profit (in base token) from
                        one arbitrage operation (e.g. 1 for 1 Sai min profit)
  --max-engagement MAX_ENGAGEMENT
                        Ether amount of maximum engagement (in base token) in
                        one arbitrage operation (e.g. 100 for 100 Sai max
                        engagement)
  --max-errors MAX_ERRORS
                        Maximum number of allowed errors before the keeper
                        terminates (default: 100)
  --debug               Enable debug output

Here's an example script to easily spin up the keeper for Kovan, entry token DAI, and arb token WETH:

#!/bin/bash
/path/to/simple-arbitrage-keeper/bin/simple-arbitrage-keeper \
	--rpc-host 'https://parity.node:8545' \
	--eth-from '0xABC123' \
	--eth-key 'key_file=/path/to/keystore.txt,pass_file=/path/to/passphraseFile.txt' \
	--uniswap-entry-exchange '0x47D4Af3BBaEC0dE4dba5F44ae8Ed2761977D32d6' \
	--uniswap-arb-exchange '0x1D79BcC198281C5F9B52bf24F671437BaDd3a688' \
	--oasis-address '0x4A6bC4e803c62081ffEbCc8d227B5a87a58f1F8F' \
	--oasis-api-endpoint 'https://kovan-api.oasisdex.com' \
	--tx-manager '0xABC123' \
	--entry-token '0x4F96Fe3b7A6Cf9725f59d353F723c1bDb64CA6Aa' \
	--arb-token '0xd0A1E359811322d97991E03f863a0C30C2cF029C' \
	--arb-token-name 'WETH' \
	--min-profit 1 \
	--max-engagement 10 \

License

See COPYING file.

Disclaimer

YOU (MEANING ANY INDIVIDUAL OR ENTITY ACCESSING, USING OR BOTH THE SOFTWARE INCLUDED IN THIS GITHUB REPOSITORY) EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE SOFTWARE IS AT YOUR SOLE RISK. THE SOFTWARE IN THIS GITHUB REPOSITORY IS PROVIDED β€œAS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. YOU RELEASE AUTHORS OR COPYRIGHT HOLDERS FROM ALL LIABILITY FOR YOU HAVING ACQUIRED OR NOT ACQUIRED CONTENT IN THIS GITHUB REPOSITORY. THE AUTHORS OR COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS CONCERNING ANY CONTENT CONTAINED IN OR ACCESSED THROUGH THE SERVICE, AND THE AUTHORS OR COPYRIGHT HOLDERS WILL NOT BE RESPONSIBLE OR LIABLE FOR THE ACCURACY, COPYRIGHT COMPLIANCE, LEGALITY OR DECENCY OF MATERIAL CONTAINED IN OR ACCESSED THROUGH THIS GITHUB REPOSITORY.

simple-arbitrage-keeper's People

Contributors

496080199 avatar dependabot[bot] avatar kentonprescott avatar livnev avatar wysenynja avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.