Merge branch 'vscode_files' into automated-market-resolution
# Conflicts: # .vscode/settings.json
This commit is contained in:
		
						commit
						b1532f766a
					
				
							
								
								
									
										16
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | ||||||
|  | { | ||||||
|  |   // Use IntelliSense to learn about possible attributes. | ||||||
|  |   // Hover to view descriptions of existing attributes. | ||||||
|  |   // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | ||||||
|  |   "version": "0.2.0", | ||||||
|  |   "configurations": [ | ||||||
|  |     { | ||||||
|  |       "name": "Attach to Chrome", | ||||||
|  |       "type": "chrome", | ||||||
|  |       "request": "attach", | ||||||
|  |       "port": 9222, // chrome needs to be started with the parameter "--remote-debugging-port=9222" | ||||||
|  |       "urlFilter": "http://localhost:3000/*", | ||||||
|  |       "webRoot": "${workspaceFolder}/web" | ||||||
|  |     } | ||||||
|  |   ] | ||||||
|  | } | ||||||
							
								
								
									
										11
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							|  | @ -2,4 +2,15 @@ | ||||||
|   "javascript.preferences.importModuleSpecifier": "shortest", |   "javascript.preferences.importModuleSpecifier": "shortest", | ||||||
|   "typescript.preferences.importModuleSpecifier": "shortest", |   "typescript.preferences.importModuleSpecifier": "shortest", | ||||||
|   "files.eol": "\r\n", |   "files.eol": "\r\n", | ||||||
|  | <<<<<<< HEAD | ||||||
|  | ======= | ||||||
|  |   "search.exclude": { | ||||||
|  |     "**/node_modules": true, | ||||||
|  |     "**/package-lock.json": true, | ||||||
|  |     "**/yarn.lock": true | ||||||
|  |   }, | ||||||
|  |   "editor.formatOnSave": true, | ||||||
|  |   "editor.formatOnPaste": true, | ||||||
|  |   "editor.defaultFormatter": "esbenp.prettier-vscode" | ||||||
|  | >>>>>>> vscode_files | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -22,11 +22,14 @@ import TriangleFillIcon from 'web/lib/icons/triangle-fill-icon' | ||||||
| import { Col } from '../layout/col' | import { Col } from '../layout/col' | ||||||
| import { OUTCOME_TO_COLOR } from '../outcome-label' | import { OUTCOME_TO_COLOR } from '../outcome-label' | ||||||
| import { useSaveShares } from '../use-save-shares' | import { useSaveShares } from '../use-save-shares' | ||||||
|  | import { sellShares } from 'web/lib/firebase/fn-call' | ||||||
|  | import { calculateCpmmSale, getCpmmProbability } from 'common/calculate-cpmm' | ||||||
| 
 | 
 | ||||||
| const BET_SIZE = 10 | const BET_SIZE = 10 | ||||||
| 
 | 
 | ||||||
