Является ли это «достаточно хорошей» случайностью?

Скажем, я хотел создать систему в сети Ethereum, чтобы делать ставки на призовой фонд, который был ниже текущего вознаграждения за блок, скажем, 2,5 ETH.

Будут ли эти шаги достаточно честным способом гарантировать, что игроки не смогут играть в систему?

1) Иметь 100 возможных входов в игру

2) Соберите все адреса игроков и XOR их вместе

3) На 99-й записи убедитесь, что у этого человека нет большинства записей (допускается несколько записей)

4) Когда последний человек входит, используйте block.timestampфункцию как своего рода начальное число, чтобы добавить к номеру из адресов XOR.

5) выполнить деление по модулю на 100, чтобы найти выигрышное число и раздать приз

Я понимаю, что майнеры могут манипулировать временем блока, но если призовой фонд меньше, чем вознаграждение за блок, это вполне осуществимый вариант, не так ли?

Ответы (1)

Это означает, что 100-я запись будет определять результат. Таким образом, 100-й аккаунт всегда должен быть победителем, и поэтому более ранние участники не должны беспокоиться о входе (поскольку они знают, что не могут выиграть).

но есть метка времени блока, чтобы добавить к нему своего рода случайность, если они попытаются сыграть в нее.
Было бы лучше дождаться 100-й записи, а затем использовать метку времени блока, чтобы определить порядок, в котором адреса объединяются XOR вместе
Последняя запись будет по смарт-контракту. Он проведет те же расчеты, что и вы, и решит, входить или нет, в зависимости от результата. Неважно, какой математикой вы занимаетесь. (Кроме того, XOR является коммутативным.)
Короче говоря, случайные числа должны прийти из будущего. Легко предсказать прошлое. Временная метка блока, другие адреса, хэш предыдущего блока и т. д. уже определены до выполнения транзакций в этом блоке.
Блокхеш — хороший источник случайности. Проблема в том, что это может быть известно участнику до закрытия лотереи. Как указывает @smarx, это будет решено, если лотерея закроется, а затем (в блоке перед текущим) будет получен хэш блока.