22/06/2019
Франциско проживает в Канаде и имеет докторскую степень по физике. Обладает широким опытом в области бизнеса и работе некоммерческих организаций. Проводил активные исследования и инвестировал в криптовалюты, начиная с 2011 года. Основную область интересов Франциско представляют экономические, социальные, регулятивные аспекты криптовалют, а также аспекты их долгосрочной жизнеспособности. Франциско входит в команду ведущих разработчиков Monero Project с 2016 года.
Аннотация
Использование анонимных технологий в инклюзивных блокчейнах ограничивает использование многих общепринятых антиспам инструментов, а также ограничивает использование множества способов контроля над общим размером блокчейна. Это особенно актуально при отсутствии возможности просмотра суммы транзакции в блокчейне. Цензурирование является примером таких мер противодействия спаму и ограничения размера. Monero также служит хорошим примером инклюзивного блокчейна, обладает очень высоким уровнем взаимозаменяемости, конфиденциальности и анонимности, которые не являются опцией. Мы рассмотрим меры, которые в настоящее время используются в отношении блокчейна Monero с целью противодействия спаму и контроля его размера, при этом основное внимание будет нами уделено последним изменениям. Мы поговорим о теории ценообразования, монетарной теории, а также о динамических пределах. Также мы рассмотрим текущие задачи, включая измерение технологических изменений блокчейна Monero, а также возможные области исследований, направленных на решение этих задач.
Стенограмма:
Итак, о чём я буду сегодня говорить. Я буду говорить о противодействии спаму, что также можно назвать контролем блокчейна. С точки зрения множества различных блокчейнов, включая Monero, конечно, Monero, но также и с точки зрения некоторых так называемых новых открытых блокчейнов.
Я перехожу к следующему слайду, нажимаю большую зелёную кнопку с буквой О. Начнём, оу, минуточку, как вернуться? Красная, красная и… О’Кей.
Итак, когда речь заходит о противодействии спаму, проще начать с того, что является наиболее распространённой проблемой, с электронной почты. Электронная почта по существу является инклюзивной, но не анонимной. Как мы отфильтровываем спам в случае с почтой? Мы занимаемся цензурированием. Мы цензурируем и полагаемся на репутацию отправителя. Так мы, например, прогоняем через спам-фильтр. Мы также принимаем во внимание историю определённого сервера. Занимается ли он рассылкой спама? Или же мы смотрим на тип сервера, например, не является ли он взломанной домашней системой, и мы блокируем такие серверы. Таким образом, мы переходим к более интересным вопросам. Как бы выглядела почта, если бы мы брали всю критическую информацию об отправителе, получателе, информацию заголовка, и всё это бы шифровали, а затем шифровали бы само электронное сообщение, после чего отправляли бы его через Tor? Как бы мы смогли заблокировать спам в этом случае? И ответ очевиден: это было бы очень и очень сложно в нынешней ситуации, мы не можем точно определить, что получили спам, что-то плохое или что-то хорошее, читая кибертекст. Точно так же мы не можем ничего сказать о репутации анонимного отправителя или провайдера. Таким образом, мы имеем дело с фундаментальной проблемой: в открытой среде вы фактически можете заниматься цензурированием и полагаться на репутацию, но в зашифрованной среде, даже когда уровень анонимности ниже совершенного, всё становится гораздо сложнее.
О’Кей, идём дальше. Нет, вот этот, я вернулся назад.
Существует множество различных подходов. Bitcoin и подобные Bitcoin монеты, я говорю о таких монетах, как Litecoin, Bitcoin Cash, Bitcoin SV, Dash, ZCash, Dogecoin и так далее, опираются на фиксированный вес, размер блока и в некоторых случаях на минимальные комиссии за ретрансляцию. Под минимальными комиссиями за ретрансляцию я подразумеваю минимальную комиссию, которая выплачивается в открытую, которая видна всем, узлу за передачу транзакции.
В случае с Monero и подобными ей монетами фиксированный размер блока, по сути, заменяется адаптивным размером блока в некоторых случаях с подобными минимальными комиссиями за ретрансляцию, а относительно недавно Monero стала использовать двойное среднее значение. Подход Monero требует наличия минимального вознаграждения за блок, пост-эмиссии, только при этих условиях он будет работать. Ещё одна вещь, о которой необходимо помнить, состоит в том, что некоторые вещи взаимозаменяемы, другие — нет. Поэтому вы не можете просто перенести то, что использует Bitcoin, в Monero и наоборот. Это может стать проблемой, когда мы начнём искать способы противодействия спаму.
О’Кей, с этим может возникнуть проблема. Переходим к следующему слайду. О’Кей, Litecoin, так, я пропустил один, я пропустил Bitcoin и Bitcoin Cash, продолжаем.
Bitcoin. Это первое введение блока размером один мегабайт в 2010 году. Тогда, в 2010, предполагалось, что уровень анонимность Bitcoin достаточно хорош. Сегодня мы знаем, что это не так, но в то время так считалось. И у Bitcoin, вплоть до сегодняшнего дня, нет минимальной комиссии, выплачиваемой узлам за ретрансляцию. Довольно интересно, что на заре существования Bitcoin спам-атаки не были проблемой, когда сеть не была перегружена, даже в 2013. Спам-атаки стали проблемой, когда узлы стали приближаться к максимальному заполнению, когда блоки стали близки к этому. Причиной является то, что спам-атака, в случае с Bitcoin, может принести выгоду, если вы контролируете очень небольшой процент хешрейта, а следовательно, вы можете извлечь выгоду, проводя спам-атаку на Bitcoin, даже несмотря на высокие комиссии. Такие дела.
Теперь перейдём к Bitcoin Cash и Bitcoin SV. Они используют подход, предполагающий большой размер блока, и, в случае с Bitcoin Cash, блок весит 32 мегабайта, а у Bitcoin SV — 128, и тут есть свой минимум, в обоих случаях есть минимум, выраженный в сатоши для соответствующего уровня для ретрансляции узлом. И наиболее интересным примером здесь является Bitcoin SV, поскольку во многих смыслах он близок к Monero в отношении потенциальных размеров блоков. Но снова затраты на спам для одного блока составляют примерно 1,3 BSV на 10-минутный блок. И, опять же, мне неизвестно о спам-атаках, которые бы проводились на пустой блокчейн этих валют. Одним из элементов, заинтересовавших меня, является мотивация, которая стоит за спамом, и я ещё вернусь к этому вопросу, так как он представляется критически важным для понимания того, что такое спам-атака — есть ли какой-то мотив, и если чёткого мотива нет, то риск заметно снижается.
О’Кей, Litecoin. Снова пример с небольшими блоками, ZCash, это анонимная монета, или же часть её анонимна, и снова минимальный вес блока в этом случае отсутствует. В случае с Dash и ZCash интересно то, что они не берут комиссию за ретрансляцию, а у Litecoin она есть. И в этом случае не было никаких прямых атак. Теперь, когда я говорю о прозрачных блокчейнах, а я буду называть их анонимными, важно понимать, что их можно атаковать другими способами, например, путём анализа блокчейна в режиме реального времени, а затем использовать полученную информацию для того, чтобы избежать спам-атаки, но делать это нужно именно в режиме реального времени. У вас есть доступ к сумме транзакции, но я не включил этого, я допускаю квази-анонимную природу этого из-за типа применяемых мер, возможно, ограничения размера блока и установки комиссии с затрат, минимальной комиссии с затрат, всё это в равной степени применимо к Monero. Что касается этого, мы не полагаемся, скажем, на приоритезацию более высоких транзакций, как это делалось в определённый момент в случае с Bitcoin, например.
И с этим мы переходим к следующему слайду. О’Кей, тут у нас Monero и подобные ей монеты, и я собираюсь поговорить о двух из них, представляющих интерес. Итак, Monero начала с первой итерации противодействия спаму, то есть, да, это была штрафная функция CryptoNote, реализованная в 2014 году. Затем, в том же 2014, была введена минимальная комиссия за ретрансляцию узлами Monero. Это было сделано в ответ на мотивированную спам-атаку. Это было в новинку для Monero. Была найдена уязвимость, и чтобы воспользоваться ею, злоумышленнику нужно было раздуть блок до определённого размера. Это требовало определённого увеличения объёма, и в этом и заключалась атака, проведённая в 2014. Реакцией сообщества стало введение минимальной комиссии за ретрансляцию узлами, которую взимают сами узлы, которые просто указывают её, и если комиссия не будет выплачена, они не станут ретранслировать транзакцию. А затем в 2019 был введён подход с двойным средним значением, который стал самой последней инновацией, и я вернусь к нему позднее в своём выступлении.
Bytecoin интересен по одной причине, они так же, как и Monero, использовали адаптивный размер блока CryptoNote, но недавно изменили этот механизм на голосование, позволяющее майнерам определить размер блока, и я подозреваю, что причиной необходимости в этом изменении стал быстро падающий размер вознаграждения за блок, и это при отсутствии минимального вознаграждения, что приближает нас к Bitcoin и Monero. Таким образом, фундаментальной проблемой снова становится отсутствие минимальной комиссии за ретрансляцию узлами, но и в случае с Bytecoin им пришлось перейти от CryptoNote к голосованию майнеров, поскольку вознаграждение за блок стало очень и очень низким. Это подводит нас к необходимости в наличии минимального вознаграждения за блок, что позволит избежать вероятности спам-атаки, с которой мы столкнулись сегодня с Monero. Некоторые другие валюты, использующие адаптивный размер блока, делают то же самое, некоторые из них применяют комиссии за ретрансляцию узлами, обычно унаследованные у Monero, некоторые добавляют двойные и краткосрочные средние значения. В большинстве случаев это монеты, которые следуют подходу Monero.
О’Кей, посмотрим, получится ли у меня перейти, продолжаем.
Мы видим инструмент, который использует Monero для противодействия спаму. Он наполовину [неразборчиво] и первичный инструмент [неразборчиво] непосредственно штрафной функции CryptoNote. И характеристики очень интересны, но, по сути, мы говорим о штрафе, который будет на вас наложен, если вы увеличите размер блока сверх определённого значения. Мы имеем установленное максимально допустимое весовое значение блока транзакций, то есть предел возможного масштабирования, а затем берётся среднее значение по сотне блоков, по всем блокам, после чего можно перейти к следующему базовому размеру блока. Таким образом, необходимо взять по крайней мере 50 блоков такого размера, а затем перейти к этому размеру, это главное правило, и правило определяет штраф, который должен выплатить майнер. Ключевым моментом является понимание того, что штраф за дополнительную транзакцию должен компенсироваться из комиссий, которые выплачиваются за транзакции. Так устанавливаются комиссии в случае с Monero. Таким образом, если у вас есть майнинг-транзакция, вам необходимо заплатить, и на вас будет наложен штраф, если добавите эту транзакцию, или, что правильнее, дополнительный штраф. Таким образом, вам необходимо заплатить достаточное количество комиссий за транзакцию, чтобы оправдать её майнинг, и это будет рациональным аргументом для майнера.
Переходим к следующему слайду.
Итак, в целом, что мы можем сделать? Мы можем записать штраф в упрощённой форме. По сути, мы берём увеличение процента по размеру блока, обозначенного как B, а затем мы записываем штраф, строго говоря, штраф, который налагается, это вознаграждение за блок, которое является нашим базовым вознаграждением за блок, количество раз, на которое этот блок увеличивается, возводится в квадрат. То есть, по сути, мы переписываем формулу вычисления штрафа CryptoNote с точки зрения этого отношения, B, что важно. Если размер вашего блока составляет 300 000 байт, отношение к B будет составлять 0,1. Если вы добавите 3000, то будет 0,01. Таким образом, мы получаем суму штрафа, который вам придётся заплатить, если вы сделаете это. Еще более интересно то, что если взглянуть на первую производную штрафа относительно B, то можно увидеть увеличивающийся штраф, который будет необходимо уплатить, если вы добавите транзакцию, и это критический параметр транзакции.
По сути, мы имеем следующее: мы имеем транзакцию T с размером Mt, а затем мы смотрим, а мы уже находимся в штрафном режиме, мы смотрим на дополнительный штраф, который будет добавлен к транзакции, но вы рациональный майнер, и вы хотите добавить одну транзакцию. И эта транзакция будет иметь комиссию и будет иметь штраф, и если вы решите оптимизировать свой алгоритм майнинга, то вам нужно будет упорядочить транзакции, просто расположить их в определённом порядке, например, по уплате комиссий за байт, это не оптимальный вариант, но близко к нему. А затем вы будете знать, какой штраф вы заплатите, какую комиссию будете платить по минутам, уйдёте ли в минус с такой инкрементальной транзакцией, и затем сможете остановить добавление транзакций в блок и выдадите добытый майнингом блок. И здесь есть два варианта, если вы затем расширите уравнение, в основном это будет квадратное уравнение, вы получите 2BBBt (2BBt), и в этом случае B будет также в квадрате. Если B будет равен 0, то вы уже попадаете под штраф, единственным членом, который будет возведён в квадрат, будет B, и этот член будет использован для определения нормальной комиссии. 2BBt является членом, используемым для определения растущей комиссии, которую мог бы заплатить майнер. И по сути, это ваша комиссия за байт. Именно так вычисляются комиссии Monero, поскольку все транзакции в целом конкурируют по штрафам, и у вас образуется рынок комиссий, но этот рынок существует между самими транзакциями, входящими в блок, но и вы также можете конкурировать по штрафам, чтобы ваша транзакция вошла в блок.
Следующий слайд.
В этом примере мы создадим базовую транзакцию, что и делается при определении размера нормальной комиссии. Берём 3000 байт, размер некоторым образом характерный для типовой транзакции, что считается безопасной надбавкой, затем смотрим на минимальный размер блока, составляющий 300 000 байт, предполагается, что у транзакции будет два входа и два выхода, добавляем небольшую надбавку, нормальная комиссия за байт после этого становится… формула основана на R, Br больше Mn, и Br является Mr больше Mn, [неразборчиво] размер транзакции плюс сверх отношения, что составляет 0,01. Это гарантирует, что при типовой транзакции будет выплачена достаточно большая комиссия, чтобы можно было масштабировать вес блока. Таким образом, мы избегаем ситуации, при которой все пытаются… они не берут комиссию, установленную по умолчанию, если они возьмут нормальную комиссию, то этого, по крайней мере, будет достаточно, чтобы произвести масштабирование в блоке. Кроме того, нами были разработаны две другие комиссии, которые основаны на этой, нормальные комиссии, равные x, помноженный на два, извините, это низкая комиссия, а есть и высокая, равная x, помноженному на пять. Эти отношения являются в основном произвольными в том смысле, что мы можем выбрать их, в частности, если вы хотите повысить низкую комиссию, вы можете сделать это. Просто необходимо соблюдать осторожность и не повысить её слишком, так как это может уничтожить рынок комиссий, сведя его к самому штрафу. Но можно рассмотреть и возможность использования этих двух комиссий, в частности, низкой, если кому-то хочется повысить комиссии простым способом.
Переходим к следующему слайду. Теперь рассмотрим высокую комиссию, основанную на доведении штрафа до максимума. И это критически важно, так как эта комиссия, которая будет выбрана злоумышленником, скажем, для проведения атаки большого взрыва. И эта комиссия в основном определяется штрафом и вознаграждением за блок. Что мы делаем: мы берём производную, мы вычисляем транзакцию непосредственно в точке максимального штрафа, а затем мы допускаем, что это то лицо, которое хочет поднять размер штрафа до максимума, это та комиссия, которая с него снимается. И, по сути, наша комиссия попадает в структуру комиссий, низкая комиссия составляет в основном 0,002 от вознаграждения за блок, поделённые на Mn, что является средним значением среднего размера блока, а мы по-прежнему имеем дело с ситуацией со средним значением, и затем мы получаем нормальную, высокую и самую высокую комиссии. Ключевым моментом здесь является то, и это прозвучало в выступлении Митчелла, например, что если вы собираетесь создать новую структуру комиссий, это не даёт никакой информации, вы фокусируетесь на коэффициенте, имеющем значение 2, или любом другом коэффициенте, который вы хотите выбрать, и вы получаете R на основе Mn. Таким образом, вы выводите за скобки вознаграждение за блок, поскольку, по существу, оно одинаково для всех. И вы выводите за скобки средний размер блока, поскольку, опять же, он будет одним и тем же для каждого, а затем вы вычисляете или создаёте дискретную комиссию из того, что осталось. И так вы обеспечиваете дополнительную анонимность, и в то же самое время вы получаете комиссии, которые синхронизированы с реальным штрафом CryptoNote. А это реально слабое место, когда мы говорим о комиссиях.
И вспомните, если вы взглянете на наклонный график, который был показан ранее, то вы точно увидите это, падение комиссий, указывающее на падение вознаграждения за блок. И это нам видится иначе. Со временем происходит следующее, поскольку мы начинаем учитывать вознаграждение за блок, мы видим падающий график у тех, кто фактически выделяется, у тех, кто не следует протоколу, поскольку они устанавливают стандартную комиссию, а затем график становится ровным. И это реальное отклонение, но это техническое решение, как вы вводите комиссии, вы делаете это в этой точке.
Таким образом, они являются произвольными, будучи основанными на нормальной комиссии. Минимальная комиссия за ретрансляцию узлом равна низкой комиссии, и её можно изменить. В 2019 мы сделали кое-что ещё. Нами было введено долгосрочное среднее значение. Теперь долгосрочное среднее значение вычисляется на основе 100 000 блоков. И за этим стоит очень простой принцип. Структура комиссий Monero должна была обеспечивать долгосрочный рост блокчейна Monero, комиссии должны были соответствовать реальному состоянию блокчейна. Но этот подход не актуален, когда вы попадаете в ситуацию резкого скачка. При помощи долгосрочного среднего значения мы отделяем долгосрочный рост Monero, что поддерживает масштабируемость и не позволяет проводить атаки, которые происходят в случае с Bitcoin. И в то же самое время мы создаём механизм, позволяющий справиться с ситуациями кратковременного скачка объёма транзакций. Классическим примером, и есть много данных, предоставленных Visa, классическим примером может служить рост перед 25 декабря. Вы видите это значительное повышение уровня транзакций, а затем, на Рождество, он падает практически до нуля. Таким образом, мы наблюдаем резкий взлёт и падение. И это среднее значение, равное 50, было вычислено на основе цифр, предоставленных Visa, плюс значительное дополнение, позволяющее сети разрастаться в ближнесрочной перспективе, и так далее, но в основном в этом и состоит концепция. Многие задают вопрос, когда это произойдёт, что будет, если мы используем простое двойное среднее значение с теми же самыми блоками. Ну, в этом случае проблема состоит в том, что если вы сделаете это, вы прекратите использовать вашу совокупную величину долгосрочного среднего значения, это станет равносильно банкротству. Вам не нужно 50x увеличение совокупной величины долгосрочного среднего значения, вам нужно что-то гораздо меньшее, в районе 1,4x, сравнимое с 2x увеличением в случае с краткосрочным средним значением. И для этого нужно взять часть блока, которая включена в долгосрочное среднее значение и превышает существующее долгосрочное среднее значение порядка 1,4. Таким образом, вы не включаете весь блок в долгосрочное среднее значение, а только ту часть, которая превышает долгосрочное среднее значение в 1,4 раза. И это позволяет контролировать рост долгосрочного среднего значения в пределах разумного уровня, который не зависит от 50x увеличения, с которым придётся иметь дело при работе с транзакциями в краткосрочной перспективе.
Вторым сделанным нами шагом, критически важным шагом, стало вычисление комиссий на основе долгосрочного, а не краткосрочного среднего значения. Это изменение фундаментально повлияло на уровень защиты от атаки большого взрыва, что будет показано на моём следующем слайде. И, опять же, это ключевое разграничение, которое было сделано и которое повлияло на спам.
О’Кей, итак, изменение весового значения блока ограничено до 50 раз. И снова, если вы решите продолжать атаку, то затраты на атаку раздутого блока для спамера увеличатся в 50 раз. Затраты на поддержку атаки эквивалентны самой атаке, скажем, как в случае с Bitcoin SV. Совокупная частота ограничивается значением 1,4x, и это было отражено в предыдущем слайде.
И вот некоторые примеры. Перед тем как мы внесли изменения, поддержка для пяти блоков Monero составляла 0,025 Monero. После внесения изменений поддержка для 15 мегабайт составила 1,25 Monero. И это ключевое различие. Это, пожалуй, самое мощное средство сдерживания спам-атаки. Для сравнения, в случае с Bitcoin SV, который пытается защитить блоки размером 128 мегабайт, на поддержку атаки тратится 0,75 BSV, и, конечно, это просто ничто. В случае с Monero сумму придётся увеличить, и если злоумышленник не поддержит атаку, то ему придётся платить и комиссию с увеличения. Таким образом, невозможно просто подключить или отключить это.
Итак, я привожу некоторые рыночные значения, просто для сравнения, они, как выяснилось, являются ключевым фактором. Вторым фактором, безусловно, является то, что мы краткосрочно ограничиваем атаку до 15 мегабайт. Можно дойти и до 30, но тогда за спам-атаку на Monero придётся заплатить максимальную комиссию.
Теперь в этом примере, в самом… как бы вернуться к предыдущему слайду на секундочку? Существует ряд различных вопросов, связанных с тем, что существующая атака большого взрыва не имела чётко выраженного мотива, за исключением спама. Одним из ключевых элементов конкретно этой атаки является то, что она была направлена на деанонимизацию, и это добавляет атаке мощности, потому что теперь атака становится мотивированной, и мотивом служит деанонимизация. Если угодно, можете связать это с вопросами, которые обсуждались в двух предыдущих выступлениях, и вы получите дополнение, и атака большого взрыва станет угрозой, гораздо большей угрозой, чем была до этого, так как теперь у нас есть мотив. В реальности существует ещё множество различных вещей, но мне кажется, что выбор анонимности в качестве цели, вероятно, является самым сильным вариантом. Как и структура комиссий, в том смысле, что мы могли бы обновить её. Были даны и другие рекомендации. Определённо, рассматривалась возможность увеличения размера кольца, особенно если мы реализуем такие «встраиваемые» комиссии.
Давайте пропустим это, я хочу пропустить этот слайд. Мне следует… так, я подошёл к заключительной части.
Итак, спам-атаки с чётким мотивом гораздо опасней, чем немотивированные, и очень важно об этом помнить. Если обратиться к нашему опыту, атака на Monero была вызвана необходимостью в создании уязвимости, которую можно было бы использовать. Необходимо привести размер блока к определённому значению. В случае с Bitcoin мы наблюдаем атаки, даже не смотря на большой размер комиссий. Опять же, причина, как и раньше, состоит в том, чтобы получить с этого деньги. Поэтому нам следует рассматривать мотив. Увеличение количества миксинов и, возможно, повышение минимальной комиссии за ретрансляцию, как мне кажется, являются разумными аспектами противодействия, особенно в случае с эффективностью кольцевых подписей, что уже обсуждалось.
А теперь ваши вопросы.
[аплодисменты]
Вопрос из зала: Вы бегло упомянули об атаке на анонимность, что обсуждалось последние пару месяцев, раздутие размера колец с использованием имеющихся у вас выходов. Не кажется ли вам, что изменение структуры комиссий более недопустимо, и увеличение размеров блоков за счёт собственных выходов является способом решения проблемы, или же нам следует сделать что-то другое?
Повторю, это пример нацеленной атаки, и примером для такой нацеленной атаки послужила анонимность. Что бы я здесь рассмотрел, как вариант, конкретно в случае с этой атакой, это увеличение размера кольца, так как это непосредственно увеличит затраты злоумышленника. Если кольцо будет, например, в два раза больше, чем мы имеем сейчас, 20 ложных выходов или 10. Ну, понадобится увеличить и объём спама в два раза, чтобы добиться того же уровня деанонимизации. И это сравнительно дешёвое решение, если, например, мы посмотрим на результаты множества других исследований, то это укладывается в рамки с точки зрения эффективности и кольцевых подписей. Как по мне, это простой способ защитить Monero уже сегодня в основном потому, что вы решаете и другие вопросы.
Также я думаю, что это сложная атака. Мне не кажется, что сама по себе она будет эффективной. Но в сочетании с чем-то другим, что уже упоминалось, потенциально она может стать более опасной. Опять же, если решить другие вопросы, такие как рекомендации по комиссиям, чтобы комиссия не была тем, от чего мы пытаемся избавиться. Опять же, мы можем смягчить ситуацию таким образом.
Единственной комиссией, которую можно рассматривать с точки зрения возможности увеличения, является самая низкая комиссия. Это выполнимо. То есть вы можете даже взять всё полностью и установить минимальную комиссию, которая, скажем, будет чуть ниже нормальной комиссии. Это возможность, вы сможете получить пятикратную выгоду из этого при реализации. Но я бы сказал, что реальный ответ лежит в рассмотрении мотива, а мотивом в данном конкретном случае является атака на анонимность монеты.
[аплодисменты]
Перевод: Mr. Pickles
Редактирование: Agent LvM
Коррекция: Kukima