outcome.userOpenOrders = marketIndex === 5 ? [] : [...new Array(randomInt(1, 6)).keys()].map(index => ( { id: `${m.id}${outcome.id}order${index}`, type: parseInt(index, 10) % 2 === 1 ? 'buy' : 'sell', marketID: m.id, avgPrice: makeNumber(parseFloat(Math.random().toFixed(2)), ' ETH'), unmatchedShares: makeNumber(parseInt(Math.random() * 10, 10), 'shares'), outcome: outcomeID, owner: '0x45a153fdd97836c2b349a5f53970dc44b0ef1efa' } ));
m.tradeSummary = m.outcomes.reduce((p, outcome) => { if (!outcome.trade || !outcome.trade.numShares) { return p; } p.tradeOrders.push({ type: outcome.trade.side, shares: makeNumber(outcome.trade.numShares, 'shares'), ether: makeNumber(outcome.trade.totalCost.value - gas, ' ETH'), data: { outcomeID: outcome.id, gasFees: makeNumber(gas, ' ETH'), marketType: m.type, outcomeName: outcome.name, marketDescription: m.description, avgPrice: makeNumber(Math.round((outcome.trade.totalCost.value / outcome.trade.numShares) * 100) / 100, ' ETH'), }, tradingFees: makeNumber(randomNum()), feePercent: makeNumber(randomNum()), gasFees: makeNumber(randomNum()), totalCost: makeNumber(randomNum()) }); return p; }, { totalGas: 0, tradeOrders: [] });
function selectOrderBook() { return { bids: [ { shares: makeNumber(776, ' shares'), price: makeNumber(0.5, ' ETH'), isOfCurrentUser: true }, { shares: makeNumber(87, ' shares'), price: makeNumber(0.45, ' ETH') }, { isOfCurrentUser: true, shares: makeNumber(2.22, ' shares'), price: makeNumber(0.35, ' ETH') }, { shares: makeNumber(6544.43, ' shares'), price: makeNumber(0.25, ' ETH') }, { shares: makeNumber(1234567.987654321, ' shares', null, true), price: makeNumber(0.123456789, ' ETH', null, true) }, { shares: makeNumber(776, ' shares'), price: makeNumber(0.5, ' ETH'), isOfCurrentUser: true }, { shares: makeNumber(87, ' shares'), price: makeNumber(0.45, ' ETH') }, { shares: makeNumber(2.22, ' shares'), price: makeNumber(0.35, ' ETH') }, { shares: makeNumber(6544.43, ' shares'), price: makeNumber(0.25, ' ETH') }, { shares: makeNumber(1234567.987654321, ' shares', null, true), price: makeNumber(0.123456789, ' ETH', null, true) }, { shares: makeNumber(776, ' shares'), price: makeNumber(0.5, ' ETH'), isOfCurrentUser: true }, { shares: makeNumber(87, ' shares'), price: makeNumber(0.45, ' ETH') }, { shares: makeNumber(2.22, ' shares'), price: makeNumber(0.35, ' ETH') }, { shares: makeNumber(6544.43, ' shares'), price: makeNumber(0.25, ' ETH') }, { shares: makeNumber(1234567.987654321, ' shares', null, true), price: makeNumber(0.123456789, ' ETH', null, true) } ], asks: [ { shares: makeNumber(10000000000, ' shares', null, true), price: makeNumber(0.9, ' ETH', null, true) }, { shares: makeNumber(180, ' shares'), price: makeNumber(0.63, ' ETH') }, { shares: makeNumber(2000, ' shares'), price: makeNumber(0.72, ' ETH'), isOfCurrentUser: Math.random() > 0.3 }, { isOfCurrentUser: true, shares: makeNumber(5, ' shares'), price: makeNumber(0.82, ' ETH') }, { shares: makeNumber(888, ' shares'), price: makeNumber(0.99, ' ETH') } ] }; }
import makeNumber from 'utils/make-number'; const loginAccount = { address: '0x45a153fdd97836c2b349a5f53970dc44b0ef1efa', prettyAddress: '45a1...1efa', localNode: false, loginID: 'testID123ASDW3N193NF7V123ADW25579130239SE1235189ADJWKRUY8123AOUELOREMIPSUMDOLORSITAMETCONSECTETURADIPISICINGELITSEDDOEIUSMODTEMPORINCIDIDUNTUTLABOREETDOLOREMAGNAALIQUAUTENIMADMINIMVENIAMQUISNOSTRUDEXERCITATIONULLAMCOLABORISNISIUTALIQUIPEXEACOMMODOCONSEQUATDUISAUTEIRUREDOLORINREPREHENDERITINVOLUPTATEVELITESSECILLUMDOLOREEUFUGIATNULLAPARIATUREXCEPTEURSINTOCCAECATCUPIDATATNONPROIDENTSUNTINCULPAQUIOFFICIADESERUNTMOLLITANIMIDESTLABORUM', prettyLoginID: 'test...ORUM', rep: makeNumber(47, ' REP'), ether: makeNumber(10000, ' ETH'), realEther: makeNumber(2.5, ' ETH'), name: 'MrTestTesterson', onAirbitzManageAccount: () => { console.log('Airbitz Manage Account'); } }; loginAccount.linkText = loginAccount.localNode ? loginAccount.prettyAddress : loginAccount.name || loginAccount.prettySecureLoginID; const date = new Date() .toISOString() .split(':') .join('-'); loginAccount.downloadAccountDataString = `data:,${encodeURIComponent(JSON.stringify(loginAccount))}`; loginAccount.downloadAccountFileName = `UTC--${date}--${loginAccount.address}`; loginAccount.signIn = (name = loginAccount.name) => { require('../selectors').update({ loginAccount: { ...loginAccount, name, editName: loginAccount.editName, transferFunds: loginAccount.transferFunds,
function makeMarket(index) { const id = index.toString(); const d = new Date('2017/12/12'); const m = { id, author: '0x7c0d52faab596c08f484e3478aebc6205f3f5d8c', resolution: index % 3 === 0 ? 'generic' : 'https://www.augur.net', extraInfo: 'some extraInfo for this market', // type: types[randomInt(0, types.length - 1)], type: types[0], description: `Will the dwerps achieve a mwerp by the end of zwerp ${(index + 1)}?`, endDate: makeDate(d), creationTime: makeDate(new Date(14706977556)), outstandingShares: makeNumber(1000), endDateLabel: (d < new Date()) ? 'ended' : 'ends', takerFeePercent: makeNumber(randomInt(1, 10), '%', true), makerFeePercent: makeNumber(randomInt(1, 5), '%', true), volume: makeNumber(randomInt(0, 10000), 'shares', true), isOpen: randomInt(0, 100) > 5, numPendingReports: 10, isPendingReport: index > 0 && index % 4 === 0, marketLink: { href: `/?m=${id}`, text: 'Trade', className: 'trade', onClick: () => require('../selectors').update({ activeView: M, market: m, url: `/?m=${id}` }) }, onClickToggleFavorite: () => {} }; // result m.result = { outcomeID: '1', outcomeName: 'Testing', proportionCorrect: makeNumber(1) }; // tags m.tags = makeTags(); // outcomes m.outcomes = makeOutcomes(index); // reportable outcomes m.reportableOutcomes = selectReportableOutcomes(m.type, m.outcomes); m.reportableOutcomes.push({ id: '1.5', name: 'indeterminate', userOpenOrders: [] }); m.onSubmitPlaceTrade = () => {}; // No action in dummy selector console.log('index -- ', index); // trade summary m.tradeSummary = { hasUserEnoughFunds: true, totalGas: makeNumber(0, ' ETH'), tradeOrders: [] }; // price history const dayMillis = 24 * 60 * 60 * 1000; const nowMillis = new Date().getTime(); m.priceTimeSeries = [ { name: 'outcome 1', data: [ [nowMillis - (50 * dayMillis), 0.3], [nowMillis - (40 * dayMillis), 0.1], [nowMillis - (30 * dayMillis), 0.65], [nowMillis - (20 * dayMillis), 0.93] ], color: '#f00' }, { name: 'outcome 2', data: [ [nowMillis - (55 * dayMillis), 0.8], [nowMillis - (45 * dayMillis), 0.7], [nowMillis - (35 * dayMillis), 0.6], [nowMillis - (25 * dayMillis), 0.4] ], color: '#0f0' } ]; // positions summary m.myPositionsSummary = { numPositions: makeNumber(2, 'Positions', true), qtyShares: makeNumber(16898, 'shares'), purchasePrice: makeNumber(0.5, ' ETH'), realizedNet: makeNumber(randomNum(900), ' ETH'), unrealizedNet: makeNumber(randomNum(100), ' ETH'), totalNet: makeNumber(randomNum(), ' ETH') }; // position-outcomes const randomPositionOutcome = m.outcomes[randomInt(0, m.outcomes.length - 1)]; randomPositionOutcome.position = { qtyShares: makeNumber(16898, 'shares'), purchasePrice: makeNumber(0.77, ' ETH'), realizedNet: makeNumber(randomNum(900), ' ETH'), unrealizedNet: makeNumber(randomNum(100), ' ETH'), totalNet: makeNumber(randomNum(), ' ETH') }; const randomPositionOutcome2 = m.outcomes[randomInt(0, m.outcomes.length - 1)]; randomPositionOutcome2.position = { qtyShares: makeNumber(16898, 'shares'), purchasePrice: makeNumber(0.77, ' ETH'), realizedNet: makeNumber(randomNum(900), ' ETH'), unrealizedNet: makeNumber(randomNum(100), ' ETH'), totalNet: makeNumber(randomNum(), ' ETH') }; m.myPositionOutcomes = [randomPositionOutcome, randomPositionOutcome2]; // console.log('OUTCOMES -- ', m.outcomes); m.userOpenOrdersSummary = { openOrdersCount: makeNumber(m.outcomes.reduce((openOrdersCount, outcome) => (openOrdersCount + outcome && outcome.userOpenOrders && outcome.userOpenOrders.length), 0), 'Open Orders') }; // market summary m.myMarketSummary = { endDate: makeDate(new Date('2017/12/12')), fees: makeNumber(Math.random() * 10, ' ETH'), volume: makeNumber(Math.floor(Math.random() * 100), null, true), numberOfTrades: makeNumber(Math.floor(Math.random() * 1000), null, true), averageTradeSize: makeNumber(Math.random() * 100, ' ETH', true), openVolume: makeNumber(Math.floor(Math.random() * 10000), null, true), realizedNet: makeNumber(randomNum(900), ' ETH'), unrealizedNet: makeNumber(randomNum(100), ' ETH'), totalNet: makeNumber(randomNum(), ' ETH') }; // report m.report = { isIndeterminate: false, isUnethical: true, onSubmitReport: (reportedOutcomeID, isUnethical) => { } }; function makeTags() { const randomNum = randomInt(1, 100); const allTags = { Politics: { USA: { Presedential: true, 'State Politics': true }, Canada: { 'Prime Minister': true, Quebec: true } }, Sports: { 'Football (American)': { '2016 Season': true, Superbowl: true }, 'Football/Soccer (European)': { 'World Cup': true, Manchester: true, 'Euro 2016': true }, Tennis: { Wimbledon: true, 'US Open': true, Women: true } }, Finance: { Equities: { Tech: true, Google: true }, Commodities: { Oil: true, 'Crude Oil': true, Corn: true }, 'Real-Estate': { London: true, Global: true } } }; let currentTier = allTags; const finalTags = []; let numTags; // randomly choose num tags with more weight towards having all 3 if (randomNum >= 95) { numTags = 0; } else if (randomNum >= 85) { numTags = 1; } else if (randomNum >= 65) { numTags = 2; } else { numTags = 3; } for (let i = 0; i < numTags; i++) { const keysCurrentTier = Object.keys(currentTier); const randomTag = keysCurrentTier[randomInt(0, keysCurrentTier.length - 1)]; finalTags.push({ name: randomTag, onClick: () => console.log('on clickity') }); currentTier = currentTier[randomTag]; } return finalTags; } function makeOutcomes(marketIndex) { const numOutcomes = randomInt(2, 8); const outcomes = []; const orderBook = selectOrderBook(); let outcome; let percentLeft = 100; for (let i = 0; i < numOutcomes; i++) { outcome = makeOutcome(i, percentLeft, orderBook); percentLeft -= outcome.lastPricePercent.value; outcomes.push(outcome); } const finalLastPrice = (outcome.lastPricePercent.value + percentLeft) / 100; outcome.lastPrice = makeNumber(finalLastPrice, ' ETH'); outcome.lastPricePercent = makeNumber(finalLastPrice * 100, '%'); return outcomes.sort((a, b) => b.lastPrice.value - a.lastPrice.value); function makeOutcome(index, percentLeft, orderBook) { const outcomeID = index.toString(); const lastPrice = randomInt(0, percentLeft) / 100; const tradeTypeOptions = [ { label: 'buy', value: 'buy' }, { label: 'sell', value: 'sell' } ]; const outcome = { id: index.toString(), marketID: outcomeID, name: makeName(index), lastPrice: makeNumber(lastPrice, ' ETH'), lastPricePercent: makeNumber(lastPrice * 100, '%'), trade: { side: tradeTypeOptions[0].value, numShares: 0, limitPrice: 0, tradeTypeOptions, tradeSummary: {}, updateTradeOrder: (shares, limitPrice, side) => { console.log('update trade order:', shares, limitPrice, side); const outcome = { ...m.outcomes.find(outcome => outcome.id === outcomeID) }; if (typeof shares !== 'undefined') { outcome.trade.numShares = shares; } if (typeof limitPrice !== 'undefined') { outcome.trade.limitPrice = limitPrice; outcome.trade.maxNumShares = makeNumber(Math.round(10 / limitPrice) * 1000); } if (typeof side !== 'undefined') { outcome.trade.side = side; } const negater = outcome.trade.side === 'buy' ? -1 : 1; const finalLimitPrice = outcome.trade.limitPrice || 1; const totEth = outcome.trade.numShares * finalLimitPrice * negater; outcome.trade.totalFee = makeNumber(Math.round((m.takerFeePercent.value / 100) * finalLimitPrice * outcome.trade.numShares * 100) / 100, ' ETH'); const feeFortotalEth = -1 * outcome.trade.totalFee.value; outcome.trade.totalCost = makeNumber(Math.round((totEth + feeFortotalEth) * 100) / 100, ' ETH'); m.outcomes = m.outcomes.map((currentOutcome) => { if (currentOutcome.id === outcomeID) { return outcome; } return currentOutcome; }); const gas = 0.03; m.tradeSummary = m.outcomes.reduce((p, outcome) => { if (!outcome.trade || !outcome.trade.numShares) { return p; } p.tradeOrders.push({ type: outcome.trade.side, shares: makeNumber(outcome.trade.numShares, 'shares'), ether: makeNumber(outcome.trade.totalCost.value - gas, ' ETH'), data: { outcomeID: outcome.id, gasFees: makeNumber(gas, ' ETH'), marketType: m.type, outcomeName: outcome.name, marketDescription: m.description, avgPrice: makeNumber(Math.round((outcome.trade.totalCost.value / outcome.trade.numShares) * 100) / 100, ' ETH'), }, tradingFees: makeNumber(randomNum()), feePercent: makeNumber(randomNum()), gasFees: makeNumber(randomNum()), totalCost: makeNumber(randomNum()) }); return p; }, { totalGas: 0, tradeOrders: [] }); m.tradeSummary.totalGas = makeNumber(outcome.trade.tradeSummary.totalGas); m.tradeSummary.hasUserEnoughFunds = true; require('../selectors').update({ markets: markets.map((currentMarket) => { if (currentMarket.id === m.id) { return m; } return currentMarket; }) }); } }, topBid: { price: orderBook.bids[0].price, shares: orderBook.bids[0].shares }, topAsk: { price: orderBook.asks[0].price, shares: orderBook.asks[0].shares }, orderBook }; outcome.userOpenOrders = marketIndex === 5 ? [] : [...new Array(randomInt(1, 6)).keys()].map(index => ( { id: `${m.id}${outcome.id}order${index}`, type: parseInt(index, 10) % 2 === 1 ? 'buy' : 'sell', marketID: m.id, avgPrice: makeNumber(parseFloat(Math.random().toFixed(2)), ' ETH'), unmatchedShares: makeNumber(parseInt(Math.random() * 10, 10), 'shares'), outcome: outcomeID, owner: '0x45a153fdd97836c2b349a5f53970dc44b0ef1efa' } )); return outcome; function makeName(index) { return ['One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight'][index]; } } } return m; }
updateTradeOrder: (shares, limitPrice, side) => { console.log('update trade order:', shares, limitPrice, side); const outcome = { ...m.outcomes.find(outcome => outcome.id === outcomeID) }; if (typeof shares !== 'undefined') { outcome.trade.numShares = shares; } if (typeof limitPrice !== 'undefined') { outcome.trade.limitPrice = limitPrice; outcome.trade.maxNumShares = makeNumber(Math.round(10 / limitPrice) * 1000); } if (typeof side !== 'undefined') { outcome.trade.side = side; } const negater = outcome.trade.side === 'buy' ? -1 : 1; const finalLimitPrice = outcome.trade.limitPrice || 1; const totEth = outcome.trade.numShares * finalLimitPrice * negater; outcome.trade.totalFee = makeNumber(Math.round((m.takerFeePercent.value / 100) * finalLimitPrice * outcome.trade.numShares * 100) / 100, ' ETH'); const feeFortotalEth = -1 * outcome.trade.totalFee.value; outcome.trade.totalCost = makeNumber(Math.round((totEth + feeFortotalEth) * 100) / 100, ' ETH'); m.outcomes = m.outcomes.map((currentOutcome) => { if (currentOutcome.id === outcomeID) { return outcome; } return currentOutcome; }); const gas = 0.03; m.tradeSummary = m.outcomes.reduce((p, outcome) => { if (!outcome.trade || !outcome.trade.numShares) { return p; } p.tradeOrders.push({ type: outcome.trade.side, shares: makeNumber(outcome.trade.numShares, 'shares'), ether: makeNumber(outcome.trade.totalCost.value - gas, ' ETH'), data: { outcomeID: outcome.id, gasFees: makeNumber(gas, ' ETH'), marketType: m.type, outcomeName: outcome.name, marketDescription: m.description, avgPrice: makeNumber(Math.round((outcome.trade.totalCost.value / outcome.trade.numShares) * 100) / 100, ' ETH'), }, tradingFees: makeNumber(randomNum()), feePercent: makeNumber(randomNum()), gasFees: makeNumber(randomNum()), totalCost: makeNumber(randomNum()) }); return p; }, { totalGas: 0, tradeOrders: [] }); m.tradeSummary.totalGas = makeNumber(outcome.trade.tradeSummary.totalGas); m.tradeSummary.hasUserEnoughFunds = true; require('../selectors').update({ markets: markets.map((currentMarket) => { if (currentMarket.id === m.id) { return m; } return currentMarket; }) }); }
function makeOutcome(index, percentLeft, orderBook) { const outcomeID = index.toString(); const lastPrice = randomInt(0, percentLeft) / 100; const tradeTypeOptions = [ { label: 'buy', value: 'buy' }, { label: 'sell', value: 'sell' } ]; const outcome = { id: index.toString(), marketID: outcomeID, name: makeName(index), lastPrice: makeNumber(lastPrice, ' ETH'), lastPricePercent: makeNumber(lastPrice * 100, '%'), trade: { side: tradeTypeOptions[0].value, numShares: 0, limitPrice: 0, tradeTypeOptions, tradeSummary: {}, updateTradeOrder: (shares, limitPrice, side) => { console.log('update trade order:', shares, limitPrice, side); const outcome = { ...m.outcomes.find(outcome => outcome.id === outcomeID) }; if (typeof shares !== 'undefined') { outcome.trade.numShares = shares; } if (typeof limitPrice !== 'undefined') { outcome.trade.limitPrice = limitPrice; outcome.trade.maxNumShares = makeNumber(Math.round(10 / limitPrice) * 1000); } if (typeof side !== 'undefined') { outcome.trade.side = side; } const negater = outcome.trade.side === 'buy' ? -1 : 1; const finalLimitPrice = outcome.trade.limitPrice || 1; const totEth = outcome.trade.numShares * finalLimitPrice * negater; outcome.trade.totalFee = makeNumber(Math.round((m.takerFeePercent.value / 100) * finalLimitPrice * outcome.trade.numShares * 100) / 100, ' ETH'); const feeFortotalEth = -1 * outcome.trade.totalFee.value; outcome.trade.totalCost = makeNumber(Math.round((totEth + feeFortotalEth) * 100) / 100, ' ETH'); m.outcomes = m.outcomes.map((currentOutcome) => { if (currentOutcome.id === outcomeID) { return outcome; } return currentOutcome; }); const gas = 0.03; m.tradeSummary = m.outcomes.reduce((p, outcome) => { if (!outcome.trade || !outcome.trade.numShares) { return p; } p.tradeOrders.push({ type: outcome.trade.side, shares: makeNumber(outcome.trade.numShares, 'shares'), ether: makeNumber(outcome.trade.totalCost.value - gas, ' ETH'), data: { outcomeID: outcome.id, gasFees: makeNumber(gas, ' ETH'), marketType: m.type, outcomeName: outcome.name, marketDescription: m.description, avgPrice: makeNumber(Math.round((outcome.trade.totalCost.value / outcome.trade.numShares) * 100) / 100, ' ETH'), }, tradingFees: makeNumber(randomNum()), feePercent: makeNumber(randomNum()), gasFees: makeNumber(randomNum()), totalCost: makeNumber(randomNum()) }); return p; }, { totalGas: 0, tradeOrders: [] }); m.tradeSummary.totalGas = makeNumber(outcome.trade.tradeSummary.totalGas); m.tradeSummary.hasUserEnoughFunds = true; require('../selectors').update({ markets: markets.map((currentMarket) => { if (currentMarket.id === m.id) { return m; } return currentMarket; }) }); } }, topBid: { price: orderBook.bids[0].price, shares: orderBook.bids[0].shares }, topAsk: { price: orderBook.asks[0].price, shares: orderBook.asks[0].shares }, orderBook }; outcome.userOpenOrders = marketIndex === 5 ? [] : [...new Array(randomInt(1, 6)).keys()].map(index => ( { id: `${m.id}${outcome.id}order${index}`, type: parseInt(index, 10) % 2 === 1 ? 'buy' : 'sell', marketID: m.id, avgPrice: makeNumber(parseFloat(Math.random().toFixed(2)), ' ETH'), unmatchedShares: makeNumber(parseInt(Math.random() * 10, 10), 'shares'), outcome: outcomeID, owner: '0x45a153fdd97836c2b349a5f53970dc44b0ef1efa' } )); return outcome; function makeName(index) { return ['One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight'][index]; } }