Resolve markets again script
This commit is contained in:
		
							parent
							
								
									204d302d87
								
							
						
					
					
						commit
						e2dc4c6b8f
					
				|  | @ -36,6 +36,7 @@ import { | |||
|   DEV_HOUSE_LIQUIDITY_PROVIDER_ID, | ||||
|   HOUSE_LIQUIDITY_PROVIDER_ID, | ||||
| } from '../../common/antes' | ||||
| import { User } from 'common/user' | ||||
| 
 | ||||
| const bodySchema = z.object({ | ||||
|   contractId: z.string(), | ||||
|  | @ -89,13 +90,10 @@ export const resolvemarket = newEndpoint(opts, async (req, auth) => { | |||
|   if (!contractSnap.exists) | ||||
|     throw new APIError(404, 'No contract exists with the provided ID') | ||||
|   const contract = contractSnap.data() as Contract | ||||
|   const { creatorId, closeTime } = contract | ||||
|   const { creatorId } = contract | ||||
|   const firebaseUser = await admin.auth().getUser(auth.uid) | ||||
| 
 | ||||
|   const { value, resolutions, probabilityInt, outcome } = getResolutionParams( | ||||
|     contract, | ||||
|     req.body | ||||
|   ) | ||||
|   const resolutionParams = getResolutionParams(contract, req.body) | ||||
| 
 | ||||
|   if ( | ||||
|     creatorId !== auth.uid && | ||||
|  | @ -109,6 +107,16 @@ export const resolvemarket = newEndpoint(opts, async (req, auth) => { | |||
|   const creator = await getUser(creatorId) | ||||
|   if (!creator) throw new APIError(500, 'Creator not found') | ||||
| 
 | ||||
|   return await resolveMarket(contract, creator, resolutionParams) | ||||
| }) | ||||
| 
 | ||||
| export const resolveMarket = async ( | ||||
|   contract: Contract, | ||||
|   creator: User, | ||||
|   { value, resolutions, probabilityInt, outcome }: ResolutionParams | ||||
| ) => { | ||||
|   const { creatorId, closeTime, id: contractId } = contract | ||||
| 
 | ||||
|   const resolutionProbability = | ||||
|     probabilityInt !== undefined ? probabilityInt / 100 : undefined | ||||
| 
 | ||||
|  | @ -183,6 +191,7 @@ export const resolvemarket = newEndpoint(opts, async (req, auth) => { | |||
|     ) | ||||
| 
 | ||||
|   const userCount = uniqBy(payouts, 'userId').length | ||||
|   const contractDoc = firestore.doc(`contracts/${contractId}`) | ||||
| 
 | ||||
|   if (userCount <= 499) { | ||||
|     await firestore.runTransaction(async (transaction) => { | ||||
|  | @ -226,7 +235,7 @@ export const resolvemarket = newEndpoint(opts, async (req, auth) => { | |||
|   ) | ||||
| 
 | ||||
|   return updatedContract | ||||
| }) | ||||
| } | ||||
| 
 | ||||
| function getResolutionParams(contract: Contract, body: string) { | ||||
|   const { outcomeType } = contract | ||||
|  | @ -292,6 +301,8 @@ function getResolutionParams(contract: Contract, body: string) { | |||
|   throw new APIError(500, `Invalid outcome type: ${outcomeType}`) | ||||
| } | ||||
| 
 | ||||
| type ResolutionParams = ReturnType<typeof getResolutionParams> | ||||
| 
 | ||||
| function validateAnswer( | ||||
|   contract: FreeResponseContract | MultipleChoiceContract, | ||||
|   answer: number | ||||
|  |  | |||
							
								
								
									
										59
									
								
								functions/src/scripts/resolve-markets-again.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								functions/src/scripts/resolve-markets-again.ts
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,59 @@ | |||
| import { initAdmin } from './script-init' | ||||
| initAdmin() | ||||
| 
 | ||||
| import { zip } from 'lodash' | ||||
| import { filterDefined } from 'common/util/array' | ||||
| import { resolveMarket } from '../resolve-market' | ||||
| import { getContract, getUser } from '../utils' | ||||
| 
 | ||||
| if (require.main === module) { | ||||
|   const contractIds = process.argv.slice(2) | ||||
|   if (contractIds.length === 0) { | ||||
|     throw new Error('No contract ids provided') | ||||
|   } | ||||
|   resolveMarketsAgain(contractIds).then(() => process.exit(0)) | ||||
| } | ||||
| 
 | ||||
| async function resolveMarketsAgain(contractIds: string[]) { | ||||
|   const maybeContracts = await Promise.all(contractIds.map(getContract)) | ||||
|   if (maybeContracts.some((c) => !c)) { | ||||
|     throw new Error('Invalid contract id') | ||||
|   } | ||||
|   const contracts = filterDefined(maybeContracts) | ||||
| 
 | ||||
|   const maybeCreators = await Promise.all( | ||||
|     contracts.map((c) => getUser(c.creatorId)) | ||||
|   ) | ||||
|   if (maybeCreators.some((c) => !c)) { | ||||
|     throw new Error('No creator found') | ||||
|   } | ||||
|   const creators = filterDefined(maybeCreators) | ||||
| 
 | ||||
|   if ( | ||||
|     !contracts.every((c) => c.resolution === 'YES' || c.resolution === 'NO') | ||||
|   ) { | ||||
|     throw new Error('Only YES or NO resolutions supported') | ||||
|   } | ||||
| 
 | ||||
|   const resolutionParams = contracts.map((c) => ({ | ||||
|     outcome: c.resolution as string, | ||||
|     value: undefined, | ||||
|     probabilityInt: undefined, | ||||
|     resolutions: undefined, | ||||
|   })) | ||||
| 
 | ||||
|   const params = zip(contracts, creators, resolutionParams) | ||||
| 
 | ||||
|   for (const [contract, creator, resolutionParams] of params) { | ||||
|     if (contract && creator && resolutionParams) { | ||||
|       console.log('Resolving', contract.question) | ||||
|       try { | ||||
|         await resolveMarket(contract, creator, resolutionParams) | ||||
|       } catch (e) { | ||||
|         console.log(e) | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   console.log(`Resolved all contracts.`) | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user