diff --git a/common/antes.ts b/common/antes.ts index 15081b45..a608da9d 100644 --- a/common/antes.ts +++ b/common/antes.ts @@ -1,5 +1,5 @@ import { Bet } from './bet' -import { getProbability } from './calculate-dpm' +import { getDpmProbability } from './calculate-dpm' import { getCpmmProbability } from './calculate-cpmm' import { Binary, CPMM, DPM, FreeResponse, FullContract } from './contract' import { User } from './user' @@ -67,7 +67,7 @@ export function getAnteBets( yesAnteId: string, noAnteId: string ) { - const p = getProbability(contract.totalShares) + const p = getDpmProbability(contract.totalShares) const ante = contract.totalBets.YES + contract.totalBets.NO const { createdTime } = contract diff --git a/common/calculate-dpm.ts b/common/calculate-dpm.ts index 8105109e..b0a42b32 100644 --- a/common/calculate-dpm.ts +++ b/common/calculate-dpm.ts @@ -3,12 +3,12 @@ import { Bet } from './bet' import { Binary, DPM, FullContract } from './contract' import { FEES } from './fees' -export function getProbability(totalShares: { [outcome: string]: number }) { +export function getDpmProbability(totalShares: { [outcome: string]: number }) { // For binary contracts only. - return getOutcomeProbability(totalShares, 'YES') + return getDpmOutcomeProbability(totalShares, 'YES') } -export function getOutcomeProbability( +export function getDpmOutcomeProbability( totalShares: { [outcome: string]: number }, @@ -19,22 +19,22 @@ export function getOutcomeProbability( return shares ** 2 / squareSum } -export function getProbabilityAfterBet( +export function getDpmProbabilityAfterBet( totalShares: { [outcome: string]: number }, outcome: string, bet: number ) { - const shares = calculateShares(totalShares, bet, outcome) + const shares = calculateDpmShares(totalShares, bet, outcome) const prevShares = totalShares[outcome] ?? 0 const newTotalShares = { ...totalShares, [outcome]: prevShares + shares } - return getOutcomeProbability(newTotalShares, outcome) + return getDpmOutcomeProbability(newTotalShares, outcome) } -export function getProbabilityAfterSale( +export function getDpmProbabilityAfterSale( totalShares: { [outcome: string]: number }, @@ -45,10 +45,10 @@ export function getProbabilityAfterSale( const newTotalShares = { ...totalShares, [outcome]: prevShares - shares } const predictionOutcome = outcome === 'NO' ? 'YES' : outcome - return getOutcomeProbability(newTotalShares, predictionOutcome) + return getDpmOutcomeProbability(newTotalShares, predictionOutcome) } -export function calculateShares( +export function calculateDpmShares( totalShares: { [outcome: string]: number }, @@ -63,7 +63,7 @@ export function calculateShares( return Math.sqrt(bet ** 2 + shares ** 2 + c) - shares } -export function calculateRawShareValue( +export function calculateDpmRawShareValue( totalShares: { [outcome: string]: number }, @@ -85,7 +85,7 @@ export function calculateRawShareValue( return currentValue - postSaleValue } -export function calculateMoneyRatio( +export function calculateDpmMoneyRatio( contract: FullContract, bet: Bet, shareValue: number @@ -93,7 +93,7 @@ export function calculateMoneyRatio( const { totalShares, totalBets, pool } = contract const { outcome, amount } = bet - const p = getOutcomeProbability(totalShares, outcome) + const p = getDpmOutcomeProbability(totalShares, outcome) const actual = _.sum(Object.values(pool)) - shareValue @@ -103,7 +103,7 @@ export function calculateMoneyRatio( _.sumBy( Object.keys(totalBets), (outcome) => - getOutcomeProbability(totalShares, outcome) * + getDpmOutcomeProbability(totalShares, outcome) * (totalBets as { [outcome: string]: number })[outcome] ) - betAmount @@ -112,42 +112,42 @@ export function calculateMoneyRatio( return actual / expected } -export function calculateShareValue( +export function calculateDpmShareValue( contract: FullContract, bet: Bet ) { const { pool, totalShares } = contract const { shares, outcome } = bet - const shareValue = calculateRawShareValue(totalShares, shares, outcome) - const f = calculateMoneyRatio(contract, bet, shareValue) + const shareValue = calculateDpmRawShareValue(totalShares, shares, outcome) + const f = calculateDpmMoneyRatio(contract, bet, shareValue) const myPool = pool[outcome] const adjShareValue = Math.min(Math.min(1, f) * shareValue, myPool) return adjShareValue } -export function calculateSaleAmount( +export function calculateDpmSaleAmount( contract: FullContract, bet: Bet ) { const { amount } = bet - const winnings = calculateShareValue(contract, bet) - return deductFees(amount, winnings) + const winnings = calculateDpmShareValue(contract, bet) + return deductDpmFees(amount, winnings) } -export function calculatePayout( +export function calculateDpmPayout( contract: FullContract, bet: Bet, outcome: string ) { - if (outcome === 'CANCEL') return calculateCancelPayout(contract, bet) - if (outcome === 'MKT') return calculateMktPayout(contract, bet) + if (outcome === 'CANCEL') return calculateDpmCancelPayout(contract, bet) + if (outcome === 'MKT') return calculateMktDpmPayout(contract, bet) - return calculateStandardPayout(contract, bet, outcome) + return calculateStandardDpmPayout(contract, bet, outcome) } -export function calculateCancelPayout( +export function calculateDpmCancelPayout( contract: FullContract, bet: Bet ) { @@ -158,7 +158,7 @@ export function calculateCancelPayout( return (bet.amount / betTotal) * poolTotal } -export function calculateStandardPayout( +export function calculateStandardDpmPayout( contract: FullContract, bet: Bet, outcome: string @@ -179,7 +179,7 @@ export function calculateStandardPayout( return amount + (1 - FEES) * Math.max(0, winnings - amount) } -export function calculatePayoutAfterCorrectBet( +export function calculateDpmPayoutAfterCorrectBet( contract: FullContract, bet: Bet ) { @@ -206,12 +206,12 @@ export function calculatePayoutAfterCorrectBet( }, } - return calculateStandardPayout(newContract, bet, outcome) + return calculateStandardDpmPayout(newContract, bet, outcome) } -function calculateMktPayout(contract: FullContract, bet: Bet) { +function calculateMktDpmPayout(contract: FullContract, bet: Bet) { if (contract.outcomeType === 'BINARY') - return calculateBinaryMktPayout(contract, bet) + return calculateBinaryMktDpmPayout(contract, bet) const { totalShares, pool } = contract @@ -230,13 +230,13 @@ function calculateMktPayout(contract: FullContract, bet: Bet) { const { outcome, amount, shares } = bet - const betP = getOutcomeProbability(totalShares, outcome) + const betP = getDpmOutcomeProbability(totalShares, outcome) const winnings = ((betP * shares) / weightedShareTotal) * totalPool - return deductFees(amount, winnings) + return deductDpmFees(amount, winnings) } -function calculateBinaryMktPayout( +function calculateBinaryMktDpmPayout( contract: FullContract, bet: Bet ) { @@ -244,7 +244,7 @@ function calculateBinaryMktPayout( const p = resolutionProbability !== undefined ? resolutionProbability - : getProbability(totalShares) + : getDpmProbability(totalShares) const pool = contract.pool.YES + contract.pool.NO @@ -257,16 +257,16 @@ function calculateBinaryMktPayout( const betP = outcome === 'YES' ? p : 1 - p const winnings = ((betP * shares) / weightedShareTotal) * pool - return deductFees(amount, winnings) + return deductDpmFees(amount, winnings) } -export function resolvedPayout(contract: FullContract, bet: Bet) { +export function resolvedDpmPayout(contract: FullContract, bet: Bet) { if (contract.resolution) - return calculatePayout(contract, bet, contract.resolution) + return calculateDpmPayout(contract, bet, contract.resolution) throw new Error('Contract was not resolved') } -export const deductFees = (betAmount: number, winnings: number) => { +export const deductDpmFees = (betAmount: number, winnings: number) => { return winnings > betAmount ? betAmount + (1 - FEES) * (winnings - betAmount) : winnings diff --git a/common/new-bet.ts b/common/new-bet.ts index ce8bdc1a..f1df7f70 100644 --- a/common/new-bet.ts +++ b/common/new-bet.ts @@ -1,9 +1,9 @@ import * as _ from 'lodash' import { Bet, MAX_LOAN_PER_CONTRACT } from './bet' import { - calculateShares, - getProbability, - getOutcomeProbability, + calculateDpmShares, + getDpmProbability, + getDpmOutcomeProbability, } from './calculate-dpm' import { calculateCpmmShares, getCpmmProbability } from './calculate-cpmm' import { @@ -71,7 +71,7 @@ export const getNewBinaryDpmBetInfo = ( ? { YES: yesPool + amount, NO: noPool } : { YES: yesPool, NO: noPool + amount } - const shares = calculateShares(contract.totalShares, amount, outcome) + const shares = calculateDpmShares(contract.totalShares, amount, outcome) const { YES: yesShares, NO: noShares } = contract.totalShares @@ -87,8 +87,8 @@ export const getNewBinaryDpmBetInfo = ( ? { YES: yesBets + amount, NO: noBets } : { YES: yesBets, NO: noBets + amount } - const probBefore = getProbability(contract.totalShares) - const probAfter = getProbability(newTotalShares) + const probBefore = getDpmProbability(contract.totalShares) + const probAfter = getDpmProbability(newTotalShares) const newBet: Bet = { id: newBetId, @@ -121,7 +121,7 @@ export const getNewMultiBetInfo = ( const prevOutcomePool = pool[outcome] ?? 0 const newPool = { ...pool, [outcome]: prevOutcomePool + amount } - const shares = calculateShares(contract.totalShares, amount, outcome) + const shares = calculateDpmShares(contract.totalShares, amount, outcome) const prevShares = totalShares[outcome] ?? 0 const newTotalShares = { ...totalShares, [outcome]: prevShares + shares } @@ -129,8 +129,8 @@ export const getNewMultiBetInfo = ( const prevTotalBets = totalBets[outcome] ?? 0 const newTotalBets = { ...totalBets, [outcome]: prevTotalBets + amount } - const probBefore = getOutcomeProbability(totalShares, outcome) - const probAfter = getOutcomeProbability(newTotalShares, outcome) + const probBefore = getDpmOutcomeProbability(totalShares, outcome) + const probAfter = getDpmOutcomeProbability(newTotalShares, outcome) const newBet: Bet = { id: newBetId, diff --git a/common/payouts.ts b/common/payouts.ts index 306b6051..9c9dd62e 100644 --- a/common/payouts.ts +++ b/common/payouts.ts @@ -1,7 +1,7 @@ import * as _ from 'lodash' import { Bet } from './bet' -import { deductFees, getProbability } from './calculate-dpm' +import { deductDpmFees, getDpmProbability } from './calculate-dpm' import { Binary, Contract, @@ -124,7 +124,7 @@ export const getMktPayouts = ( ) => { const p = resolutionProbability === undefined - ? getProbability(contract.totalShares) + ? getDpmProbability(contract.totalShares) : resolutionProbability const weightedShareTotal = _.sumBy(bets, (b) => @@ -137,7 +137,7 @@ export const getMktPayouts = ( const betP = outcome === 'YES' ? p : 1 - p const winnings = ((betP * shares) / weightedShareTotal) * pool const profit = winnings - amount - const payout = deductFees(amount, winnings) + const payout = deductDpmFees(amount, winnings) return { userId, profit, payout } }) @@ -167,14 +167,14 @@ export const getMktFixedPayouts = ( ) => { const p = resolutionProbability === undefined - ? getProbability(contract.pool) + ? getDpmProbability(contract.pool) : resolutionProbability const payouts = bets.map(({ userId, outcome, amount, shares }) => { const betP = outcome === 'YES' ? p : 1 - p const winnings = betP * shares const profit = winnings - amount - const payout = deductFees(amount, winnings) + const payout = deductDpmFees(amount, winnings) return { userId, profit, payout } }) diff --git a/common/sell-bet.ts b/common/sell-bet.ts index 7013c3d9..42b8f30b 100644 --- a/common/sell-bet.ts +++ b/common/sell-bet.ts @@ -1,8 +1,8 @@ import { Bet } from './bet' import { - calculateShareValue, - deductFees, - getProbability, + getDpmProbability, + calculateDpmShareValue, + deductDpmFees, } from './calculate-dpm' import { calculateCpmmSale, @@ -22,7 +22,7 @@ export const getSellBetInfo = ( const { pool, totalShares, totalBets } = contract const { id: betId, amount, shares, outcome, loanAmount } = bet - const adjShareValue = calculateShareValue(contract, bet) + const adjShareValue = calculateDpmShareValue(contract, bet) const newPool = { ...pool, [outcome]: pool[outcome] - adjShareValue } @@ -33,12 +33,12 @@ export const getSellBetInfo = ( const newTotalBets = { ...totalBets, [outcome]: totalBets[outcome] - amount } - const probBefore = getProbability(totalShares) - const probAfter = getProbability(newTotalShares) + const probBefore = getDpmProbability(totalShares) + const probAfter = getDpmProbability(newTotalShares) const profit = adjShareValue - amount const creatorFee = CREATOR_FEE * Math.max(0, profit) - const saleAmount = deductFees(amount, adjShareValue) + const saleAmount = deductDpmFees(amount, adjShareValue) console.log( 'SELL M$', @@ -94,7 +94,7 @@ export const getCpmmSellBetInfo = ( const profit = saleValue - amount const creatorFee = CREATOR_FEE * Math.max(0, profit) - const saleAmount = deductFees(amount, profit) + const saleAmount = deductDpmFees(amount, profit) console.log( 'SELL M$', diff --git a/functions/src/emails.ts b/functions/src/emails.ts index 0d5d38c7..c239ab0f 100644 --- a/functions/src/emails.ts +++ b/functions/src/emails.ts @@ -1,7 +1,7 @@ import _ = require('lodash') import { Answer } from '../../common/answer' import { Bet } from '../../common/bet' -import { getProbability } from '../../common/calculate-dpm' +import { getDpmProbability } from '../../common/calculate-dpm' import { Comment } from '../../common/comment' import { Contract } from '../../common/contract' import { CREATOR_FEE } from '../../common/fees' @@ -59,7 +59,7 @@ export const sendMarketResolutionEmail = async ( const user = await getUser(userId) if (!user) return - const prob = resolutionProbability ?? getProbability(contract.totalShares) + const prob = resolutionProbability ?? getDpmProbability(contract.totalShares) const outcome = toDisplayResolution(resolution, prob, resolutions) diff --git a/functions/src/markets.ts b/functions/src/markets.ts index 31bc7d64..3f804b7d 100644 --- a/functions/src/markets.ts +++ b/functions/src/markets.ts @@ -4,7 +4,7 @@ import * as _ from 'lodash' import { getValues } from './utils' import { Contract } from '../../common/contract' -import { getProbability } from '../../common/calculate-dpm' +import { getDpmProbability } from '../../common/calculate-dpm' const cache = { lastUpdated: 0, data: '' } @@ -50,7 +50,7 @@ const getContractInfo = ({ description, url: `https://manifold.markets/${creatorUsername}/${slug}`, pool: pool.YES + pool.NO, - probability: getProbability(totalShares), + probability: getDpmProbability(totalShares), volume7Days, volume24Hours, isResolved, diff --git a/functions/src/scripts/correct-bet-probability.ts b/functions/src/scripts/correct-bet-probability.ts index 50678034..e6f1939b 100644 --- a/functions/src/scripts/correct-bet-probability.ts +++ b/functions/src/scripts/correct-bet-probability.ts @@ -5,7 +5,7 @@ import { initAdmin } from './script-init' initAdmin('stephen') import { Bet } from '../../../common/bet' -import { getProbability } from '../../../common/calculate-dpm' +import { getDpmProbability } from '../../../common/calculate-dpm' import { Contract } from '../../../common/contract' type DocRef = admin.firestore.DocumentReference @@ -19,7 +19,7 @@ async function migrateContract(contractRef: DocRef, contract: Contract) { const lastBet = _.sortBy(bets, (bet) => -bet.createdTime)[0] if (lastBet) { - const probAfter = getProbability(contract.totalShares) + const probAfter = getDpmProbability(contract.totalShares) await firestore .doc(`contracts/${contract.id}/bets/${lastBet.id}`) diff --git a/functions/src/scripts/migrate-to-dpm-2.ts b/functions/src/scripts/migrate-to-dpm-2.ts index e61fa302..a2235f10 100644 --- a/functions/src/scripts/migrate-to-dpm-2.ts +++ b/functions/src/scripts/migrate-to-dpm-2.ts @@ -6,7 +6,10 @@ initAdmin('stephenDev') import { Contract } from '../../../common/contract' import { Bet } from '../../../common/bet' -import { calculateShares, getProbability } from '../../../common/calculate-dpm' +import { + calculateDpmShares, + getDpmProbability, +} from '../../../common/calculate-dpm' import { getSellBetInfo } from '../../../common/sell-bet' import { User } from '../../../common/user' @@ -126,7 +129,7 @@ async function recalculateContract( continue } - const shares = calculateShares(totalShares, bet.amount, bet.outcome) + const shares = calculateDpmShares(totalShares, bet.amount, bet.outcome) const probBefore = p const ind = bet.outcome === 'YES' ? 1 : 0 @@ -145,7 +148,7 @@ async function recalculateContract( NO: totalBets.NO + (1 - ind) * bet.amount, } - p = getProbability(totalShares) + p = getDpmProbability(totalShares) const probAfter = p diff --git a/functions/src/update-user-metrics.ts b/functions/src/update-user-metrics.ts index ec18e2e8..7de7fddd 100644 --- a/functions/src/update-user-metrics.ts +++ b/functions/src/update-user-metrics.ts @@ -6,7 +6,7 @@ import { getValues } from './utils' import { Contract } from '../../common/contract' import { Bet } from '../../common/bet' import { User } from '../../common/user' -import { calculatePayout } from '../../common/calculate-dpm' +import { calculateDpmPayout } from '../../common/calculate-dpm' const firestore = admin.firestore() @@ -52,7 +52,7 @@ const computeInvestmentValue = async ( if (!contract || contract.isResolved) return 0 if (bet.sale || bet.isSold) return 0 - const payout = calculatePayout(contract, bet, 'MKT') + const payout = calculateDpmPayout(contract, bet, 'MKT') return payout - (bet.loanAmount ?? 0) }) } diff --git a/web/components/answers/answer-bet-panel.tsx b/web/components/answers/answer-bet-panel.tsx index 84e5fb45..c4c5b752 100644 --- a/web/components/answers/answer-bet-panel.tsx +++ b/web/components/answers/answer-bet-panel.tsx @@ -18,10 +18,10 @@ import { import { InfoTooltip } from '../info-tooltip' import { useUser } from '../../hooks/use-user' import { - getProbabilityAfterBet, - getOutcomeProbability, - calculateShares, - calculatePayoutAfterCorrectBet, + getDpmProbabilityAfterBet, + getDpmOutcomeProbability, + calculateDpmShares, + calculateDpmPayoutAfterCorrectBet, } from '../../../common/calculate-dpm' import { firebaseLogin } from '../../lib/firebase/users' import { Bet } from '../../../common/bet' @@ -76,18 +76,22 @@ export function AnswerBetPanel(props: { const betDisabled = isSubmitting || !betAmount || error - const initialProb = getOutcomeProbability(contract.totalShares, answer.id) + const initialProb = getDpmOutcomeProbability(contract.totalShares, answer.id) - const resultProb = getProbabilityAfterBet( + const resultProb = getDpmProbabilityAfterBet( contract.totalShares, answerId, betAmount ?? 0 ) - const shares = calculateShares(contract.totalShares, betAmount ?? 0, answerId) + const shares = calculateDpmShares( + contract.totalShares, + betAmount ?? 0, + answerId + ) const currentPayout = betAmount - ? calculatePayoutAfterCorrectBet(contract, { + ? calculateDpmPayoutAfterCorrectBet(contract, { outcome: answerId, amount: betAmount, shares, diff --git a/web/components/answers/answer-item.tsx b/web/components/answers/answer-item.tsx index 883bd86d..ad76774b 100644 --- a/web/components/answers/answer-item.tsx +++ b/web/components/answers/answer-item.tsx @@ -10,7 +10,7 @@ import { Avatar } from '../avatar' import { SiteLink } from '../site-link' import { BuyButton } from '../yes-no-selector' import { formatPercent } from '../../../common/util/format' -import { getOutcomeProbability } from '../../../common/calculate-dpm' +import { getDpmOutcomeProbability } from '../../../common/calculate-dpm' import { tradingAllowed } from '../../lib/firebase/contracts' import { AnswerBetPanel } from './answer-bet-panel' import { ContractFeed } from '../contract-feed' @@ -38,7 +38,7 @@ export function AnswerItem(props: { const { username, avatarUrl, name, number, text } = answer const isChosen = chosenProb !== undefined - const prob = getOutcomeProbability(totalShares, answer.id) + const prob = getDpmOutcomeProbability(totalShares, answer.id) const roundedProb = Math.round(prob * 100) const probPercent = formatPercent(prob) const wasResolvedTo = diff --git a/web/components/answers/answers-panel.tsx b/web/components/answers/answers-panel.tsx index a5c748c1..d30499f6 100644 --- a/web/components/answers/answers-panel.tsx +++ b/web/components/answers/answers-panel.tsx @@ -6,7 +6,7 @@ import { DPM, FreeResponse, FullContract } from '../../../common/contract' import { Col } from '../layout/col' import { formatPercent } from '../../../common/util/format' import { useUser } from '../../hooks/use-user' -import { getOutcomeProbability } from '../../../common/calculate-dpm' +import { getDpmOutcomeProbability } from '../../../common/calculate-dpm' import { useAnswers } from '../../hooks/use-answers' import { tradingAllowed } from '../../lib/firebase/contracts' import { AnswerItem } from './answer-item' @@ -34,7 +34,7 @@ export function AnswersPanel(props: { ), ..._.sortBy( otherAnswers, - (answer) => -1 * getOutcomeProbability(contract.totalShares, answer.id) + (answer) => -1 * getDpmOutcomeProbability(contract.totalShares, answer.id) ), ] @@ -102,7 +102,7 @@ export function AnswersPanel(props: { ) : (
None of the above:{' '} - {formatPercent(getOutcomeProbability(contract.totalShares, '0'))} + {formatPercent(getDpmOutcomeProbability(contract.totalShares, '0'))}
)} diff --git a/web/components/answers/create-answer-panel.tsx b/web/components/answers/create-answer-panel.tsx index 72b70356..b4b06543 100644 --- a/web/components/answers/create-answer-panel.tsx +++ b/web/components/answers/create-answer-panel.tsx @@ -21,9 +21,9 @@ import { import { InfoTooltip } from '../info-tooltip' import { useUser } from '../../hooks/use-user' import { - getProbabilityAfterBet, - calculateShares, - calculatePayoutAfterCorrectBet, + getDpmProbabilityAfterBet, + calculateDpmShares, + calculateDpmPayoutAfterCorrectBet, } from '../../../common/calculate-dpm' import { firebaseLogin } from '../../lib/firebase/users' import { Bet } from '../../../common/bet' @@ -59,16 +59,16 @@ export function CreateAnswerPanel(props: { } } - const resultProb = getProbabilityAfterBet( + const resultProb = getDpmProbabilityAfterBet( contract.totalShares, 'new', betAmount ?? 0 ) - const shares = calculateShares(contract.totalShares, betAmount ?? 0, 'new') + const shares = calculateDpmShares(contract.totalShares, betAmount ?? 0, 'new') const currentPayout = betAmount - ? calculatePayoutAfterCorrectBet(contract, { + ? calculateDpmPayoutAfterCorrectBet(contract, { outcome: 'new', amount: betAmount, shares, diff --git a/web/components/bet-panel.tsx b/web/components/bet-panel.tsx index c00f6a5a..38f23f3d 100644 --- a/web/components/bet-panel.tsx +++ b/web/components/bet-panel.tsx @@ -14,10 +14,10 @@ import { } from '../../common/util/format' import { Title } from './title' import { - getProbability, - calculateShares, - getProbabilityAfterBet, - calculatePayoutAfterCorrectBet, + getDpmProbability, + calculateDpmShares, + getDpmProbabilityAfterBet, + calculateDpmPayoutAfterCorrectBet, } from '../../common/calculate-dpm' import { firebaseLogin } from '../lib/firebase/users' import { Bet } from '../../common/bet' @@ -107,23 +107,23 @@ export function BetPanel(props: { const betDisabled = isSubmitting || !betAmount || error - const initialProb = getProbability(contract.totalShares) + const initialProb = getDpmProbability(contract.totalShares) - const outcomeProb = getProbabilityAfterBet( + const outcomeProb = getDpmProbabilityAfterBet( contract.totalShares, betChoice || 'YES', betAmount ?? 0 ) const resultProb = betChoice === 'NO' ? 1 - outcomeProb : outcomeProb - const shares = calculateShares( + const shares = calculateDpmShares( contract.totalShares, betAmount ?? 0, betChoice || 'YES' ) const currentPayout = betAmount - ? calculatePayoutAfterCorrectBet(contract, { + ? calculateDpmPayoutAfterCorrectBet(contract, { outcome: betChoice, amount: betAmount, shares, diff --git a/web/components/bets-list.tsx b/web/components/bets-list.tsx index 88312766..1a975052 100644 --- a/web/components/bets-list.tsx +++ b/web/components/bets-list.tsx @@ -23,12 +23,12 @@ import { import { Row } from './layout/row' import { UserLink } from './user-page' import { - calculatePayout, - calculateSaleAmount, - getOutcomeProbability, - getProbability, - getProbabilityAfterSale, - resolvedPayout, + calculateDpmPayout, + calculateDpmSaleAmount, + getDpmOutcomeProbability, + getDpmProbability, + getDpmProbabilityAfterSale, + resolvedDpmPayout, } from '../../common/calculate-dpm' import { sellBet } from '../lib/firebase/api-call' import { ConfirmationButton } from './confirmation-button' @@ -82,7 +82,7 @@ export function BetsList(props: { user: User }) { if (bet.isSold || bet.sale) return 0 const contract = contracts.find((c) => c.id === contractId) - const payout = contract ? calculatePayout(contract, bet, 'MKT') : 0 + const payout = contract ? calculateDpmPayout(contract, bet, 'MKT') : 0 return payout - (bet.loanAmount ?? 0) }) } @@ -288,21 +288,21 @@ export function MyBetsSummary(props: { const betsTotal = _.sumBy(excludeSales, (bet) => bet.amount) const betsPayout = resolution - ? _.sumBy(excludeSales, (bet) => resolvedPayout(contract, bet)) + ? _.sumBy(excludeSales, (bet) => resolvedDpmPayout(contract, bet)) : 0 const yesWinnings = _.sumBy(excludeSales, (bet) => - calculatePayout(contract, bet, 'YES') + calculateDpmPayout(contract, bet, 'YES') ) const noWinnings = _.sumBy(excludeSales, (bet) => - calculatePayout(contract, bet, 'NO') + calculateDpmPayout(contract, bet, 'NO') ) // const p = getProbability(contract.totalShares) // const expectation = p * yesWinnings + (1 - p) * noWinnings const marketWinnings = _.sumBy(excludeSales, (bet) => - calculatePayout(contract, bet, 'MKT') + calculateDpmPayout(contract, bet, 'MKT') ) const currentValue = resolution ? betsPayout : marketWinnings @@ -385,7 +385,7 @@ export function MyBetsSummary(props: { <> Payout at{' '} - {formatPercent(getProbability(contract.totalShares))} + {formatPercent(getDpmProbability(contract.totalShares))} ) : ( @@ -473,15 +473,15 @@ function BetRow(props: { bet: Bet; contract: Contract; saleBet?: Bet }) { ) : ( formatMoney( isResolved - ? resolvedPayout(contract, bet) - : calculateSaleAmount(contract, bet) + ? resolvedDpmPayout(contract, bet) + : calculateDpmSaleAmount(contract, bet) ) ) const payoutIfChosenDisplay = bet.outcome === '0' && bet.isAnte ? 'N/A' - : formatMoney(calculatePayout(contract, bet, bet.outcome)) + : formatMoney(calculateDpmPayout(contract, bet, bet.outcome)) return ( @@ -519,18 +519,18 @@ function SellButton(props: { contract: Contract; bet: Bet }) { const [isSubmitting, setIsSubmitting] = useState(false) - const initialProb = getOutcomeProbability( + const initialProb = getDpmOutcomeProbability( contract.totalShares, outcome === 'NO' ? 'YES' : outcome ) - const outcomeProb = getProbabilityAfterSale( + const outcomeProb = getDpmProbabilityAfterSale( contract.totalShares, outcome, shares ) - const saleAmount = calculateSaleAmount(contract, bet) + const saleAmount = calculateDpmSaleAmount(contract, bet) return ( () - const [prob, setProb] = useState(getProbability(contract.totalShares) * 100) + const [prob, setProb] = useState( + getDpmProbability(contract.totalShares) * 100 + ) const [isSubmitting, setIsSubmitting] = useState(false) const [error, setError] = useState(undefined) diff --git a/web/lib/firebase/contracts.ts b/web/lib/firebase/contracts.ts index ad2a4348..e6d2446d 100644 --- a/web/lib/firebase/contracts.ts +++ b/web/lib/firebase/contracts.ts @@ -18,7 +18,7 @@ import _ from 'lodash' import { app } from './init' import { getValues, listenForValue, listenForValues } from './utils' import { Binary, Contract, FullContract } from '../../../common/contract' -import { getProbability } from '../../../common/calculate-dpm' +import { getDpmProbability } from '../../../common/calculate-dpm' import { createRNG, shuffle } from '../../../common/util/random' import { getCpmmProbability } from '../../../common/calculate-cpmm' export type { Contract } @@ -47,7 +47,7 @@ export function getBinaryProbPercent(contract: FullContract) { const prob = resolutionProbability ?? mechanism === 'cpmm-1' ? getCpmmProbability(pool) - : getProbability(totalShares) + : getDpmProbability(totalShares) const probPercent = Math.round(prob * 100) + '%' return probPercent diff --git a/web/pages/api/v0/_types.ts b/web/pages/api/v0/_types.ts index f793813e..beb520ec 100644 --- a/web/pages/api/v0/_types.ts +++ b/web/pages/api/v0/_types.ts @@ -1,5 +1,5 @@ import { Bet } from '../../../../common/bet' -import { getProbability } from '../../../../common/calculate-dpm' +import { getDpmProbability } from '../../../../common/calculate-dpm' import { Comment } from '../../../../common/comment' import { Contract } from '../../../../common/contract' @@ -72,7 +72,7 @@ export function toLiteMarket({ tags, url: `https://manifold.markets/${creatorUsername}/${slug}`, pool: pool.YES + pool.NO, - probability: getProbability(totalShares), + probability: getDpmProbability(totalShares), volume7Days, volume24Hours, isResolved, diff --git a/web/pages/make-predictions.tsx b/web/pages/make-predictions.tsx index c4e298fa..5c60b284 100644 --- a/web/pages/make-predictions.tsx +++ b/web/pages/make-predictions.tsx @@ -3,7 +3,7 @@ import dayjs from 'dayjs' import Link from 'next/link' import { useState } from 'react' import Textarea from 'react-expanding-textarea' -import { getProbability } from '../../common/calculate-dpm' +import { getDpmProbability } from '../../common/calculate-dpm' import { parseWordsAsTags } from '../../common/util/parse' import { AmountInput } from '../components/amount-input' import { InfoTooltip } from '../components/info-tooltip' @@ -26,7 +26,7 @@ type Prediction = { } function toPrediction(contract: Contract): Prediction { - const startProb = getProbability(contract.totalShares) + const startProb = getDpmProbability(contract.totalShares) return { question: contract.question, description: contract.description,