[{"data":1,"prerenderedAt":238},["ShallowReactive",2],{"docs:ru:\u002Fdocs\u002Fduel\u002Fcontracts\u002Fsecurity":3},{"id":4,"title":5,"body":6,"cover":229,"description":230,"extension":231,"meta":232,"navigation":233,"path":234,"seo":235,"stem":236,"__hash__":237},"docs\u002Fru\u002Fdocs\u002Fduel\u002Fcontracts\u002Fsecurity.md","Безопасность",{"type":7,"value":8,"toc":219},"minimark",[9,13,18,35,39,102,122,126,152,156,182,185,199,203,213],[10,11,5],"h1",{"id":12},"безопасность",[14,15,17],"h2",{"id":16},"что-имеет-ценность","Что имеет ценность",[19,20,21,29],"ul",{},[22,23,24,28],"li",{},[25,26,27],"strong",{},"ETH и токены пулов"," — в позициях, которые никто не может вывести. ETH стороны покидает её пул, только когда эту сторону в него продают: трейдер или выравнивание hook после сделки, разведшей три цены.",[22,30,31,34],{},[25,32,33],{},"Банки, комиссии создателей и комиссии протокола"," — их хранит hook в виде прав требования на ETH в PoolManager Uniswap V4, с отдельным учётом для каждой дуэли.",[14,36,38],{"id":37},"что-это-защищает","Что это защищает",[19,40,41,47,57,68,74,80,86,96],{},[22,42,43,46],{},[25,44,45],{},"Заблокированная ликвидность."," Только фабрика может открывать зарегистрированные пулы или добавлять в них ликвидность при запуске; вывод и пожертвование откатываются.",[22,48,49,52,53,56],{},[25,50,51],{},"Ограниченные получатели."," Банк покупает только победителя своей дуэли; комиссии создателя идут только создателю дуэли: кошельку, который её запустил, или адресу, которому он передал роль и который её принял. Комиссии протокола идут в ",[25,54,55],{},"текущее казначейство",", которое владелец фабрики может сменить через 48 часов, в том числе для уже накопленных комиссий протокола.",[22,58,59,62,63,67],{},[25,60,61],{},"Ограниченные полномочия фабрики."," У токенов нет владельца и функции выпуска, а hook нельзя ни обновить, ни приостановить. Владелец фабрики может приостановить новые запуски, предложить ограниченные условия для будущих дуэлей или сменить казначейство после задержки. Он также может сразу снизить долю протокола в комиссии за своп всех дуэлей, вплоть до нуля, или вернуть её обратно, но никогда не выше условий дуэли: то, что протокол не берёт, идёт в банки. Владелец может навсегда отказаться от роли (",[64,65,66],"code",{},"renounceOwnership","): тогда условия, казначейство, ставка протокола и приостановка остаются как есть, кроме уже предложенного изменения, которое любой может применить после задержки.",[22,69,70,73],{},[25,71,72],{},"Расчёт перед свопом."," Первый своп после закрытия рассчитывает завершённое среднее до начала торговли. Потолок выкупа находится примерно на 10 % выше ориентира, хранимого с точностью до долей тика: это 30-минутное экспоненциальное среднее тиков пула ETH, ограниченное снизу текущим тиком, чтобы оно сразу следовало за ценой вниз.",[22,75,76,79],{},[25,77,78],{},"Раунды только в ETH."," Соотношение и среднее раунда используют два пула ETH. Переход A\u002FB, который не сдвигает ни одной цены в ETH, не меняет ни сигнал, ни активность раунда, который иначе остался бы тихим.",[22,81,82,85],{},[25,83,84],{},"Комиссии только при полном исполнении."," Свопы с предварительным списанием комиссии откатываются, если не могут полностью исполнить запрошенную сумму. Сетевой газ — отдельно.",[22,87,88,91,92,95],{},[25,89,90],{},"Изолированное выравнивание."," Сохраняются только прибыльные циклы, ограниченные ETH продающего пула. Неудачная попытка откатывается и пропускается; при нехватке газа откатывается своп (",[64,93,94],{},"ArbitrageStarved","), чтобы вызывающий не мог пропустить выравнивание, придержав газ. Это не гарантирует совпадения цен и не защищает от всех торговых потерь.",[22,97,98,101],{},[25,99,100],{},"Одинаковые правила на любом маршруте."," Hook взимает комиссии, налоги и сжигания, будь то роутер Duel или любой другой роутер V4.",[103,104,105,106,109,110,113,114,117,118,121],"p",{},"Фабрика начинает работу с приостановленными запусками. Пока ",[64,107,108],{},"paused()"," равно true, запустить дуэль может только ",[64,111,112],{},"owner()","; вызовы остальных откатываются с ",[64,115,116],{},"CreationPaused",". Владелец открывает запуски через ",[64,119,120],{},"setPaused(false)",". Существующие дуэли продолжают торговаться.",[14,123,125],{"id":124},"что-показывает-сайт","Что показывает сайт",[19,127,128,134,140,146],{},[22,129,130,133],{},[25,131,132],{},"Изображения только с сайта."," Страницы показывают изображения дуэли только с собственного адреса Duel и только обработанные сайтом: JPEG, PNG или WebP, сначала прочитанный по заголовку (не более 1536 × 1536 пикселей и 5 МБ), декодированный в WebAssembly, вписанный в 1024 пикселя и заново закодированный в WebP без метаданных. Политика безопасности страниц не позволяет им загружать изображения откуда-либо ещё.",[22,135,136,139],{},[25,137,138],{},"Изолированные кодеки."," Изображения декодируются в отдельном Worker, к которому обращается только сайт и который ничего не хранит: ни ключей, ни хранилища. Уязвимость в кодеке затронула бы только изображение, которое он читает. Сайт проверяет ответ этого Worker (статичный WebP ожидаемого размера) перед сохранением, а декодеры на C запускаются заново для каждого изображения.",[22,141,142,145],{},[25,143,144],{},"Дуэли, запущенные напрямую через контракт."," В их данных может быть указан любой адрес. Сайт не показывает изображения по https; изображение из IPFS он загружает один раз через публичный шлюз (не более 5 МБ и 10 секунд), обрабатывает его как загрузку и показывает свою копию или инициалы стороны.",[22,147,148,151],{},[25,149,150],{},"Ограниченные загрузки."," Сайт принимает изображения только со своих страниц: десять в минуту с одного адреса и ограниченное число в сутки. Изображение, которое не указано ни в одной дуэли, удаляется через сутки.",[14,153,155],{"id":154},"как-это-проверялось","Как это проверялось",[19,157,158,164,170,176],{},[22,159,160,163],{},[25,161,162],{},"Автоматические тесты"," покрывают поведение контрактов, веб-приложение и бота оповещений. Покрытие — это метрика тестов, а не доказательство безопасности любого возможного поведения.",[22,165,166,169],{},[25,167,168],{},"Форк-тесты"," проверяют интеграцию с развёрнутыми в Robinhood Chain контрактами Uniswap V4, включая Universal Router, Permit2 и V4 Quoter.",[22,171,172,175],{},[25,173,174],{},"Регрессионные тесты"," сохраняют случаи, найденные при внутренней проверке, включая учёт комиссий, граничные случаи запуска, расчёт и опустошённые пулы.",[22,177,178,181],{},[25,179,180],{},"Инвариантные тесты"," проверяют учёт на случайных последовательностях сделок, расчётов и выплат: права требования на ETH должны совпадать с причитающимися суммами, а промежуточные токены не должны оставаться в hook, фабрике или роутере. Прохождение заданного числа прогонов не доказывает безопасность для любой возможной последовательности.",[103,183,184],{},"Внутренняя проверка нашла и исправила маршрут с точным выходом в обход антиснайп-налога, соотношение, которое не следовало за стороной, купленной в одиночку, опустошённые пулы, которые неверно читала ориентирная цена выкупа, и небезопасные ссылки в метаданных дуэли.",[186,187,190],"callout",{"title":188,"type":189},"Внешнего аудита пока не было","warning",[103,191,192,193,198],{},"Контракты прошли внутреннюю проверку, а не внешний аудит. Их нельзя обновить: ошибку, найденную позже, нельзя будет исправить в действующих дуэлях. Прочитайте ",[194,195,197],"a",{"href":196},"\u002Fdocs\u002Fduel\u002Frisks","Риски",".",[14,200,202],{"id":201},"как-сообщить-об-уязвимости","Как сообщить об уязвимости",[103,204,205,206,212],{},"Если вы считаете, что нашли уязвимость, спасибо, что нашли время сообщить о ней. Напишите нам в личные сообщения в Telegram, ",[194,207,211],{"href":208,"rel":209},"https:\u002F\u002Ft.me\u002Fchatwithdivine",[210],"nofollow","@chatwithdivine",", что вы нашли и, если можете, как это воспроизвести, и дайте нам время разобраться, прежде чем что-либо публиковать. Мы быстро ответим и будем держать вас в курсе.",[103,214,215,216,198],{},"Мы никогда не пишем первыми: доверяйте только ",[194,217,211],{"href":208,"rel":218},[210],{"title":220,"searchDepth":221,"depth":222,"links":223},"",2,3,[224,225,226,227,228],{"id":16,"depth":221,"text":17},{"id":37,"depth":221,"text":38},{"id":124,"depth":221,"text":125},{"id":154,"depth":221,"text":155},{"id":201,"depth":221,"text":202},null,"Как Duel защищает средства в пулах, банки и комиссии: заблокированная ликвидность, ограниченные полномочия фабрики, правила расчёта, автоматические тесты и внутренняя проверка.","md",{},true,"\u002Fru\u002Fdocs\u002Fduel\u002Fcontracts\u002Fsecurity",{"title":5,"description":230},"ru\u002Fdocs\u002Fduel\u002Fcontracts\u002Fsecurity","JaE1npquihG6GG1mAa-gxqp8HNpnPct4zwHmARjhmE8",1791231667653]