Open staccDOTsol opened 4 years ago
@dpurhar27 the best part of this one is that it's just a new checkbox for DAI/SAI RAYs
Here's some good theorizing:
C:\freeMoney>node app2s.js
{
lendwinner: { USD: 'PersonalCapital' },
borrowwinner: { USD: 'Robinhood' },
lows: { USD: 1.55 },
highs: { USD: 1.8 }
}
{
lendwinner: { DAI: 'Nuo' },
borrowwinner: { DAI: 'Ray' },
lows: { DAI: 2.085 },
highs: { DAI: 9.649 }
}
{
lendwinner: { BTC: 'Bitfinex' },
borrowwinner: { BTC: 'Hodlonaut' },
lows: { BTC: 1.103 },
highs: { BTC: 6.2 }
}
{
lendwinner: { SAI: 'Compound' },
borrowwinner: { SAI: 'Fulcrum' },
lows: { SAI: 0.5012 },
highs: { SAI: 8.084 }
}
{ lendwinner: {}, borrowwinner: {}, lows: {}, highs: {} }
{
lendwinner: { ALGORAND: 'Ray' },
borrowwinner: {},
lows: { ALGORAND: 12.87 },
highs: {}
}
{
lendwinner: { SNX: 'Nuo' },
borrowwinner: {},
lows: { SNX: 23.26 },
highs: {}
}
{
lendwinner: { ZRX: 'Compound' },
borrowwinner: { ZRX: 'CoinList' },
lows: { ZRX: 0.1911 },
highs: { ZRX: 5.11 }
}
{
lendwinner: { WBTC: 'Nuo' },
borrowwinner: { WBTC: 'Fulcrum' },
lows: { WBTC: 0.5896 },
highs: { WBTC: 0.8468 }
}
const express = require('express');
var cors = require('cors');
var app = express();
app.use(cors());
var request = require("request")
var bodyParser = require('body-parser')
app.set('view engine', 'ejs');
var request = require('request')
var winners = []
var providers = []
var lowestLend = 99999999
var borrowsArr = []
var toReturn= {}
var suppliesArr = []
var highestSupply = 0
function getRatesByCoin(search, borrow, cb) {
request({
headers: {
'x-api-key': process.env.key
},
uri: 'https://api.loanscan.io/v1/interest-rates',
method: 'GET'
}, function(err, res, body) {
//console.log(err)
cat = JSON.parse(body)
for (var idea in cat){
provider = cat[idea]['provider']
providers.push(cat[idea]['provider'])
borrow = cat[idea]['borrow']
supply = cat[idea]['supply']
var lowest = 9999999;
var winner;
for (var s in borrow){
if (borrow[s].symbol == search && provider != 'AaveVariable' && provider != 'AaveStable' ){
borrowsArr.push({'provider': provider,'rate': borrow[s].rate, symbol: borrow[s].symbol})
if (borrow[s].symbol == 'DAI' || borrow[s].symbol == 'SAI' || borrow[s].symbol == 'USDC'){
if (borrow[s].rate < lowest){
lowest = borrow[s].rate
if (lowestLend < lowest){
lowestLend = lowest
}
winner = borrow[s].symbol
}
}
}
}
var t = 0;
var c = 0;
var symbols = []
for (var s in supply){
if (supply[s].symbol == search&& provider != 'AaveVariable' && provider != 'AaveStable'){
suppliesArr.push({'provider': provider,'rate': supply[s].rate, symbol: supply[s].symbol})
if (supply[s].symbol != winner){
symbols.push(supply[s].symbol)
t += supply[s].rate
if (supply[s].rate > highestSupply){
highestSupply = supply[s].rate
}
c++
}
}
}
var avg = t / c
////console.log(winner + ' wins with: ' + (lowest * 100).toPrecision(4)+ '%')
////console.log('average supply % APR: ' + (avg * 100).toPrecision(4)+ ' %')
var equity = 1000
var ratio = avg / lowest
var supplied = equity * ratio
}
var stables = ['SAI', 'DAI', 'USDC']
var toReturn = {}
if (borrow){
for (var b in suppliesArr){
if (suppliesArr[b].symbol == search){
if (toReturn[search] == undefined){
toReturn[search] = []
}
toReturn[search].push({'type': 'lend', 'rate': (suppliesArr[b].rate * 100).toPrecision(4), provider: suppliesArr[b].provider})
}
}
} else {
for (var b in borrowsArr){
if (borrowsArr[b].symbol == search){
if (toReturn[search] == undefined){
toReturn[search] = []
}
toReturn[search].push({'type': 'borrow', 'rate': (borrowsArr[b].rate * 100).toPrecision(4), provider: borrowsArr[b].provider})
}
}
}
lendRates = {}
borrowRates = {}
var winner1 = ""
var winRate=0
var winRate2=999999999999
var winner2 = ""
//console.log(suppliesArr)
//console.log(borrowsArr)
var lendwinner = {}
var borrowwinner = {}
var lows = {}
var highs = {}
for (var entry in toReturn){
low = 99999999
high = 0
for (var e in toReturn[entry]){
if (toReturn[entry][e].type == 'lend'){
if (parseFloat(toReturn[entry][e].rate) < low){
low = parseFloat(toReturn[entry][e].rate)
lendwinner[entry] = toReturn[entry][e].provider
lows[entry] = low
} else {
if (parseFloat(toReturn[entry][e].rate) > high){
high = parseFloat(toReturn[entry][e].rate)
borrowwinner[entry] = toReturn[entry][e].provider
highs[entry] = high
}
}
}
}
}
toReturn = {lendwinner, borrowwinner, lows, highs}
console.log(toReturn)
})
}
async function doIt(){
getRatesByCoin("DAI", true)
getRatesByCoin("ALGORAND")
getRatesByCoin("SAI", true)
getRatesByCoin("ZRX", true)
getRatesByCoin("BTC", true)
getRatesByCoin("WBTC", true)
getRatesByCoin("SNX", true)
getRatesByCoin("STX", true)
getRatesByCoin("USD", true)
}
doIt()
Why
How often are borrow %s less than supply %s on stables?
Solution
Considerations
More DeFi, bigger rewards! The above table was calculated using RAY vs compound borrow USDC.
Additional Info
For fun and profit...