Здравствуйте, я хорошо знаю, что существует множество тем, посвященных обсуждению различных методов. Просто любопытно и хотел спросить прямо здесь, потому что чувствую, что ситуация может быть другой. По сути, я пытаюсь сделать так, чтобы всякий раз, когда кто-то вызывает средства из контракта, сумма, которую они получают, варьируется от 0 до 100, но, очевидно, мой текущий метод несовершенен в зависимости от текущего момента.
Я читал о ChainLink VRF, но похоже, что сборы могут быть немного раздражающими. Просто любопытно, есть ли какие-либо другие методы, о которых кто-либо знает, в противном случае мой другой вариант состоял в том, чтобы заблокировать баланс, если он приближается к текущему вознаграждению за блок, и пользователям просто придется чаще обналичивать деньги. Сомнительно, что многие пользователи получат баланс выше вознаграждения за блок, но я хотел бы изучить свои варианты.
Если вы сгенерируете случайное число в солидности, в какой-то момент вам нужно будет искать офчейн, иначе майнеры смогут манипулировать генератором случайных чисел любого типа, используя хэш блока.
Наивный подход к получению случайного числа в приложении, где вы согласны с тем, что его можно «взломать»:
function random() private view returns(uint){
return uint(keccak256(abi.encodePacked(block.difficulty, now, number)));
}
В противном случае вы захотите использовать Chainlink VRF . Вот статья на эту тему , если вы хотите узнать больше.
Если комиссионные сборы Chainlink слишком велики, вы всегда можете создать свой собственный случайный маяк, который отправляет случайные числа в блокчейн. Затем запустите это на узле DigitalOcean за 5 долларов и немного ETH на горячем кошельке, чтобы публиковать числа достаточно часто для вашего варианта использования.
Алиенбайт
хорошая вибрация
now
«семя» для случайности. Вы также можете положиться наmsg.sender
. Другими словами, вы можете использовать что-то вродеabi.encodePacked(now, msg.sender)
.Алиенбайт