Giter Site home page Giter Site logo

liquity-arbitrage's Introduction

liquity-arbitrage

This project will perform an arbitrage of LUSD/ETH pair. This will be done by 2 steps

  1. Swap ETH for LUSD at uniswap
  2. Redeem LUSD for ETH at liquity

Design

The project has two main components , one is the node server and another is the smart contract.

The node server is responsible for keeping a track of the prices of ETH at chainlink and at uniswap. When we notice a price difference where there is a possiblity of a profit from arbitrage it will trigger the smart contract to perform the arbitrage between uniswap and liquity smart contracts.

How is the amount of eth to be used for the arbitrage calculated ?

We have three restrictions in determining the ETH that can be used for the arbitrage.

  1. The ETH present in the arbitragers wallet
  2. The redeemable amount at liquity
  3. The uniswap reserves in the LUSD/ETH pair

We will first take the minimum of

min( <ETH present in Wallet> , <12.5% of the reserve pool of uniswap pair> )  // We will not use a bigger percentage of the uniswap pool because it will impact the prices heavily

Once the minimum is determined we will then check at liquity if we can redeem LUSD the amount of ETH swapped. If not , we will use the redeemableLUSD at liquity to determine the ETH used for swap.

Note: The smaller the percent of the uniswap pool we can use the better prices we can get, I have taken 12.5% of the pool for now because the pool reserves are small.

How will it determine if there is an arbitrage opportunity ?

We can determine the arbitrage opportunity by the following formula.

profit = ETH_USED * (uniswapPrice/chainLinkPrice) * (1-redemptionFeePercentage) * (1-uinswap_liquidity_provider_fee) - GasCost

If we find that the profit is positive we will then invoke the smart contract.

What mechanism will be used to make sure the server can be run 24/7 ?

To run the server 24/7 we will need a poller mechanism which will continously monitor the prices. To do this , this project will subscribe to the new block headers generated in the ethereum chain. This is done considering uniswap prices are updated after every block is mined.

How to start

Run the following commands

> yarn
> cp node_modules/@liquity/lib-ethers/deployments/default/kovan.json node_modules/@liquity/lib-ethers/dist/deployments/dev.json 

After this add your private keys and wallet addresses to .env file.

To start the server:

yarn start

Once the server is started you will need to ping localhost:3000/subscribe to start polling for prices. Without subscribing to events , the arbitrage bot will not work.

You can unsubscribe from the ethereum events by hitting localhost:3000/unsubscribe.

Note: We use redeemLUSD function to determine the input values for the smart contract inputs, to run the redeemLUSD we need LUSD present in our wallet. So keep a amount of LUSD equivalent to the ETH in your wallet or the amount being arbitraged for.

Sample .env file

PRIVATE_KEY='PVT_KEY_FROM_WALLET'
WSS_PROVIDER='wss://kovan.infura.io/ws/v3/API_KEY'
HTTPS_PROVIDER='https://kovan.infura.io/v3/API_KEY'
ACCOUNT_ADDRESS='WALLET_ADDRESS_OF_THE_PRIVATE_KEY'

Testing

Tested by creating a price difference in uniswap and chainlink

liquity-arbitrage's People

Contributors

lazycoder1 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.