manifold/web/lib/service/create-contract.ts
Austin Chen d4bb419478 Prettier everything
(Hopefully for the last time)
2021-12-13 23:30:09 -08:00

57 lines
1.4 KiB
TypeScript

import { Contract, getContract, setContract } from '../firebase/contracts'
import { User } from '../firebase/users'
import { randomString } from '../util/random-string'
import { slugify } from '../util/slugify'
// consider moving to cloud function for security
export async function createContract(
question: string,
description: string,
initialProb: number,
creator: User
) {
const slug = slugify(question).substr(0, 35)
const preexistingContract = await getContract(slug)
const contractId = preexistingContract ? slug + '-' + randomString() : slug
const { seedYes, seedNo } = calcSeedBets(initialProb)
const contract: Contract = {
id: contractId,
outcomeType: 'BINARY',
creatorId: creator.id,
creatorName: creator.name,
question: question.trim(),
description: description.trim(),
seedAmounts: { YES: seedYes, NO: seedNo },
pot: { YES: seedYes, NO: seedNo },
isResolved: false,
// TODO: Set create time to Firestore timestamp
createdTime: Date.now(),
lastUpdatedTime: Date.now(),
}
await setContract(contract)
return contract
}
export function calcSeedBets(initialProb: number, initialCapital = 1000) {
const p = initialProb / 100.0
const seedYes =
p === 0.5
? p * initialCapital
: -(initialCapital * (-p + Math.sqrt((-1 + p) * -p))) / (-1 + 2 * p)
const seedNo = initialCapital - seedYes
return { seedYes, seedNo }
}