В этом примере FixedAuction мы используем block.number вместо block.timestamp для определения окончания аукциона. Это делает время проведения аукциона предсказуемым и устойчивым к манипуляциям майнеров с block.timestamp.
Однако майнер может вообще отказаться от добычи блоков, что задержит окончание аукциона, хотя это и является менее прямой формой манипуляции. Кроме того, использование block.number делает аукцион зависимым от скорости создания блоков. Если время блоков несовместимо, продолжительность аукциона может немного варьироваться в реальном времени.
Если требуется более детальное и согласованное время, рассмотрите возможность использования оракула Chainlink, но имейте в виду повышенную сложность и затраты на газ.
В целом рекомендуется избегать разработки функций, чувствительных ко времени с точностью до секунд, поскольку майнеры могут манипулировать временными метками блоков в пределах допустимых значений (обычно ±15 секунд в Ethereum). Смарт-контракты должны реализовывать механизмы, основанные на времени, с достаточными буферными периодами, чтобы предотвратить экономическую эксплуатацию посредством незначительных корректировок временных меток.
#miner #mev
📟 Прилетело из @solidityset
Однако майнер может вообще отказаться от добычи блоков, что задержит окончание аукциона, хотя это и является менее прямой формой манипуляции. Кроме того, использование block.number делает аукцион зависимым от скорости создания блоков. Если время блоков несовместимо, продолжительность аукциона может немного варьироваться в реальном времени.
Если требуется более детальное и согласованное время, рассмотрите возможность использования оракула Chainlink, но имейте в виду повышенную сложность и затраты на газ.
В целом рекомендуется избегать разработки функций, чувствительных ко времени с точностью до секунд, поскольку майнеры могут манипулировать временными метками блоков в пределах допустимых значений (обычно ±15 секунд в Ethereum). Смарт-контракты должны реализовывать механизмы, основанные на времени, с достаточными буферными периодами, чтобы предотвратить экономическую эксплуатацию посредством незначительных корректировок временных меток.
#miner #mev
📟 Прилетело из @solidityset
Кладезь Знаний | Мысли вслух
За последние 2 года ведения этого телеграм-канала я накопил сотни полезных материалов для разработчиков: от начинающих до людей, которые хотят найти свою первую работу в web3
И как свойственно контенту - он устаревает и у меня нету желания мониторить и обновлять то, что я писал 2-3 года назад!
Поэтому я создал свой кладезь знаний, свою общину, свой Олимп разработчиков web3
Задача была одна - объединение таких-же амбициозных личностей в одном месте, для совместного создания проектов и инструментов которыми в результате будут пользоваться сотни тысяч и миллионы пользователей
Сегодня я представляю Олимп - наше место силы и базы знаний о web3
Цена: $99 / Пожизненно
Каждый год 31 декабря в 23:03 цена будет повышаться
Оплата и прочие вопросы - @jerskrew
Пора собираться на Олимп!
📟 Прилетело из @code_vartcall
За последние 2 года ведения этого телеграм-канала я накопил сотни полезных материалов для разработчиков: от начинающих до людей, которые хотят найти свою первую работу в web3
И как свойственно контенту - он устаревает и у меня нету желания мониторить и обновлять то, что я писал 2-3 года назад!
Поэтому я создал свой кладезь знаний, свою общину, свой Олимп разработчиков web3
Задача была одна - объединение таких-же амбициозных личностей в одном месте, для совместного создания проектов и инструментов которыми в результате будут пользоваться сотни тысяч и миллионы пользователей
Сегодня я представляю Олимп - наше место силы и базы знаний о web3
На Олимпе:
Гайды с нуля до первой работы в web3
Мои Закрытые Материалы, как вы могли видеть в этом посте
Гайды с нуля до Solidity
Гайды с нуля до Solana
Гайды по взаимодействию с криптой с нуля
И в последующем прямые эфиры, совместные проекты, живые встречи, игры и веселье
Цена: $99 / Пожизненно
Каждый год 31 декабря в 23:03 цена будет повышаться
Оплата и прочие вопросы - @jerskrew
Пора собираться на Олимп!
📟 Прилетело из @code_vartcall
RPC с НУЛЯ: как работает сердце блокчейна
youtu.be/g34Lk2SPIoc
youtu.be/g34Lk2SPIoc
youtu.be/g34Lk2SPIoc
Время блокчейна!
📟 Прилетело из @code_vartcall
youtu.be/g34Lk2SPIoc
youtu.be/g34Lk2SPIoc
youtu.be/g34Lk2SPIoc
Время блокчейна!
📟 Прилетело из @code_vartcall
ПЕРВЫЙ СКРИПТ для БЛОКЧЕЙНА: проще, чем ты думаешь
youtu.be/c4tsb_tubHs
youtu.be/c4tsb_tubHs
youtu.be/c4tsb_tubHs
Применяем!
📟 Прилетело из @code_vartcall
youtu.be/c4tsb_tubHs
youtu.be/c4tsb_tubHs
youtu.be/c4tsb_tubHs
Применяем!
📟 Прилетело из @code_vartcall
Как начать свой путь в блокчейн разработке
Пошаговый план из моих последних видео:
1. Зачем нам web3 разработка
2. Языки программирования для web3
3. Получение своего первого ключа доступа к блокчейну
4. Написание первого скрипта
Сделаем контент лучше:
На 1 час выключаю платные сообщения, поэтому:
Напишите в комментариях, что улучшить в видео, чего вам не хватило в последних материалах
📟 Прилетело из @code_vartcall
Пошаговый план из моих последних видео:
1. Зачем нам web3 разработка
2. Языки программирования для web3
3. Получение своего первого ключа доступа к блокчейну
4. Написание первого скрипта
Сделаем контент лучше:
На 1 час выключаю платные сообщения, поэтому:
Напишите в комментариях, что улучшить в видео, чего вам не хватило в последних материалах
📟 Прилетело из @code_vartcall
Как начать свой путь в блокчейн разработке
Пошаговый план из моих последних видео:
1. Зачем нам web3 разработка
2. Языки программирования для web3
3. Получение своего первого ключа доступа к блокчейну
4. Написание первого скрипта
Сделаем контент лучше:
На 1 час выключаю платные сообщения, поэтому:
Напишите в комментариях, что улучшить в видео, чего вам не хватило в последних материалах
📟 Прилетело из @code_vartcall
Пошаговый план из моих последних видео:
1. Зачем нам web3 разработка
2. Языки программирования для web3
3. Получение своего первого ключа доступа к блокчейну
4. Написание первого скрипта
Сделаем контент лучше:
На 1 час выключаю платные сообщения, поэтому:
Напишите в комментариях, что улучшить в видео, чего вам не хватило в последних материалах
📟 Прилетело из @code_vartcall
Переименовать ли канал?
Anonymous Poll
100%
Оставить как есть: незрячий web3 программист
0%
Незрячий программист в крипте
0%
Незрячий программист-криптон
#новости этой недели: пишу статью с вопросами ко мне, другое и опрос.
1. Как написал в заголовке поста, пишу статью с вопросами ко мне, как к незрячему программисту в крипте.
Если у вас есть что спросить, пишите в комментариях. Уникальные вопросы доавлю в статью.
2. Прошу ответить на опрос ниже. Задумался, что может стоит переименовать канал? Например, назвать "Незрячий программист в крипте".
3. Опубликовал во вторник анонс ноябрьского события The trends, но оказалось, что они не смогут меня сопроводить туда и обратно.
Поэтому удалил.
4. Отдыхаю. Из-за этого нет крупных статей с обзорами.
Всё.
Хорошего дня!
😎 Незрячий web3 программист (подписаться)
Чат | бот
📟 Прилетело из @blind_dev
1. Как написал в заголовке поста, пишу статью с вопросами ко мне, как к незрячему программисту в крипте.
Если у вас есть что спросить, пишите в комментариях. Уникальные вопросы доавлю в статью.
2. Прошу ответить на опрос ниже. Задумался, что может стоит переименовать канал? Например, назвать "Незрячий программист в крипте".
3. Опубликовал во вторник анонс ноябрьского события The trends, но оказалось, что они не смогут меня сопроводить туда и обратно.
Поэтому удалил.
4. Отдыхаю. Из-за этого нет крупных статей с обзорами.
Всё.
Хорошего дня!
😎 Незрячий web3 программист (подписаться)
Чат | бот
📟 Прилетело из @blind_dev
Атака майнеров. Часть 3
Использует ли контракт свойства блока, такие как временная метка или сложность, для генерации случайных чисел?
Описание: Свойства блока (временная метка, сложность) и другие предсказуемые значения не должны использоваться для генерации случайных чисел, поскольку на них могут влиять или предсказывать майнеры.
Исправление: Вместо этого используйте безопасный источник случайных чисел, такой как Chainlink VRF, схемы commit-reveal или механизм рандомизации с доказанной справедливостью.
Настоящая случайность (randomness) в блокчейне – это сложно. block.timestamp и block.difficulty на первый взгляд могут казаться случайными, но майнеры могут влиять на них, делая результат предсказуемым.
Майнеры могут манипулировать block.timestamp в рамках правил консенсуса, и хотя они имеют очень ограниченный краткосрочный контроль над block.difficulty, полагаться на них в критически важных для безопасности логических операциях – в целом плохая идея.
Представьте себе лотерею, в которой майнер заранее знает выигрышный номер. Не совсем честная игра. Опять же, это относится к манипуляциям майнеров, когда они используют свое влияние для получения преимущества.
Давайте посмотрим на несовершенный лотерейный контракт:
Здесь pickWinner использует block.timestamp для генерации «случайного» числа. Злоумышленник может изменить временную метку блока, содержащего транзакцию pickWinner, повлияв на результат и сфальсифицировав лотерею.
Вместо того, чтобы полагаться на легко манипулируемые свойства блока, используйте безопасный источник случайности, такой как Chainlink VRF, который предоставляет проверяемое и непредсказуемое случайное число, обеспечивая справедливость и предотвращая манипуляции. Свойства блока, такие как block.prevrandao, также лучше, чем block.timestamp, но все же не следует полагаться на них из-за возможности их устаревания.
📟 Прилетело из @solidityset
Использует ли контракт свойства блока, такие как временная метка или сложность, для генерации случайных чисел?
Описание: Свойства блока (временная метка, сложность) и другие предсказуемые значения не должны использоваться для генерации случайных чисел, поскольку на них могут влиять или предсказывать майнеры.
Исправление: Вместо этого используйте безопасный источник случайных чисел, такой как 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, но все же не следует полагаться на них из-за возможности их устаревания.
📟 Прилетело из @solidityset
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import {VRFConsumerBaseV2Plus} from "@chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2Plus.sol";
import {VRFV2PlusClient} from "@chainlink/contracts/src/v0.8/vrf/dev/libraries/VRFV2PlusClient.sol";
/**
* @noscript SecureLottery
* @notice A lottery contract using Chainlink VRF V2.5 for verifiable randomness
* @dev This is an example contract and should not be used in production without proper auditing
*/
contract SecureLottery is VRFConsumerBaseV2Plus {
// Chainlink VRF configuration
uint256 public s_subnoscriptionId;
bytes32 public keyHash = 0x787d74caea10b2b357790d5b5247c2f63d1d91572a9846f780606e4d953677ae; // Sepolia gas lane
uint32 public callbackGasLimit = 100000;
uint16 public requestConfirmations = 3;
uint32 public numWords = 1;
// Lottery state variables
uint256 public randomNumber;
address public winner;
mapping(uint256 => bool) public requestIds;
uint256 public lastRequestId;
// Events
event RandomnessRequested(uint256 requestId);
event WinnerSelected(address winner, uint256 randomNumber);
/**
* @param subnoscriptionId Chainlink VRF subnoscription ID
* @param vrfCoordinator Address of the VRF Coordinator contract
*/
constructor(
uint256 subnoscriptionId,
address vrfCoordinator
) VRFConsumerBaseV2Plus(vrfCoordinator) {
s_subnoscriptionId = subnoscriptionId;
}
/**
* @notice Request random number from Chainlink VRF
* @param useNativePayment Whether to pay in native tokens (true) or LINK (false)
* @return requestId The ID of the randomness request
*/
function requestRandomWinner(bool useNativePayment) external returns (uint256 requestId) {
// Request randomness from Chainlink VRF
requestId = s_vrfCoordinator.requestRandomWords(
VRFV2PlusClient.RandomWordsRequest({
keyHash: keyHash,
subId: s_subnoscriptionId,
requestConfirmations: requestConfirmations,
callbackGasLimit: callbackGasLimit,
numWords: numWords,
extraArgs: VRFV2PlusClient._argsToBytes(
VRFV2PlusClient.ExtraArgsV1({
nativePayment: useNativePayment
})
)
})
);
requestIds[requestId] = true;
lastRequestId = requestId;
emit RandomnessRequested(requestId);
return requestId;
}
/**
* @notice Callback function called by VRF Coordinator when randomness is fulfilled
* @param requestId The ID of the randomness request
* @param randomWords The random words generated by Chainlink VRF
*/
function fulfillRandomWords(
uint256 requestId,
uint256[] calldata randomWords
) internal override {
require(requestIds[requestId], "Request not found");
require(randomWords.length > 0, "Random words array is empty");
// Process the random value
randomNumber = randomWords[0] % 100; // Example: limit to 0-99 range
// Lottery winner selection logic would go here
// For example, if you have participants in an array:
// winner = participants[randomNumber % participants.length];
emit WinnerSelected(winner, randomNumber);
}
/**
* @notice Get the status of a VRF request
* @param requestId The ID of the randomness request
* @return exists Whether the request exists
*/
function getRequestStatus(uint256 requestId) external view returns (bool exists) {
return requestIds[requestId];
}
}
📟 Прилетело из @solidityset
Этот контракт SecureLottery использует Chainlink VRF для генерации действительно случайного числа. Функция requestRandomWords запрашивает случайное число у службы Chainlink VRF. Функция fulfillRandomWords (которая ДОЛЖНА присутствовать при наследовании от VRFConsumerBaseV2Plus) получает случайное число и использует его для определения победителя. Это обеспечивает справедливый и непредсказуемый результат лотереи.
Использование Chainlink VRF влечет за собой внешние зависимости и затраты на газ. Кроме того, требуется настроить подписку на Chainlink VRF и управлять связанными с ней сборами. Однако эти затраты часто являются оправданной платой за повышенную безопасность и справедливость.
#miner #mev
📟 Прилетело из @solidityset
Использование Chainlink VRF влечет за собой внешние зависимости и затраты на газ. Кроме того, требуется настроить подписку на Chainlink VRF и управлять связанными с ней сборами. Однако эти затраты часто являются оправданной платой за повышенную безопасность и справедливость.
#miner #mev
📟 Прилетело из @solidityset
Пишу передним числом что сейчас делаю
🟢 Подготовил legion для сейла YB от Михаила Егорова. Предлагаемая оценка адекватная. На Score-based аллоку не сильно рассчитываю, больше целюсь в фкфс. Выбрал именно легион, поскольку он дает возможность участвовать со своего кошелька или же экспортировать их внутренний. В случае каких-либо проблем, они должны позволить забрать свои кровные (по крайней мере я на это надеюсь). В случае же с кракеном такой гарантии нет, акков бирж на левых людей стараюсь избегать.
🔵 Присматриваюсь к покупке $PUMP. За последние 30 дней было откуплено ~3% от circulating supply, у hyperliquid всего ~0.065%. Как минимум по этому показателю pump имеет задел на иксы, а если (когда) вернется мета мемов, возможна и ещё большая переоценка.
📟 Прилетело из @findmeonchain
📟 Прилетело из @findmeonchain
Please open Telegram to view this post
VIEW IN TELEGRAM
Сентябрь 2025
Разберем все самые важные события и обновления этого месяца
Последние 4 видео решил сделать в новом формате, накиньте фитбек, что улучшить, за самые интересные обновления отправлю файл - как начать свой путь в web3
📟 Прилетело из @code_vartcall
Разберем все самые важные события и обновления этого месяца
Контент:
Лучший сайт для изучения WEB3
Зачем тебе 200 тг-каналов, когда есть Twitter Списки
400 000 строк кода X: что скрывает алгоритм рекомендаций
Зачем я ВЛЕЗ в WEB3?
Без ЭТИХ языков WEB3 НЕ СУЩЕСТВУЕТ
RPC с НУЛЯ: как работает сердце блокчейна
ПЕРВЫЙ СКРИПТ для БЛОКЧЕЙНА: проще, чем ты думаешь
Запуск закрытого сообщества - Олимп
Последние 4 видео решил сделать в новом формате, накиньте фитбек, что улучшить, за самые интересные обновления отправлю файл - как начать свой путь в web3
📟 Прилетело из @code_vartcall
ШОБ ВЫ ПАНИМАЛИ
Пол дня разбирался с сейлом YB на legion. Если честно, это один из самых странных и глупых сейлов, которые я видел.
Контракт совершенно не приспособлен для фкфс:
1) Ончейн таймстемп старта не зашит. Когда бек разрешит, тогда и стартанет сейл :) Может стартануть на 15 минут раньше объявленого времени, например
2) Кепка сверху не ограничена. То есть туда могут накидать сильно больше 3кк. Как они будут распределять фкфс аллоки? Слишком много вопросов и слишком мало ответов
3) Контракт не проверяет ничего кроме подписи от бека. 1 кош может хоть лям закинуть))
4) Есть шанс, что на сейле подсунут другой контракт, от чего все скриптеры улетят в ханипот (маловероятно, но все же)
5) Для фкфс в эфире надо газануть. Не исключаю, что результаты этого фкфс отменят, деньги рефанднут, но газ никто не возместит
Вывод?
На 99% уверен, что будет как с фуелом(миша всё хуйня, давай по новой)
Честно, хочу скипнуть, попробовать только руками. Несмотря даже на готовый софт, я уверен, что меня наебут (as usual)
Что думаете сами вообще?
📟 Прилетело из @findmeonchain
Пол дня разбирался с сейлом YB на legion. Если честно, это один из самых странных и глупых сейлов, которые я видел.
Контракт совершенно не приспособлен для фкфс:
1) Ончейн таймстемп старта не зашит. Когда бек разрешит, тогда и стартанет сейл :) Может стартануть на 15 минут раньше объявленого времени, например
2) Кепка сверху не ограничена. То есть туда могут накидать сильно больше 3кк. Как они будут распределять фкфс аллоки? Слишком много вопросов и слишком мало ответов
3) Контракт не проверяет ничего кроме подписи от бека. 1 кош может хоть лям закинуть))
4) Есть шанс, что на сейле подсунут другой контракт, от чего все скриптеры улетят в ханипот (маловероятно, но все же)
5) Для фкфс в эфире надо газануть. Не исключаю, что результаты этого фкфс отменят, деньги рефанднут, но газ никто не возместит
Вывод?
На 99% уверен, что будет как с фуелом
Честно, хочу скипнуть, попробовать только руками. Несмотря даже на готовый софт, я уверен, что меня наебут (as usual)
Что думаете сами вообще?
📟 Прилетело из @findmeonchain
Атака майнеров. Часть 4
Зависит ли логика контракта от порядка транзакций?
Описание: Майнеры контролируют порядок транзакций и могут использовать это для атак типа «фронт-раннинг», «бэк-раннинг» или «сэндвич».
Устранение: Реализуйте защиту, позволяя пользователям указывать приемлемые результаты, которые отменяют транзакции в случае нарушения.
Майнеры определяют порядок включения транзакций в блок. Хотя майнеры обычно отдают приоритет транзакциям с более высокими ценами на газ, они не обязаны этого делать. Это позволяет злонамеренным майнерам (или сложным ботам) стратегически упорядочивать транзакции в своих интересах. Такое использование может привести к фронтран, бекран или сэндвич атакам. Эти атаки используют манипуляции с порядком транзакций для извлечения выгоды.
Представьте себе децентрализованную биржу (DEX). Майнер видит в мемпуле крупный ордер на покупку определенного токена. Он может вставить свой собственный ордер на покупку перед крупным ордером (фронт-раннинг), что приведет к росту цены. Затем он может вставить свой ордер на продажу после крупного ордера (бэк-раннинг или сэндвич-атака), извлекая прибыль из роста цены, вызванного первоначальной сделкой.
Вот упрощенная уязвимая DEX:
📟 Прилетело из @solidityset
Зависит ли логика контракта от порядка транзакций?
Описание: Майнеры контролируют порядок транзакций и могут использовать это для атак типа «фронт-раннинг», «бэк-раннинг» или «сэндвич».
Устранение: Реализуйте защиту, позволяя пользователям указывать приемлемые результаты, которые отменяют транзакции в случае нарушения.
Майнеры определяют порядок включения транзакций в блок. Хотя майнеры обычно отдают приоритет транзакциям с более высокими ценами на газ, они не обязаны этого делать. Это позволяет злонамеренным майнерам (или сложным ботам) стратегически упорядочивать транзакции в своих интересах. Такое использование может привести к фронтран, бекран или сэндвич атакам. Эти атаки используют манипуляции с порядком транзакций для извлечения выгоды.
Представьте себе децентрализованную биржу (DEX). Майнер видит в мемпуле крупный ордер на покупку определенного токена. Он может вставить свой собственный ордер на покупку перед крупным ордером (фронт-раннинг), что приведет к росту цены. Затем он может вставить свой ордер на продажу после крупного ордера (бэк-раннинг или сэндвич-атака), извлекая прибыль из роста цены, вызванного первоначальной сделкой.
Вот упрощенная уязвимая DEX:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
// Simple ERC20 token for testing
contract TestToken is ERC20 {
constructor(string memory name, string memory symbol, uint256 initialSupply) ERC20(name, symbol) {
_mint(msg.sender, initialSupply);
}
}
// Simplified DEX that's vulnerable to front-running
contract VulnerableDEX {
TestToken public tokenA;
TestToken public tokenB;
uint public reserveA;
uint public reserveB;
constructor(address _tokenA, address _tokenB) {
tokenA = TestToken(_tokenA);
tokenB = TestToken(_tokenB);
}
// Initialize liquidity
function addLiquidity(uint amountA, uint amountB) external {
tokenA.transferFrom(msg.sender, address(this), amountA);
tokenB.transferFrom(msg.sender, address(this), amountB);
reserveA += amountA;
reserveB += amountB;
}
// Calculate output amount for a given input
function _calculateSwapOutput(address tokenIn, uint amountIn) internal view returns (uint amountOut) {
require(tokenIn == address(tokenA) || tokenIn == address(tokenB), "Invalid token");
bool isTokenA = tokenIn == address(tokenA);
if (isTokenA) {
amountOut = (reserveB * amountIn) / (reserveA + amountIn);
require(amountOut < reserveB, "Insufficient liquidity");
} else {
amountOut = (reserveA * amountIn) / (reserveB + amountIn);
require(amountOut < reserveA, "Insufficient liquidity");
}
return amountOut;
}
// Execute the swap with pre-calculated output
function _executeSwap(address tokenIn, uint amountIn, uint amountOut, address sender) internal {
bool isTokenA = tokenIn == address(tokenA);
if (isTokenA) {
tokenA.transferFrom(sender, address(this), amountIn);
// Update reserves
reserveA += amountIn;
reserveB -= amountOut;
// Transfer output tokens to the user
tokenB.transfer(sender, amountOut);
} else {
tokenB.transferFrom(sender, address(this), amountIn);
reserveB += amountIn;
reserveA -= amountOut;
tokenA.transfer(sender, amountOut);
}
}
// Vulnerable swap function (no minimum output)
function swap(address tokenIn, uint amountIn) external returns (uint amountOut) {
// Calculate the expected output
amountOut = _calculateSwapOutput(tokenIn, amountIn);
// Execute the swap
_executeSwap(tokenIn, amountIn, amountOut, msg.sender);
return amountOut;
}
}
📟 Прилетело из @solidityset
В этом контракте VulnerableDEX функция обмена не имеет защиты от проскальзывания, что делает ее уязвимой для атак типа «сэндвич». Эти атаки являются формой эксплуатации максимально извлекаемой стоимости (MEV), при которой прибыль извлекается путем манипулирования порядком транзакций.
Когда жертва отправляет транзакцию обмена в мемпул, опытные поисковики MEV выявляют возможность и выполняют трехэтапную атаку:
1. Фронтранинг: сначала злоумышленник размещает транзакцию на покупку целевого актива, намеренно завышая цену.
2. Транзакция жертвы: своп жертвы выполняется по этой искусственно завышенной цене, и она получает меньше токенов, чем ожидалось, из-за отсутствия гарантий минимального выхода.
3. Бэкранинг: злоумышленник продает ранее приобретенные токены по более высокой цене, созданной транзакцией жертвы, получая разницу в цене в качестве прибыли.
Хотя любой участник, отслеживающий mempool, может осуществлять атаки типа «сэндвич», производители блоков обладают привилегированными возможностями по упорядочиванию транзакций, что позволяет им осуществлять такие атаки с большей степенью уверенности.
Стратегии смягчения последствий зависят от конкретного контекста, но в целом защита от проскальзывания предотвращает атаки типа «сэндвич», гарантируя, что транзакция жертвы не будет выполнена по невыгодной цене. Позвольте пользователям указывать максимальное проскальзывание, которое они готовы допустить при совершении сделки. Если цена выходит за пределы этого порога, транзакция отменяется. Это защищает пользователей от атак типа «сэндвич».
Вот пример защиты от проскальзывания, которая смягчает последствия атаки типа «сэндвич», описанной в тесте выше.
#miner #mev
📟 Прилетело из @solidityset
Когда жертва отправляет транзакцию обмена в мемпул, опытные поисковики MEV выявляют возможность и выполняют трехэтапную атаку:
1. Фронтранинг: сначала злоумышленник размещает транзакцию на покупку целевого актива, намеренно завышая цену.
2. Транзакция жертвы: своп жертвы выполняется по этой искусственно завышенной цене, и она получает меньше токенов, чем ожидалось, из-за отсутствия гарантий минимального выхода.
3. Бэкранинг: злоумышленник продает ранее приобретенные токены по более высокой цене, созданной транзакцией жертвы, получая разницу в цене в качестве прибыли.
Хотя любой участник, отслеживающий mempool, может осуществлять атаки типа «сэндвич», производители блоков обладают привилегированными возможностями по упорядочиванию транзакций, что позволяет им осуществлять такие атаки с большей степенью уверенности.
Стратегии смягчения последствий зависят от конкретного контекста, но в целом защита от проскальзывания предотвращает атаки типа «сэндвич», гарантируя, что транзакция жертвы не будет выполнена по невыгодной цене. Позвольте пользователям указывать максимальное проскальзывание, которое они готовы допустить при совершении сделки. Если цена выходит за пределы этого порога, транзакция отменяется. Это защищает пользователей от атак типа «сэндвич».
Вот пример защиты от проскальзывания, которая смягчает последствия атаки типа «сэндвич», описанной в тесте выше.
// Secure swap function with minimum output requirement
function swapWithMinimumOutput(
address tokenIn,
uint amountIn,
uint minAmountOut
) external returns (uint amountOut) {
// Calculate the expected output
amountOut = _calculateSwapOutput(tokenIn, amountIn);
// Check slippage before executing the swap
require(amountOut >= minAmountOut, "Slippage too high");
// Execute the swap
_executeSwap(tokenIn, amountIn, amountOut, msg.sender);
return amountOut;
}
#miner #mev
📟 Прилетело из @solidityset
Перспективен ли Boundless $ZKC? Рассматриваем проект через его токеномику.
Что это?
Его сравнивают с Succinct, поэтому и решил изучить после предыдущего проекта, потому что тоже занимаются ZKP.
Подробнее - ниже.
RiscZero - фреймворк для выполнения программ с ZKP на базе архитектуры Risc-V.
Недавно запустили Boundless - универсальный ZK-протокол, обеспечивающий проверяемые вычисления с поддержкой кроссчейна через децентрализованный рынок доказательств.
Проще говоря - сеть, где разные блокчейны и другие проекты могут закупать услуги пруверов для ZK-доказательств.
Boundless интегрировали Wormhole, EigenLayer, Bob и Lido.
RiscZero интегрировали Eclipse и WorldChain.
Токеномика по Cryptorank, так как в tokenomist почему-то нет его.
Пишут, что заблокировано 93.1% - это очень много!
Соответственно разблокировано 5.4%.
Учитывая капитализацию в 80 МЛН $ - слабый проект.
Пишут также, что следующий разлок 1.5% - это больше нормы (для стабильности надо менее 1%).
Распределение:
1. Ecosystem Fund - 31%. Все в локе.
Как понимаю - это на развитие экосистемы. Куда будут распределяться и насколько эффективно, непонятно - это минус. Также минус, что не было часть на TGE, что сказалось возможно на перспективности (не смогли поддерживать экосистему сразу).
2. Core Team & Early Contributors - 23.5%. Это много, так как максимум 10% на команду.
Но тут помимо команды ещё и Первые участники. Сколько им распределяют - неизвестно, но если 13.5% - норм.
Вот только все токены заблокированы ещё.
3. Investors - 21.5%. Тоже много, так как им стоит выделять не более 10%.
Опять же, всё заблокировано.
4. Strategic Growth Fund - 18% (всё в локе). Опять же, средства команды. Да: они будут выделять на развитие, но кому и как непонятно.
Про ДАО не указано.
5. Community Sale & Aidrop - 6% (разблокировано 5.4%).
Распределили пользователям довольно мало. При этом, большая часть уже доступна, и лишь крохи в локе (на будущие награды, как понимаю) - это не красит проект.
Ближайший разлок 15 октября (через 14 дней) на 1.5% от общего количества и 7.46% от рыночной капитализации.
Вся сумма идёт в Strategic Growth Fund.
Это довольно много: может понизить курс от 10 до 50%.
Я не вижу по крайней мере предпосылок к тому, чтоб Boundless удержал курс.
В ноябре столько же. И далее каждый месяц.
А в сентябре 2026 будет разблокировано 25% от общего предложения (102% от маркеткапа) - очень большой выплеск. Выделяется Ecosystem Fund, Core Team & Early Contributors, Investors и Strategic Growth Fund.
Утилиты ZKC:
1. Провайдеры стейкают ≥10× комиссии запроса; при невыполнении работа наказывается сжиганием и баунти для других.
2. PoVW-майнинг — вознаграждение ZKC за генерацию доказательств при условии стейкинга.
3. Протокольный стейкинг — доступ к PoVW, участие в управлении и 25% базовых наград.
4. Награды провайдерам — 75% эмиссии распределяется за вычислительную работу.
5. Голосование — управление параметрами протокола и его развитием.
6. Снижение предложения — рост спроса блокирует больше ZKC в коллатерале, слешинг уменьшает циркуляцию.
Итог:
Утилиты интересные, но проект вряд ли перспективен будет и успешен с точки зрения токена:
Большие разлоки в будущем, малая капитализация сейчас и малое распределение сообществу (страдает децентрализация).
Интегрироваться с другими проектами Boundless может и дальше, но в этом плане более перспективным кажется Succinct $PROVE.
Это была рубрика #перспектива.
А что вы думаете по этому проекту и токену? Напишите своё мнение в комментариях.
😎 Незрячий web3 программист (подписаться)
Чат | бот
📟 Прилетело из @blind_dev
Что это?
Его сравнивают с Succinct, поэтому и решил изучить после предыдущего проекта, потому что тоже занимаются ZKP.
Подробнее - ниже.
RiscZero - фреймворк для выполнения программ с ZKP на базе архитектуры Risc-V.
Недавно запустили Boundless - универсальный ZK-протокол, обеспечивающий проверяемые вычисления с поддержкой кроссчейна через децентрализованный рынок доказательств.
Проще говоря - сеть, где разные блокчейны и другие проекты могут закупать услуги пруверов для ZK-доказательств.
Boundless интегрировали Wormhole, EigenLayer, Bob и Lido.
RiscZero интегрировали Eclipse и WorldChain.
Токеномика по Cryptorank, так как в tokenomist почему-то нет его.
Пишут, что заблокировано 93.1% - это очень много!
Соответственно разблокировано 5.4%.
Учитывая капитализацию в 80 МЛН $ - слабый проект.
Пишут также, что следующий разлок 1.5% - это больше нормы (для стабильности надо менее 1%).
Распределение:
1. Ecosystem Fund - 31%. Все в локе.
Как понимаю - это на развитие экосистемы. Куда будут распределяться и насколько эффективно, непонятно - это минус. Также минус, что не было часть на TGE, что сказалось возможно на перспективности (не смогли поддерживать экосистему сразу).
2. Core Team & Early Contributors - 23.5%. Это много, так как максимум 10% на команду.
Но тут помимо команды ещё и Первые участники. Сколько им распределяют - неизвестно, но если 13.5% - норм.
Вот только все токены заблокированы ещё.
3. Investors - 21.5%. Тоже много, так как им стоит выделять не более 10%.
Опять же, всё заблокировано.
4. Strategic Growth Fund - 18% (всё в локе). Опять же, средства команды. Да: они будут выделять на развитие, но кому и как непонятно.
Про ДАО не указано.
5. Community Sale & Aidrop - 6% (разблокировано 5.4%).
Распределили пользователям довольно мало. При этом, большая часть уже доступна, и лишь крохи в локе (на будущие награды, как понимаю) - это не красит проект.
Ближайший разлок 15 октября (через 14 дней) на 1.5% от общего количества и 7.46% от рыночной капитализации.
Вся сумма идёт в Strategic Growth Fund.
Это довольно много: может понизить курс от 10 до 50%.
Я не вижу по крайней мере предпосылок к тому, чтоб Boundless удержал курс.
В ноябре столько же. И далее каждый месяц.
А в сентябре 2026 будет разблокировано 25% от общего предложения (102% от маркеткапа) - очень большой выплеск. Выделяется Ecosystem Fund, Core Team & Early Contributors, Investors и Strategic Growth Fund.
Утилиты ZKC:
1. Провайдеры стейкают ≥10× комиссии запроса; при невыполнении работа наказывается сжиганием и баунти для других.
2. PoVW-майнинг — вознаграждение ZKC за генерацию доказательств при условии стейкинга.
3. Протокольный стейкинг — доступ к PoVW, участие в управлении и 25% базовых наград.
4. Награды провайдерам — 75% эмиссии распределяется за вычислительную работу.
5. Голосование — управление параметрами протокола и его развитием.
6. Снижение предложения — рост спроса блокирует больше ZKC в коллатерале, слешинг уменьшает циркуляцию.
Итог:
Утилиты интересные, но проект вряд ли перспективен будет и успешен с точки зрения токена:
Большие разлоки в будущем, малая капитализация сейчас и малое распределение сообществу (страдает децентрализация).
Интегрироваться с другими проектами Boundless может и дальше, но в этом плане более перспективным кажется Succinct $PROVE.
Это была рубрика #перспектива.
А что вы думаете по этому проекту и токену? Напишите своё мнение в комментариях.
😎 Незрячий web3 программист (подписаться)
Чат | бот
📟 Прилетело из @blind_dev
Крипто Devs | Gnezdo Hub
ШОБ ВЫ ПАНИМАЛИ Пол дня разбирался с сейлом YB на legion. Если честно, это один из самых странных и глупых сейлов, которые я видел. Контракт совершенно не приспособлен для фкфс: 1) Ончейн таймстемп старта не зашит. Когда бек разрешит, тогда и стартанет…
Вступайте в мой сквад legion!
- Объявляют 1кк на рейтинг, остальное на фкфс
- Через день меняют условия на 2кк по рейтингу, 3кк фкфс
- В день сейла(после моего поста) убирают фкфс вовсе, ведь у них продукт под это не заточен
Вы просто прикиньте, чуваки год над платформой трудятся. ГОД!! Ничего вообще не поменялось с момента релиза.
И при любом хоть немного интересном сейле:
- Не работает подсчет скора
- Не работают конекты социалок
- Сам сайт грузится как в 2007
- Ну и вишенка на торте — если логинится больше 100 человек одновременно, платформа просто падает
В общем, ничего нового. Демдальше
📟 Прилетело из @findmeonchain
- Объявляют 1кк на рейтинг, остальное на фкфс
- Через день меняют условия на 2кк по рейтингу, 3кк фкфс
- В день сейла
Вы просто прикиньте, чуваки год над платформой трудятся. ГОД!! Ничего вообще не поменялось с момента релиза.
И при любом хоть немного интересном сейле:
- Не работает подсчет скора
- Не работают конекты социалок
- Сам сайт грузится как в 2007
- Ну и вишенка на торте — если логинится больше 100 человек одновременно, платформа просто падает
В общем, ничего нового. Демдальше
📟 Прилетело из @findmeonchain
Discord WEB3
Так как посты в канале появляются не часто, общаюсь и публикую свои мысли в нашем Discord
discord.gg/adqeN22F
50 мест
📟 Прилетело из @code_vartcall
Так как посты в канале появляются не часто, общаюсь и публикую свои мысли в нашем Discord
discord.gg/adqeN22F
50 мест
📟 Прилетело из @code_vartcall