Calculate invested properly for DPM

This commit is contained in:
James Grugett 2022-08-15 21:33:29 -05:00
parent aef14e49bb
commit e5aef763cd

View File

@ -1,4 +1,4 @@
import { maxBy, sortBy, sum } from 'lodash' import { maxBy, sortBy, sum, sumBy } from 'lodash'
import { Bet, LimitBet } from './bet' import { Bet, LimitBet } from './bet'
import { import {
calculateCpmmSale, calculateCpmmSale,
@ -153,11 +153,26 @@ function getCpmmInvested(yourBets: Bet[]) {
return sum(Object.values(totalSpent)) return sum(Object.values(totalSpent))
} }
function getDpmInvested(yourBets: Bet[]) {
const sortedBets = sortBy(yourBets, 'createdTime')
return sumBy(sortedBets, (bet) => {
const { amount, sale } = bet
if (sale) {
const originalBet = sortedBets.find((b) => b.id === sale.betId)
if (originalBet) return -originalBet.amount
return 0
}
return amount
})
}
export function getContractBetMetrics(contract: Contract, yourBets: Bet[]) { export function getContractBetMetrics(contract: Contract, yourBets: Bet[]) {
const { resolution } = contract const { resolution } = contract
const isCpmm = contract.mechanism === 'cpmm-1' const isCpmm = contract.mechanism === 'cpmm-1'
let currentInvested = 0
let totalInvested = 0 let totalInvested = 0
let payout = 0 let payout = 0
let loan = 0 let loan = 0
@ -183,7 +198,6 @@ export function getContractBetMetrics(contract: Contract, yourBets: Bet[]) {
saleValue -= amount saleValue -= amount
} }
currentInvested += amount
loan += loanAmount ?? 0 loan += loanAmount ?? 0
payout += resolution payout += resolution
? calculatePayout(contract, bet, resolution) ? calculatePayout(contract, bet, resolution)
@ -195,12 +209,11 @@ export function getContractBetMetrics(contract: Contract, yourBets: Bet[]) {
const profit = payout + saleValue + redeemed - totalInvested const profit = payout + saleValue + redeemed - totalInvested
const profitPercent = (profit / totalInvested) * 100 const profitPercent = (profit / totalInvested) * 100
const invested = isCpmm ? getCpmmInvested(yourBets) : getDpmInvested(yourBets)
const hasShares = Object.values(totalShares).some( const hasShares = Object.values(totalShares).some(
(shares) => !floatingEqual(shares, 0) (shares) => !floatingEqual(shares, 0)
) )
const invested = isCpmm ? getCpmmInvested(yourBets) : currentInvested
return { return {
invested, invested,
payout, payout,