drizzle liquidity

This commit is contained in:
mantikoros 2022-10-10 12:45:13 -05:00
parent 760ebcf38f
commit c318e363ba
2 changed files with 62 additions and 0 deletions

View File

@ -0,0 +1,61 @@
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
import { CPMMContract } from '../../common/contract'
import { batchedWaitAll } from '../../common/util/promise'
import { APIError } from '../../common/api'
import { addCpmmLiquidity } from 'common/calculate-cpmm'
import { formatMoney } from 'common/util/format'
const firestore = admin.firestore()
export const drizzleLiquidity = functions.pubsub
.schedule('every 2 minutes')
.onRun(async () => {
const snap = await firestore
.collection('contracts')
.where('subsidyPool', '>', 1e-7)
.get()
const contractIds = snap.docs.map((doc) => doc.id)
await batchedWaitAll(
contractIds.map((cid) => () => drizzleMarket(cid)),
10
)
})
const drizzleMarket = async (contractId: string) => {
await firestore.runTransaction(async (trans) => {
const snap = await trans.get(firestore.doc(`contracts/${contractId}`))
const contract = snap.data() as CPMMContract
const { subsidyPool, pool, p, slug } = contract
if (subsidyPool ?? 0 < 1e-7) return
const r = Math.random()
const amount = subsidyPool <= 1 ? subsidyPool : r * 0.02 * subsidyPool
const { newPool, newP } = addCpmmLiquidity(pool, p, amount)
if (!isFinite(newP)) {
throw new APIError(
500,
'Liquidity injection rejected due to overflow error.'
)
}
await trans.update(firestore.doc(`contracts/${contract.id}`), {
pool: newPool,
p: newP,
subsidyPool: subsidyPool - amount,
})
console.log(
'added subsidy',
formatMoney(amount),
'of',
formatMoney(subsidyPool),
'pool to',
slug
)
})
}

View File

@ -31,6 +31,7 @@ export * from './reset-weekly-emails-flags'
export * from './on-update-contract-follow'
export * from './on-update-like'
export * from './weekly-portfolio-emails'
export * from './drizzle-liquidity'
// v2
export * from './health'