| export function QuickBet(props: { contract: Contract; user: User }) { | export function QuickBet(props: { contract: Contract; user: User }) { | ||||||
|   const { contract, user } = props |   const { contract, user } = props | ||||||
|  |   const isCpmm = contract.mechanism === 'cpmm-1' | ||||||
| 
 | 
 | ||||||
|   const userBets = useUserContractBets(user.id, contract.id) |   const userBets = useUserContractBets(user.id, contract.id) | ||||||
|   const topAnswer = |   const topAnswer = | ||||||
|  | @ -35,7 +38,7 @@ export function QuickBet(props: { contract: Contract; user: User }) { | ||||||
|       : undefined |       : undefined | ||||||
| 
 | 
 | ||||||
|   // TODO: yes/no from useSaveShares doesn't work on numeric contracts
 |   // TODO: yes/no from useSaveShares doesn't work on numeric contracts
 | ||||||
|   const { yesFloorShares, noFloorShares } = useSaveShares( |   const { yesFloorShares, noFloorShares, yesShares, noShares } = useSaveShares( | ||||||
|     contract, |     contract, | ||||||
|     userBets, |     userBets, | ||||||
|     topAnswer?.number.toString() || undefined |     topAnswer?.number.toString() || undefined | ||||||
|  | @ -68,8 +71,38 @@ export function QuickBet(props: { contract: Contract; user: User }) { | ||||||
|     // Catch any errors from hovering on an invalid option
 |     // Catch any errors from hovering on an invalid option
 | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   let sharesSold: number | undefined | ||||||
|  |   let sellOutcome: 'YES' | 'NO' | undefined | ||||||
|  |   let saleAmount: number | undefined | ||||||
|  |   if (isCpmm && (upHover || downHover)) { | ||||||
|  |     const oppositeShares = upHover ? noShares : yesShares | ||||||
|  |     if (oppositeShares) { | ||||||
|  |       sellOutcome = upHover ? 'NO' : 'YES' | ||||||
|  | 
 | ||||||
|  |       const prob = getProb(contract) | ||||||
|  |       const maxSharesSold = BET_SIZE / (sellOutcome === 'YES' ? prob : 1 - prob) | ||||||
|  |       sharesSold = Math.min(oppositeShares, maxSharesSold) | ||||||
|  | 
 | ||||||
|  |       const { newPool, saleValue } = calculateCpmmSale( | ||||||
|  |         contract, | ||||||
|  |         sharesSold, | ||||||
|  |         sellOutcome | ||||||
|  |       ) | ||||||
|  |       saleAmount = saleValue | ||||||
|  |       previewProb = getCpmmProbability(newPool, contract.p) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   async function placeQuickBet(direction: 'UP' | 'DOWN') { |   async function placeQuickBet(direction: 'UP' | 'DOWN') { | ||||||
|     const betPromise = async () => { |     const betPromise = async () => { | ||||||
|  |       if (sharesSold && sellOutcome) { | ||||||
|  |         return await sellShares({ | ||||||
|  |           shares: sharesSold, | ||||||
|  |           outcome: sellOutcome, | ||||||
|  |           contractId: contract.id, | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|       const outcome = quickOutcome(contract, direction) |       const outcome = quickOutcome(contract, direction) | ||||||
|       return await placeBet({ |       return await placeBet({ | ||||||
|         amount: BET_SIZE, |         amount: BET_SIZE, | ||||||
|  | @ -78,9 +111,14 @@ export function QuickBet(props: { contract: Contract; user: User }) { | ||||||
|       }) |       }) | ||||||
|     } |     } | ||||||
|     const shortQ = contract.question.slice(0, 20) |     const shortQ = contract.question.slice(0, 20) | ||||||
|  |     const message = | ||||||
|  |       sellOutcome && saleAmount | ||||||
|  |         ? `${formatMoney(saleAmount)} sold of "${shortQ}"...` | ||||||
|  |         : `${formatMoney(BET_SIZE)} on "${shortQ}"...` | ||||||
|  | 
 | ||||||
|     toast.promise(betPromise(), { |     toast.promise(betPromise(), { | ||||||
|       loading: `${formatMoney(BET_SIZE)} on "${shortQ}"...`, |       loading: message, | ||||||
|       success: `${formatMoney(BET_SIZE)} on "${shortQ}"...`, |       success: message, | ||||||
|       error: (err) => `${err.message}`, |       error: (err) => `${err.message}`, | ||||||
|     }) |     }) | ||||||
|   } |   } | ||||||
|  | @ -142,6 +180,14 @@ export function QuickBet(props: { contract: Contract; user: User }) { | ||||||
|       <QuickOutcomeView contract={contract} previewProb={previewProb} /> |       <QuickOutcomeView contract={contract} previewProb={previewProb} /> | ||||||
| 
 | 
 | ||||||
|       {/* Down bet triangle */} |       {/* Down bet triangle */} | ||||||
|  |       {contract.outcomeType !== 'BINARY' ? ( | ||||||
|  |         <div> | ||||||
|  |           <div className="peer absolute bottom-0 left-0 right-0 h-[50%] cursor-default"></div> | ||||||
|  |           <TriangleDownFillIcon | ||||||
|  |             className={clsx('mx-auto h-5 w-5 text-gray-200')} | ||||||
|  |           /> | ||||||
|  |         </div> | ||||||
|  |       ) : ( | ||||||
|         <div> |         <div> | ||||||
|           <div |           <div | ||||||
|             className="peer absolute bottom-0 left-0 right-0 h-[50%]" |             className="peer absolute bottom-0 left-0 right-0 h-[50%]" | ||||||
|  | @ -168,6 +214,7 @@ export function QuickBet(props: { contract: Contract; user: User }) { | ||||||
|             {formatMoney(10)} |             {formatMoney(10)} | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|  |       )} | ||||||
|     </Col> |     </Col> | ||||||
|   ) |   ) | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user