UNPKG

@brightunion/sdk

Version:

Brightjs is a set of javascript tools to interact with the Bright Union's risk platform aggregator's protocol on Ethereum, Binance Smart Chain and Polygon blockchains.

163 lines (138 loc) 5.28 kB
import axios from 'axios'; import { _getUnslashedContract, _getUnslashedCoversContract, } from "@/service/helpers/getContract"; import CatalogHelper from '../helpers/catalogHelper'; import {fromWei, toWei} from "web3-utils"; import CurrencyHelper from "@/service/helpers/currencyHelper"; export default class UnslashedAPI { static fetchCoverables() { return axios.get(`https://static.unslashed.finance/networks/1.json`) .then((response) => { return response.data; }).catch(error => { return []; }); } static async fetchQuote(amount: number, currency: string, period: number, protocol: any) { let coveredAmount:any = currency === 'USD' ? Number(CurrencyHelper.usd2eth(amount)) : amount; let quote = protocol.rawDataUnslashed.static const unslashedInstance = await _getUnslashedContract(quote.address); let apy = await unslashedInstance.methods.getDynamicPricePerYear18eRatio().call().then( (pricePerYear:any) => { return fromWei(pricePerYear); } , () => { return 0; } ) let rolloverDate = await unslashedInstance.methods.getRolloverDate().call().then( (timestamp:any) => { return timestamp; }, () => { return 0; } ) let price = await unslashedInstance.methods.coverToPremium(toWei(String(coveredAmount))).call() .then( (premium:any) => { return premium; }, () => { return 0; } ) let errorMsg = null; if(quote.soldOut || price == 0){ errorMsg = {message: `Sold out`, errorType: "capacity"} } const now:any = new Date(); rolloverDate = new Date( Number(rolloverDate) * 1000 ); const actualPeriod = Math.ceil( Math.abs(rolloverDate - now) / (1000 * 60 * 60 * 24)); price = currency === 'USD' ? Number(CurrencyHelper.eth2usd(price)) : price; const pricePerPeriod = price * ( period / actualPeriod ); const pricePercent = Number(apy) * 100; if(quote) { global.events.emit("quote", { chainId: global.user.ethNet.networkId, status: "INITIAL_DATA", distributorName: "unslashed", amount: amount, currency: currency, price: pricePerPeriod, pricePercent: pricePercent, period: period, protocol: protocol, chain: 'ETH', name: quote.name, source: 'ease', actualPeriod: actualPeriod, rawDataUnslashed: quote, type: quote.type, typeDescription: quote.description, capacity: "9999999999999999999999999999999999999999999999999999999", //unknown nonPartnerLink: 'https://app.unslashed.finance/cover/' + quote.address, }); return CatalogHelper.quoteFromCoverable( 'unslashed', protocol, { amount: amount, actualPeriod: actualPeriod, currency: currency, period: period, chain: 'ETH', chainId: global.user.ethNet.networkId, price: pricePerPeriod, pricePercent: pricePercent, response: quote.static, source: 'unslashed', minimumAmount: 1, name: quote.name, errorMsg: errorMsg, type: quote.type, typeDescription: quote.description, capacity: "9999999999999999999999999999999999999999999999999999999", //unknown nonPartnerLink: 'https://app.unslashed.finance/cover/' + quote.address, }, { capacity: "9999999999999999999999999999999999999999999999999999999", //unknown } ); } } static fetchCovers (){ return this.fetchCoverables().then( async (data: any) => { const unslashedInstanceGetCovers = await _getUnslashedCoversContract(data.BulkDataGetter.address); let addressArr:string[] = []; let covers = data.BasketMarket ? data.BasketMarket.data : []; covers = Object.values(covers).filter((item:any) => { if(!item.static.soldOut && item.static.status != 'inactive'){ addressArr.push(item.static.address); return item; } }); const coverages = await unslashedInstanceGetCovers.methods.getUserData( addressArr , global.user.account ).call(); for (let i = 0; i < covers.length; i ++) { covers[i].coverage = coverages[i]; } covers = covers.filter( ( _cover:any ) => { if( Number(_cover.coverage.userCoverBalance) > 0 ){ return _cover; } }) for (let i = 0; i < covers.length; i ++) { const unslashedInstance = await _getUnslashedContract(covers[i].static.address); covers[i].static.rolloverDate = await unslashedInstance.methods.getRolloverDate().call().then( (timestamp:any) => { return timestamp; }, () => { return 0; } ) } return covers; } ) } }