c183e00d47
* cpmm initial commit: common logic, cloud functions * remove unnecessary property * contract type * rename 'calculate.ts' => 'calculate-dpm.ts' * rename dpm calculations * use focus hook * mechanism-agnostic calculations * bet panel: use new calculations * use new calculations * delete markets cloud function * use correct contract type in scripts / functions * calculate fixed payouts; bets list calculations * new bet: use calculateCpmmPurchase * getOutcomeProbabilityAfterBet * use deductFixedFees * fix auto-refactor * fix antes * separate logic to payouts-dpm, payouts-fixed * liquidity provision tracking * remove comment * liquidity label * create liquidity provision even if no ante bet * liquidity fee * use all bets for getFixedCancelPayouts * updateUserBalance: allow negative balances * store initialProbability in contracts * turn on liquidity fee; turn off creator fee * Include time param in tweet url, so image preview is re-fetched * share redemption * cpmm ContractBetsTable display * formatMoney: handle minus zero * filter out redemption bets * track fees on contract and bets; change fee schedule for cpmm markets; only pay out creator fees at resolution * small fixes * small fixes * Redeem shares pays back loans first * Fix initial point on graph * calculateCpmmPurchase: deduct creator fee * Filter out redemption bets from feed * set env to dev for user-testing purposes * creator fees messaging * new cfmm: k = y^(1-p) * n^p * addCpmmLiquidity * correct price function * enable fees * handle overflow * liquidity provision tracking * raise fees * Fix merge error * fix dpm free response payout for single outcome * Fix DPM payout calculation * Remove hardcoding as dev Co-authored-by: James Grugett <jahooma@gmail.com> |
||
---|---|---|
.. | ||
src | ||
.gitignore | ||
package.json | ||
README.md | ||
tsconfig.json | ||
yarn.lock |
NOTE: Adapted from One Word's /functions doc. Fix any errors you see!
Firestore Cloud Functions
This is code that doesn't make sense on the frontend client, e.g.
- Long-running or slow operation (database)
- Tasks that need to be run every so often (syncing email list to Mailjet)
- Anything we should't trust to clients (secrets, auth)
If you want to make and test changes, you'll have to do a bit of setup...
Installing
Adapted from https://firebase.google.com/docs/functions/get-started
$ cd functions
to switch to this folder$ yarn global add firebase-tools
to install the Firebase CLI globally$ yarn
to install JS dependencies$ firebase functions:config:get > .runtimeconfig.json
to cache secrets for local dev (TODO: maybe not for Manifold)$ firebase use dev
to choose the dev project
Developing locally
$ firebase login
if you aren't logged into Firebase via commandline yet.$ yarn dev
to spin up the emulators The Emulator UI is at http://localhost:4000; the functions are hosted on :5001. Note: You have to kill and restart emulators when you change code; no hot reload =(- Connect to emulators by enabling
functions.useEmulator('localhost', 5001)
Debugging
- Find local logs directly in the shell that ran
$ yarn dev
- Find deployed logs here
Deploying
$ firebase use prod
to switch to prod$ yarn deploy
to push your changes live! (Future TODO: auto-deploy functions on Git push)
Secrets management
Secrets are strings that shouldn't be checked into Git (eg API keys, passwords). We store these using environment config on Firebase Functions. Some useful workflows:
- Set a secret:
$ firebase functions:config:set stripe.test_secret="THE-API-KEY"
- Preview all secrets:
$ firebase functions:config:get
- Cache for local dev:
$ firebase functions:config:get > .runtimeconfig.json