debugger.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /* Import core modules. */
  2. const _ = require('lodash')
  3. const bch = require('bitcore-lib-cash')
  4. const repl = require('repl')
  5. /* Import local modules. */
  6. const messageUtils = require('./serverMessages.js')
  7. /* Set magic bytes. */
  8. const magic = Buffer.from('42bcc32669467873', 'hex')
  9. const currentPath = __filename.substring(0, __filename.lastIndexOf('/'))
  10. process.chdir(currentPath)
  11. /* Initialize shuffle. */
  12. const shuffleIt = repl.start('cashshuffle debug > ')
  13. shuffleIt.context.round
  14. try {
  15. shuffleIt.context.round = require(currentPath + '/_failedShuffle.js')
  16. } catch (nope) {
  17. /* eslint-disable-next-line no-console */
  18. console.log('\n No failed shuffle file found at', currentPath + '/_failedShuffle.js')
  19. shuffleIt.context.round = {}
  20. /* Quit application. */
  21. process.exit()
  22. }
  23. // shuffleIt.context.players = shuffleIt.context.round.players
  24. shuffleIt.context.inbox = shuffleIt.context.round.inbox
  25. shuffleIt.context.outbox = shuffleIt.context.round.outbox
  26. shuffleIt.context.me = _.find(shuffleIt.context.round.players, { isMe: true })
  27. for (let onePlayer of shuffleIt.context.round.players) {
  28. if (onePlayer.isMe) {
  29. continue
  30. }
  31. let somePlayer = {}
  32. somePlayer['player' + onePlayer.playerNumber] = onePlayer
  33. Object.assign(shuffleIt.context, somePlayer)
  34. }
  35. shuffleIt.context.bch = bch
  36. shuffleIt.context.Address = shuffleIt.context.bch.Address
  37. shuffleIt.context.PrivateKey = shuffleIt.context.bch.PrivateKey
  38. shuffleIt.context.PublicKey = shuffleIt.context.bch.PublicKey
  39. shuffleIt.context.Message = require('./BetterMessage.js')
  40. shuffleIt.context.msg = messageUtils
  41. shuffleIt.context.crypto = require('./cryptoUtils.js')
  42. shuffleIt.context._ = _
  43. shuffleIt.context.tools = {
  44. crypto: require('./cryptoUtils.js'),
  45. coin: require('./coinUtils.js'),
  46. loadProtobuffMessageFromMailbox: function(someMailboxMessageObject) {
  47. let messageBuffer = Buffer.from(someMailboxMessageObject.protobuffMessage.components.buffer, 'base64')
  48. let decodedMessage = messageUtils.decodeAndClassify(messageBuffer)
  49. delete decodedMessage.components
  50. let sender = _.find(shuffleIt.context.round.players, {
  51. session: decodedMessage.pruned.message.session
  52. })
  53. return Object.assign(decodedMessage, { sender: sender })
  54. },
  55. // Find a properly packed `Protocol Message` from
  56. // somewhere deep inside a base64 encoded string.
  57. findValidPackets: function(someBase64EncodedString) {
  58. let messageBuffer = Buffer.from(someBase64EncodedString, 'base64')
  59. let aintGood = true
  60. let indexCounter = 0
  61. let packets
  62. let numTries = 0
  63. while (aintGood && numTries < someBase64EncodedString.length) {
  64. numTries++
  65. try {
  66. let messageMagic = messageBuffer.slice(indexCounter, indexCounter + 8)
  67. if (messageMagic.toString('hex') !== magic.toString('hex')) {
  68. indexCounter += 1
  69. throw new Error('message_magic:'+(messageMagic.toString('hex')))
  70. } else {
  71. packets = shuffleIt.context.crypto.PB.Packets
  72. .decode(messageBuffer.slice(indexCounter+12, )).toJSON()
  73. aintGood = false
  74. }
  75. } catch (nope) {
  76. console.error(nope) // eslint-disable-line no-console
  77. }
  78. }
  79. console.log(JSON.stringify(packets, null, 4)) // eslint-disable-line no-console
  80. return packets
  81. }
  82. }