TGViewer
Из Solidity в AI и дальше Из Solidity в AI и дальше @solidityset · 2.49K subscribers
Post #1470 447
Атака майнеров. Часть 3

Использует ли контракт свойства блока, такие как временная метка или сложность, для генерации случайных чисел?

Описание: Свойства блока (временная метка, сложность) и другие предсказуемые значения не должны использоваться для генерации случайных чисел, поскольку на них могут влиять или предсказывать майнеры.

Исправление: Вместо этого используйте безопасный источник случайных чисел, такой как Chainlink VRF, схемы commit-reveal или механизм рандомизации с доказанной справедливостью.

Настоящая случайность (randomness) в блокчейне – это сложно. block.timestamp и block.difficulty на первый взгляд могут казаться случайными, но майнеры могут влиять на них, делая результат предсказуемым.

Майнеры могут манипулировать block.timestamp в рамках правил консенсуса, и хотя они имеют очень ограниченный краткосрочный контроль над block.difficulty, полагаться на них в критически важных для безопасности логических операциях – в целом плохая идея.

Представьте себе лотерею, в которой майнер заранее знает выигрышный номер. Не совсем честная игра. Опять же, это относится к манипуляциям майнеров, когда они используют свое влияние для получения преимущества.

Давайте посмотрим на несовершенный лотерейный контракт:

pragma solidity ^0.8.0;


// SPDX-License-Identifier: UNLICENSED


contract Lottery {
address public winner;


function pickWinner() public {
// Vulnerable randomness generation using block.timestamp
uint256 randomNumber = uint256(block.timestamp) % 100;
if (randomNumber == 7) {
winner = msg.sender;
} else {
winner = address(0);
}
}


function getBlockTimestamp() public view returns (uint256) {
return block.timestamp;
}
}


Здесь pickWinner использует block.timestamp для генерации «случайного» числа. Злоумышленник может изменить временную метку блока, содержащего транзакцию pickWinner, повлияв на результат и сфальсифицировав лотерею.

Вместо того, чтобы полагаться на легко манипулируемые свойства блока, используйте безопасный источник случайности, такой как Chainlink VRF, который предоставляет проверяемое и непредсказуемое случайное число, обеспечивая справедливость и предотвращая манипуляции. Свойства блока, такие как block.prevrandao, также лучше, чем block.timestamp, но все же не следует полагаться на них из-за возможности их устаревания.
  • 🔥 5
More from @solidityset
  1. Sep 22, 2026Какой язык программирования учить сейчас? На днях в Твиттере увидел небольшой пост о разви…
  2. Sep 18, 2026Интересная модель Jev Буквально пару дней назад в Твиттере многие начали обсуждение новой…
  3. Sep 14, 2026Графы повсюду Если вы также следите за новостями в мире ИИ, то наверняка уже все чаще встр…
  4. Sep 10, 2026GTA6, Cyberleek, блокчейн и безопасность Увидел несколько постов (тут и тут) про Cyberleek…
  5. Sep 9, 2026Работа с чистой энергией Дисклеймер Сегодня ава и название канала, наконец, поменялись. Я…
  6. Sep 9, 2026Channel name was changed to «Из Solidity в AI и дальше»
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →