Pages:
Author

Topic: Временное снижение сложности или блоки с &#10 (Read 15988 times)

member
Activity: 112
Merit: 10
潔くカッコ良く生きて行こう!
newbie
Activity: 6
Merit: 0
Прочитал всю тему. Очень интересная дискуссия.
Проблема масштабируемости биткоинта действительно встанет очень остро, если система получит большое распространение.

Но зачем изобретать велосипед? Действительно временное снижение сложности, предложенное в этом топике, полностью эквивалентно увеличению (или снятию) ограничения на максимальный размер блока (в коде это изменение одного define). Но зачем тогда разработчики вообще поставили это ограничение?
Причин я вижу две:
1. Ограничение роста истории (об этом уже упоминал yurock);
2. Ограничение трафика между узлами сети. Если блоки будут слишком большими, то они будут долго перекачиваться между узлами сети, не все же пользователи подключены к гигабитному каналу Wink А если каналы будут заняты перекачкой блоков, то распространение транзакций замедлится (и блоки и транзакции распространяются по сети по одним принципам и по одним каналам).

Но разработчики уже намечают пути решения этой проблемы. Вот здесь предлагаются варианты решения проблем узких мест системы https://en.bitcoin.it/wiki/Scalability
Если кратко и по русски то предлагается следующее. Передавать по сети не весь блок, а только его заголовок (80 байт) + хеши всех транзакций вошедших в блок (32 байта на каждую транзакцию). Сами тела транзакций передаваться не будут (сейчас это в среднем 300-500 байт на одну транзакцию). Размер блока снизится на порядок. Идея заключается в том что у клиента уже есть все эти транзакции в памяти (in-memory pool), они туда попадают когда транзакция распространяется по сети. Если каких-то транзакций не хватает, то их можно запросить у соседа. Т.е. сейчас по сути транзакции передаются по сети (и проверяются подписи) дважды: первый раз когда транзакция распространяется по сети, второй раз когда блок с этой транзакцией распространяется по сети. В общем в клиенте есть что оптимизировать и разработчики об этом думают.

Теперь о комиссии.
У меня сложилось впечатление что многие не понимают как она работает и от чего зависит. Это конечно печально. Если приходя в банк мне говорят комиссия 3% от суммы перевода - тут все понятно (только дорого). В биткоине же комиссия считается очень хитро (непонятно когда берется, а когда нет, как влияет на приоритет транзакции и т.д.). Я основательно покопался в исходниках чтобы разобраться в этой ситуации.

Вот что мне удалось выяснить (если в чем-то ошибаюсь, поправьте):
1. Есть 2 вида минимальной комиссии: MIN_TX_FEE и MIN_RELAY_TX_FEE (0.01 и 0.0005 для версии 0.3.22). MIN_TX_FEE проверяется при создании транзакции, а MIN_RELAY_TX_FEE при распространении транзакции по сети и включении в блок. Минимальная комиссия применяется в качестве коэффициента и умножается на размер транзакции в Кб.
2. Для каждой транзакции рассчитывается приоритет:
sum(valuein * age) / txsize
   valuein - количество монет на выходе входной транзакции,
   age - количество подтверждений входной транзакции,
   txsize - размер новой транзакции.
Таким образом чем больше монет мы переводим и чем большим количеством блоков они подтверждены и чем меньше размер транзакции, тем выше приоритет. Из этой формулы также следует что с каждым новым блоком созданным в системе, приоритет старых невлезших в предыдущий блок транзакций будет увеличиваться и они рано или поздно попадут в блок.
3. Транзакция может быть бесплатной если её приоритет выше COIN * 144 / 250. Это соответствует переводу одного биткоина пришедшего к вам сутки назад в стандартной транзакции (собранной не из копеек). Именно этот механизм призван чтобы защитить систему от спама. У вас есть выбор либо заплатить небольшую комиссию и использовать "свежие" коины или подождать пару дней и провести перевод без комиссий.
4. Есть еще несколько условий для бесплатности транзакции. Размер транзакции должен быть не более 10 Кб, размер блока при добавлении этой транзакции должен быть не более 27 Кб (первые 27 Кб в блоке), выходные суммы у транзакции должны быть не менее 0.01 BTC.
5. Транзакции включаются в блок в порядке приоритета.
6. Отдельные майнеры и пулы могут установить пороговую комиссию и транзакции с меньшей комиссией не включать в свои блоки. Судя по исходникам это еще не реализовано, но пока и генерируемых монет всем хватает.

Из выше описанного алгоритма следует одна очень интересная особенность. На данный момент у майнеров и пулов не установлено пороговых комиссий и средний размер блока 23 Кб, а значит плата за транзакцию никак не влияет на её приоритет. Она будет влиять только когда появятся майнеры с разными пороговыми комиссиями.

Рассмотрим пример. Есть 3 пула: A - комиссия 0.05; B - комиссия 0.01; C - комиссия 0. Допустим что мощность пулов примерно равна и других майнеров в сети нет. Тогда заплатив комиссию 0.05 наша транзакция попадет в следующий блок с вероятностью 100%, заплатив комиссию 0.01 - с вероятностью 66% и если мы не заплатили комиссию вообще, то с вероятностью 33%. Это без учета размеров блока и приоритетов. При этом комиссия не влияет на приоритет, т.е. если наша транзакция использует мало свежих биткоинов, то даже с комиссией 0.05 она имеет шанс не попасть в блок, если пользователями было создано много более приоритетных транзакций, даже если они не заплатили за них комиссию (или заплатили меньше).
Сейчас никаких порогов нет, поэтому указывать комиссии больше минимальной бессмыслено.

С моей точки зрения система достаточно грамотная, она и от спама защищает и майнерам позволит в будущем жить за счет комиссий и у пользователей есть выбор. Только вот простой и понятной её не назовешь.
member
Activity: 112
Merit: 10
潔くカッコ良く生きて行こう!
Увеличение размера блока -- это не плохо; это неизбежно.  С ростом числа переводов/транзакций.  Ну и к тому времени, когда это станет необходимостью, полагаю, интернет станет быстрее и память дешевле.
Ok. Тогда вопрос исчерпан.
newbie
Activity: 25
Merit: 0
Hi!

Ещё раз и медленно. Я не спрашивал, чем хуже временное снижение сложности временного увеличения размера блока. Я спрашивал, чем такой подход (временное снижение сложности или временное увеличение размера блока) плох сам по себе. Если Вас так раздражает снижение сложности, считайте, что речь идёт только об увеличении размера блока.
Итак... чем же это плохо?
Увеличение размера блока -- это не плохо; это неизбежно.  С ростом числа переводов/транзакций.  Ну и к тому времени, когда это станет необходимостью, полагаю, интернет станет быстрее и память дешевле.

Илья
member
Activity: 112
Merit: 10
潔くカッコ良く生きて行こう!
Временное снижение сложности не влияет на надёжность сети.  Оно бесполезно, если не вредно.  Это то же самое, что увеличить размер блока (количество переводов в транзакции/блоке).  Только второе не требует изменения существующих программ/протокола (при условии, что в клиентах отсутствует контроль размера уже подписанного блока) и безопаснее с точки зрения разветвления цепочки блоков.
Вообще-то, я не против временного увеличения размера блока. Я даже писал, что возможно, это даже лучшее решение, чем временное снижение мощности. Внятного объяснения, чем это плохо я так и не услышал.
Необходимость изменения протокола и увеличение вероятности вилки.  Этого достаточно.
Чем больше вероятность вилки, тем больше блоков необходимо ждать для гарантированного подтверждения перевода/транзакции.
Ещё раз и медленно. Я не спрашивал, чем хуже временное снижение сложности временного увеличения размера блока. Я спрашивал, чем такой подход (временное снижение сложности или временное увеличение размера блока) плох сам по себе. Если Вас так раздражает снижение сложности, считайте, что речь идёт только об увеличении размера блока.
Итак... чем же это плохо? Вероятность вилки в данном случае уж точно никак не увеличивается.
sr. member
Activity: 462
Merit: 250
На данный момент, сфера генерации блоков намного более развита, чем нормальный оборот биткоинов. Я считаю, что вместо того, чтобы стимулировать майнеров, надо уделять больше внимания внедрению Bitcoin, как платёжного средства. Ещё, как минимум, целый год проблем с майнингом быть не должно. Если за это время система получит достаточное распространение, то будет спрос на генерацию, а спрос рождает предложение. Да и потом ещё года 4 будет премия в 25 BTC за блок, а это также немало.
newbie
Activity: 25
Merit: 0
На сегодня генерация монет намного превышает комиссионные, поэтому последние практически не играют роли в стимуляции майнеров. Однако, со временем, как-то надо будет увеличивать комиссию.
И лучше договориться об этом как можно раньше.

Quote
Где-то через годик с лишним планируется снижение генерации до 25 монет в блоке.
Если постановить, что вознаграждение за найденый блок всегда будет не менее 50 монет, а количество генерируемых монет вычислять как разницу между налогом и этими 50-ю монетами, то генерация монет со временем (с ростом оборота) сойдёт на нет.  Количество сгенерированных монет будет регулироваться рынком.

Вот более развёрнуто: http://forum.bitcoin.org/index.php?topic=13324.msg183098#msg183098
(упреждая обвинения в зацикленности на одной идеи, указываю, что да, я хочу, чтобы это прочло как можно больше людей).

Илья
sr. member
Activity: 462
Merit: 250
надо стимулировать рост мощности сети биткоин.  Это можно сделать увеличивая налог в пользу майнеров.
На сегодня генерация монет намного превышает комиссионные, поэтому последние практически не играют роли в стимуляции майнеров. Однако, со временем, как-то надо будет увеличивать комиссию. Где-то через годик с лишним планируется снижение генерации до 25 монет в блоке.
newbie
Activity: 25
Merit: 0
Hi!

Временное снижение сложности не влияет на надёжность сети.  Оно бесполезно, если не вредно.  Это то же самое, что увеличить размер блока (количество переводов в транзакции/блоке).  Только второе не требует изменения существующих программ/протокола (при условии, что в клиентах отсутствует контроль размера уже подписанного блока) и безопаснее с точки зрения разветвления цепочки блоков.
Вообще-то, я не против временного увеличения размера блока. Я даже писал, что возможно, это даже лучшее решение, чем временное снижение мощности. Внятного объяснения, чем это плохо я так и не услышал.
Необходимость изменения протокола и увеличение вероятности вилки.  Этого достаточно.

Чем больше вероятность вилки, тем больше блоков необходимо ждать для гарантированного подтверждения перевода/транзакции.

Илья
member
Activity: 112
Merit: 10
潔くカッコ良く生きて行こう!
Я лишь говорю, что временное снижение сложности никак не скажется на надёжности сети. Да, временно возрастёт трафик. Но не более.
Временное снижение сложности не влияет на надёжность сети.  Оно бесполезно, если не вредно.  Это то же самое, что увеличить размер блока (количество переводов в транзакции/блоке).  Только второе не требует изменения существующих программ/протокола (при условии, что в клиентах отсутствует контроль размера уже подписанного блока) и безопаснее с точки зрения разветвления цепочки блоков.
Вообще-то, я не против временного увеличения размера блока. Я даже писал, что возможно, это даже лучшее решение, чем временное снижение мощности. Внятного объяснения, чем это плохо я так и не услышал.
newbie
Activity: 25
Merit: 0
Hi!

Я лишь говорю, что временное снижение сложности никак не скажется на надёжности сети. Да, временно возрастёт трафик. Но не более.
Я подумал, что, возможно, ты полагаешь, будто я против временного снижения сложности при увеличении количества переводов. Таки да, я против этого.  Но не из-за уменьшения надёжности сети.

Временное снижение сложности не влияет на надёжность сети.  Оно бесполезно, если не вредно.  Это то же самое, что увеличить размер блока (количество переводов в транзакции/блоке).  Только второе не требует изменения существующих программ/протокола (при условии, что в клиентах отсутствует контроль размера уже подписанного блока) и безопаснее с точки зрения разветвления цепочки блоков.

Илья
newbie
Activity: 25
Merit: 0
Hi!

В любом случае суммарная сложность зависит только от вычислительной мощности сети и никак не от сложности генерации отдельного блока.
Итак, повторю вопрос ещё раз: "Каким образом сложность позволяет защититься от атак?"
От атак позволяет защититься имеющаяся в сети мощность (чем больше в сети мощность, тем сложнее собрать машину в 60-70%% от этой мощности).  Как связана мощность и сложность -- ты сам написал (надеюсь, и понимаешь).

Ещё раз. Я не спорю с тем, что чем больше вычислительная мощность сети, тем круче. Тем она устойчивее к атакам.
Я лишь говорю, что временное снижение сложности никак не скажется на надёжности сети. Да, временно возрастёт трафик. Но не более.
Мы говорим не о временном снижении сложности, а о получении контроля над более, чем 50-ю процентами мощности сети.  При низкой сложности (ага, это означает, что мощность сети маленькая) это сделать проще.

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

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

