1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /* Import modules. */
- import moment from 'moment'
- import PouchDB from 'pouchdb'
- import gameplay from './_gameplay.js'
- import getSender from './_getSender.js'
- /* Initialize databases. */
- const gamesDb = new PouchDB(`http://${process.env.COUCHDB_USER}:${process.env.COUCHDB_PASSWORD}@127.0.0.1:5984/games`)
- const playsDb = new PouchDB(`http://${process.env.COUCHDB_USER}:${process.env.COUCHDB_PASSWORD}@127.0.0.1:5984/plays`)
- const MIN_PLAY_SATOSHIS = 1000000 // 10,000.00 NEX (~$0.10 as of 2023.5.25)
- // NOTE: We add 5% to account for variance in spot price calculation.
- const MAX_PLAY_SATOSHIS = 105000000 // 1,050,000.00 NEX (~$10.50 as of 2023.5.25)
- /**
- * Handle (Plays) Queue
- *
- * Process the pending queue of open transactions.
- *
- * NOTE: We handle payment processing in a SINGLE thread,
- * to mitigate the possibility of a "double send".
- */
- export default async (_queue, _pending) => {
- let response
- for (let i = 0; i < _pending.length; i++) {
- const play = _queue[_pending[i]]
- // console.log('PLAY (pending):', (i + 1), 'of', (_pending.length + 1), play)
- /* Remove (payment) from queue. */
- // FIXME DON'T DELETE! MARK AS USED, THEN CHECK!
- delete _queue[_pending[i]]
- const game = await gamesDb
- .get(play.gameid)
- .catch(err => console.error(err))
- // console.log('GAME', game)
- /* Set satoshis. */
- const satoshis = play.satoshis
- // console.log('SATOSHIS', satoshis)
- // FIXME ERROR IN QUEUE LOGIC CAUSING BAD DB
- if (satoshis === 0) continue
- /* Validate satoshis. */
- if (satoshis < MIN_PLAY_SATOSHIS) {
- play.txidem = 'DUST'
- play.updatedAt = moment().valueOf()
- response = await playsDb
- .put(play)
- .catch(err => console.error(err))
- // console.log('RESPONSE', response)
- continue
- }
- /* Validate satoshis. */
- if (satoshis > MAX_PLAY_SATOSHIS) {
- play.txidem = 'OVER_LIMIT'
- play.updatedAt = moment().valueOf()
- response = await playsDb
- .put(play)
- .catch(err => console.error(err))
- // console.log('RESPONSE', response)
- continue
- }
- /* Request player. */
- const sender = await getSender(play.unspent)
- // console.log('SENDER', sender)
- /* Handle gameplay. */
- await gameplay(game, play, sender)
- }
- }
|