Как ограничить количество циклов и ограничить время в системе проверки работоспособности при одновременном предотвращении взлома? - PullRequest
0 голосов
/ 18 ноября 2018

Я играю с простой системой проверки работоспособности и сталкиваюсь с проблемой, касающейся того, как я могу ограничить время или количество циклов, необходимых для предположения, что работа была выполнена.

Пример:Трудность равна 3, но я не хочу, чтобы человек потратил 1 час на вычисление хэша.

  • Можно ли убедиться, что человек выполнил X раундов, даже если первые цифры не совпадают "0«?(Человек находит хороший хеш или максимум 200 раундов)

хитрость в том, как сервер или стороннее лицо могут подтвердить, что человек действительно сделал определенное максимальное количество раундов

Второй вопрос, который у меня возник, если можно, как я могу убедиться, что работа была выполнена, например, в один и тот же час, а не на прошлой неделе, а последние несколько хешей сегодня.Если я добавлю дату к функции calculateHash(), у меня не будет возможности узнать это значение. Кому-то будет легко сказать challenge + (TheDateIwant) + nonce.Поскольку это не цепочка блоков, я не хочу включать в тест предыдущие результаты.

function pow() {}
pow.prototype.maxRounds = 200
pow.prototype.nonce = 0
pow.prototype.challenge = null

pow.prototype.verifyHash = function(hash) {
  console.log('verify', hash)
  if (hash.match(/^000/)) { // Difficulty = 000
    console.log('Solved... ' + hash)
    return true
  }
}
pow.prototype.calculateHash = function() {

  // TODO: Optimize??
  self.nonce++
  var x = new jsSHA('SHA3-256', 'TEXT')
  x.update(this.challenge + this.nonce + '')
  return x.getHash('HEX')
}
pow.prototype.start = function(challenge) {
  this.nonce = 0
  this.challenge = challenge

  console.log('Challenge', challenge, this.nonce, this.maxRounds)

  while (this.nonce < this.maxRounds) {
    this.nonce += 1
    work = this.calculateHash()
    if (this.verifyHash(work)) {
      console.log('YAY')
    }
  }
}

var POW = new pow()
var x = POW.start('Hello there :P')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...