Илья
member
Activity: 112
Merit: 10
潔くカッコ良く生きて行こう!
В любом случае, так как сложность напрямую зависит от вычислительной мощности, мы можем использовать любое из понятий "сложность" или "мощность", когда говорим о надёжности сети или о майнинге, например.
Ещё раз. Я не спорю с тем, что чем больше вычислительная мощность сети, тем круче. Тем она устойчивее к атакам.
Я лишь говорю, что временное снижение сложности никак не скажется на надёжности сети. Да, временно возрастёт трафик. Но не более.
sr. member
Activity: 462
Merit: 250
В любом случае суммарная сложность зависит только от вычислительной мощности сети и никак не от сложности генерации отдельного блока.
В моём сообщении, "сложностью" я называю 2 чуть-чуть разных понятия.
  • Текущая сложность - это некая планка, которая определяет, каким должен быть результат хеширования, чтобы новый блок был признан системой.
  • Собственно сам результат хеширования. Чем он лучше, тем сложнее в среднем получить такой результат, хотя всё зависит от удачи. Конкретный результат всегда лучше минимально требуемого.
Система автоматически меняет сложность задачи в зависимости от вычислительной мощности сети, чтобы поддерживать примерно одинаковую частоту генерации блоков. Чем выше текущая сложность задачи, тем лучше будет средний результат хеширования, так как все новые блоки должны соответствовать установленной планке.

В любом случае, так как сложность напрямую зависит от вычислительной мощности, мы можем использовать любое из понятий "сложность" или "мощность", когда говорим о надёжности сети или о майнинге, например.
member
Activity: 112
Merit: 10
潔くカッコ良く生きて行こう!
sr. member
Activity: 462
Merit: 250
Каким образом сложность (по сути, случайный перебор кучи вариантов в поисках того, хеш которого удовлетворяет неким условиям) позволяет защититься от атак и повышает надёжность системы в целом?
Как происходит транзакция? Рассмотрим упрощённый вариант. Отправитель передаёт в сеть пакет информации, содержащий:
  • один из адресов (адрес = открытый ключ) отправителя;
  • адрес получателя;
  • количество монет;
  • какую-то другую информацию;
  • электронную подпись пакета, полученную с помощью соответствующего секретного ключа отправителя.
Узлы системы проверяют транзакцию с помощью истории и распространяют её по сети. После завершения транзакции, все монеты списываются с указанного адреса отправителя и получатель получает право распоряжаться ими. Подвох здесь заключается в том, что нечестный отправитель может отправить монеты с того же адреса ещё раз, уже на другой адрес. В итоге, система может признать только одну из этих транзакций. Решение о закреплении транзакций в истории принимают майнеры. Чтобы доказать своё право на запись блока в историю (и получение премии), майнеры решают какую-то бесполезную задачу. Другие узлы признают блоки на основе предполагаемой сложности решённой задачи. Если появятся несколько конкурирующих блоков (хвостов цепочки), то истинным будет признан тот хвост, суммарная "сложность" блоков в котором будет наибольшей. После добавления блока в историю, последующие блоки будут вычисляться исходя из него, и чем больше блоков будет добавлено, тем сложнее надо будет решить задачу, чтобы сгенерировать другой, альтернативный хвост. Таким образом, не имея достаточной вычислительной мощности, не получится вертеть историей по своему желанию. А вот если такие мощности есть в наличии, то можно попробовать смухлевать.
  • Создаём свою сеть майнеров.
  • Изолируем её от общей сети.
  • В общую сеть передаём транзакцию на много BTC какому-нибудь трейдеру, например.
  • В свою сеть передаём такую же транзакцию, но уже на какой-то свой адрес.
  • Ждём подтверждение транзакции трейдером и получаем от него то, что нам полагается.
  • Объединяем нашу сеть с общей сетью. Если в нашей сети суммарная "сложность" новых блоков превысит сложность новых блоков в общей сети, то наш хвост будет признан истинным, и все транзакции, прошедшие в общей сети, будут отменены. (Отменённые транзакции могут быть автоматически восстановлены, кроме нашей "фальшивой" транзакции.)
  • Трейдеры SOSNOOLEY.
  • ...
  • PROFIT!
Так как монеты при этом остаются у мошенника, он может проделать всё это несколько раз. И это - довольно простая схема. Я слышал, что есть варианты атак, требующих меньший процент вычислительной мощности всей сети.
member
Activity: 112
Merit: 10
潔くカッコ良く生きて行こう!
Приветствую, yurock!

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

