Прочитал всю тему. Очень интересная дискуссия.
Проблема масштабируемости биткоинта действительно встанет очень остро, если система получит большое распространение.
Но зачем изобретать велосипед? Действительно временное снижение сложности, предложенное в этом топике, полностью эквивалентно увеличению (или снятию) ограничения на максимальный размер блока (в коде это изменение одного define). Но зачем тогда разработчики вообще поставили это ограничение?
Причин я вижу две:
1. Ограничение роста истории (об этом уже упоминал yurock);
2. Ограничение трафика между узлами сети. Если блоки будут слишком большими, то они будут долго перекачиваться между узлами сети, не все же пользователи подключены к гигабитному каналу
А если каналы будут заняты перекачкой блоков, то распространение транзакций замедлится (и блоки и транзакции распространяются по сети по одним принципам и по одним каналам).
Но разработчики уже намечают пути решения этой проблемы. Вот здесь предлагаются варианты решения проблем узких мест системы
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 она имеет шанс не попасть в блок, если пользователями было создано много более приоритетных транзакций, даже если они не заплатили за них комиссию (или заплатили меньше).
Сейчас никаких порогов нет, поэтому указывать комиссии больше минимальной бессмыслено.
С моей точки зрения система достаточно грамотная, она и от спама защищает и майнерам позволит в будущем жить за счет комиссий и у пользователей есть выбор. Только вот простой и понятной её не назовешь.