Русский: Вы предложили ввести в игру определенный азартный элемент или просто стимул для игроков быть победителем.
Однако 1 CLO не является хорошим стимулом, а также требование оплатить его по контракту является чем-то ненужным. Некоторые могли играть с большим количеством ставок, а некоторые могли просто играть ради игры. Было бы лучше сделать его переменным и заставить игроков договориться о ставке до начала матча. Это может быть либо 0, либо 500,000 CLO в зависимости от решения игроков.
2. ГСЧ
Отсутствие генератора случайных чисел и источника энтропии является основной проблемой всех платформ смарт-контрактов в настоящее время. Это не надежный источник энтропии:
https://github.com/gorbunovperm/Cryptopolis/blob/master/contracts/Cryptopolis.sol#L514Если вы введете в игру" азартный элемент " и позволите игрокам поставить на кон значительные суммы средств, то это будет проблемой для игры, потому что результат каждого шага предсказуем.
Очевидно, что игрок не может предсказать исход всего матча, потому что он не знает хэш всех будущих блоков заранее, но игрок может манипулировать ГСЧ, потому что он знает хэш предыдущего блока. Он может подождать, не подавая фактически транзакцию, если ему не нравится ход, к которому это приведет. Затем он может отправить транзакцию, как только ему понравится результат, основанный на хэше блока.
Предложение: ни одна из переменных в цепочке не является надежным источником энтропии. Источником энтропии для другого игрока может служить только сгенерированный игроком вход. Однако то, что не известно обоим игрокам, может служить источником энтропии для игры.
Надежный источник энтропии можно получить, требуя от обоих игроков предоставить число в частном порядке, а затем раскрывая оба числа, когда игроки больше не могут манипулировать им. Сумма этих чисел является источником энтропии, которой не может манипулировать ни один из игроков.
Вы можете ввести переменную энтропии в начале каждого матча.
Вы можете потребовать, чтобы каждый игрок представил себе номер. Затем каждый игрок должен выбрать семя и вычислить keccak256 (seed, secret_number) и загрузить хэш в контракт. После того, как каждый игрок совершил свой кусок энтропии, вы должны потребовать, чтобы они раскрыли числа, зафиксировав seed и secret_number, чтобы контракт мог проверить его по ранее предоставленным хэшам.
Выбросьте семена и вычислите сумму всех секретных чисел. это может служить источником энтропии.
энтропия + = игрок[i].секретный номер;
Вы можете скрыть этот процесс от пользователя, реализовав RNG или PRNG (например, MT-199737) на стороне интерфейса, а затем представив номера и семена в контракт, не злоупотребляя пользователем с постоянными требованиями предоставить эти номера. Я предполагаю, что самый надежный способ-обновлять энтропию на каждом повороте.