Лучше сказать налоги, привычнее.  И эти налоги будут заметными.

Основное назначение этих налогов будет не повышение приоритета транзакции (что тоже хорошо), а обеспечение надёжности/защищённости сети.  Чем больше вознаграждение за найденый блок (который складывается в том числе и из налога), тем большая сложность генерации блока.

При текущей сложности генерации блока такой корпорации как Федеральная Резервная Система не составит большого труда создать/аккумулировать вычислительную мощь в 60-80%% от мощности сети Биткоин (стоит указать, что компьютеры в топ500 -- это компьютеры общего назначения; собрать специализированую систему проще: не все видеокарты, которые выпускает AMD, занимаются майнингом, есть проект майнера на FPGA).  При наличии угрозы со стороны Биткоин этой корпорации, вычислительна мощность будет собрана и сеть атакована.  Чтобы защититься от этого -- надо привлекать майнеров, т.е. поднимать налог.

Илья
Ещё раз. Только помедленнее, чтобы до меня тоже дошло.
Каким образом сложность (по сути, случайный перебор кучи вариантов в поисках того, хеш которого удовлетворяет неким условиям) позволяет защититься от атак и повышает надёжность системы в целом?

Вот есть дядя Сорос (Рокфеллер, Ротшильд, Морган - подставь по вкусу любую еврейскую фамилию) или кто-то ещё из ФРС-ного закулисья решил, что биткойн представляет для него жуткую угрозу и собрался атаковать его.
Затарился он дорогущим железом, которое считает гига(тера?)хеши.
Что дальше? Каковы его действия?
Только побольше конкретики. Без общих слов.
В чём будет заключаться его атака? Каким образом, имея даже 80% текущей вычислительной мощности сети, он угробит (скомпрометирует) систему?
Тут lzsaver пугал нон-стоп-форкингом, но насколько он страшен и реален?
member
Activity: 112
Merit: 10
潔くカッコ良く生きて行こう!
Хорошо. Но когда до тебя не дойдет перевод - не удивляйся.
Не нужно мыслить так однобоко. Всегда существует как минимум два альтернативных способа решения проблемы.
Да, сейчас хранение полной истории необходимо, чтобы клиент, который был в оффлайне, мог узнать о свершившихся транзакциях.
Но кто сказал что это - единственное решение?
legendary
Activity: 1120
Merit: 1069
После перехода к следующей стадии развития bitcoin (нормальная торговля) будут активно появляться посредники для микротранзакций, это даже не вопрос, будут, для начале на базе уже имеющихся бирж, потом, в сочетании с пулами майнинга (можно внести в код bitcoind на серверах майнинга, чтобы более приоритетно обрабатывали транзакции, идущие от и к такой бирже микротранзакций, (таким образом транзакции между адресами можно по времени сократить до 10-20 минут, а внутри биржи естественно без задержек).
newbie
Activity: 25
Merit: 0
Ещё не предлагали хранить историю распределённо?
Каждая транзакция и каждый блок сверяется с историей, и признаётся только информация, прошедшая проверку.
Клиент может кэшировать проверки.  Большая часть платежей клиента будет происходить в пределах некой группы (при достаточном развитии сети).  Поэтому кэширование будет иметь смысл.

Quote
Теоретически, клиент может хранить локально только часть информации, например, хеш каждого блока. При необходимости, он будет подгружать полные блоки из сети и сверять их хеши с хранящимися локально. Майнерам, пожалуй, удобнее будет хранить всю историю локально - вот они-то и могут стать "серверами" истории. А также те, кому надёжность важнее экономии места. Думаю, в случае успеха Bitcoin, найдётся достаточное количество желающих иметь "полные" узлы.
Это уже задачи распределённой файловой системы: балансировка нагрузки, обеспечение безотказности, равномерная нагрузка и т.п.  Главное, это снижение требований к дисковой памяти одного клиента.

Очень грубо: если сотня клиентов за сутки находится час в он-лайн, то они обеспечат примерно четырех-кратное дублирование.  Делим ещё на два для надёжности и получаем, что каждому из них достаточно хранить только половину информации.  И это всего один час он-лайн в сутки. (Это очень грубо. На самом деле объём в значительной степени будет зависить от требований к доступности.)

Кроме того, информация в это хранилище очень редко записывается (по сравнению с чтением), а значит поддаётся значительной оптимизации в этом направлении.

Илья
Pages:
Jump to: