Возможное решение проблем размера блока и спама2015/07/28
По моему мнению, сейчас самый большой недостаток биткойна это неясная политика с комиссиями за транзакции. Именно из этой проблемы следуют другие серьёзные проблемы, включая проблему спама, проблему размера блока и проблемы использования биткойна для микротранзакций. Сатоши изначально не заложил прочную основу вычисления комиссий за транзакции, из-за чего у этого вопроса всегда было только временное решение.
Изначально предполагалось, что транзакции могут быть бесплатными. Это привело к спам-атаке на блокчейн, из-за чего он сильно вырос. Чтобы решить проблему с безграничным ростом, было введено ограничение в 1 мегабайт на размер блока, но саму проблему спама это не решило, и мы опять наблюдаем подобные попытки.
В текущей формуле биткойна приоритет транзакции пропорционален сумме входов транзакции и времени жизни монет и обратно пропорционален размеру транзакции в байтах. Зависимость приоритета транзакции от суммы входов очень странна, при том, что майнеру нет абсолютно никакой разницы, транзакции на какие суммы включать в блок, в то время как комиссия имеет большое значение. К тому же подобная формула создаёт опасную возможность перегонять большие суммы между своими адресами и значительно расходовать место в блоке, для нужд не связанных с платежами, вытесняя реальные транзакции на меньшие суммы.
Цена байтаИсходя из вышесказанного, логичнее, чтобы приоритет был пропорционален комиссии. То есть, чтобы определять какие транзакции включать в блок, майнер должен для каждой транзакции вычислить простое отношение комиссии (количество сатоши) к размеру транзакции (количество байт). Каждая транзакция будет характеризоваться количеством сатоши, которые отправитель транзакции готов заплатить за каждый байт, записываемый в блокчейн.
Для примера, простая транзакция в MutliBit имеет размер 226 байт, комиссия по умолчанию 0,00010000 биткойна, то есть 10 000 сатоши, следовательно, стоимость байта в этой транзакции будет равна около 44 сатоши. Исходя из этого параметра, можно определять очерёдность включения транзакций в блок. Транзакции с большей ценой за байт будут иметь более высокий приоритет. Используя данный алгоритм, майнер всегда будет максимизировать комиссионное вознаграждение. Каждый байт будет справедливо оплачиваться. В итоге, чем больше байт в транзакции, тем большей должна быть комиссия, чтобы транзакция попала в блок. Это создаст мотивацию экономично расходовать место в блоках.
Если же исходить из логики, что транзакции на большие суммы должны иметь больший приоритет, то при такой формуле нет никаких проблем, так как транзакции на большие суммы могут легко устанавливать более высокую цену за байт.
Если посчитать цену байта для транзакций в текущих блоках, то можно обнаружить, что цена байта варьируется от 2 до 70 сатоши. Такой расклад уже говорит о том, что цена на такой дефицитный в настоящий момент ресурс как место в блоке, берётся, мягко говоря, с потолка.
Аукцион реального времениПри предлагаемом прозрачном алгоритме включения транзакций в блок, достаточная комиссия будет определяться рыночным методом в зависимости от количества транзакций и наличия свободного места в блоке. Данный подход не требует изменения протокола биткойна. Изменения потребуются только в алгоритме выбора транзакций майнерами и в алгоритм расчёта оптимальной комиссии в кошельках. Перед отправкой транзакции, кошелёк должен знать какую цену за байт использовать, чтобы транзакция были включена в первый добытый блок.
Естественно, при подобном подходе цена байта в блокчейне, выраженная в сатоши, напрямую зависит от цены биткойна в долларах. Поэтому оптимальную текущую цену, которая зависит от количества транзакций и рыночной цены биткойна должны рассчитывать сервисы, подобные blockchain.info, для этого надо провести анализ очереди транзакций и последних добытых блоков и посмотреть, какая цена будет минимально-достаточной, чтобы транзакция с максимальной вероятностью была включена в первый добытый блок. Так как количество транзакций зависит от времени суток и дня недели, то цена байта в блокчейне тоже будет зависеть от этих параметров. Можно вычислить оптимальную цену для каждого часа в сутках каждого дня недели. Кошельки могут просто пользоваться информацией сервисов подобных blockchain.info, точно также как сейчас они используют сервисы для получения текущего курса биткойна. Перед отправкой транзакции, пользователю будет сообщаться расчётная комиссия и процентное соотношение от суммы перевода.
При реализации данный подход создаст аукцион реального времени за каждый байт добытого блока, это сделает спамерские атаки просто бессмысленными. Ведь если образуется большая очередь транзакций, то новая транзакции будет отправлена с такой ценой за байт, чтобы в очереди транзакций встать на место тех, которые будут включены в первый добытый блок. В результате все спамерские транзакции, отправленные до повышения цены байта, останутся позади и не создадут задержку в обработке новых транзакций. Спамерам придётся постоянно повышать цену и потратить очень большое количество средств, чтобы на аукционе реального времени перебить ставки всех пользователей мира и выкупить всё ближайшее место в блоках. Это делает подобные атаки очень дорогостоящими, к тому же они не смогут увеличить время обработки обычной транзакции. Смогут увеличить только её цену, и то при больших финансовых затратах и только на время проведения атаки, в то время как большинство обычных пользователей ничего не заметит. Транзакции, ждущие в очереди более суток можно просто удалять.
Чтобы не позволять спамерам занимать пустое место в блоках по нулевой цене байта, майнеры должны будут установить минимальную цену за байт на включение в блок (в любой валюте). Даже очень небольшая цена байта для обычных пользователей сделает пустое пространство в блоках очень дорогим для спамеров.
Проблема размера блокаДанных подход решает не только проблему спама, но и проблему увеличения размера блока. Ведь с увеличением количества транзакций будет возрастать проходная цена байта в блокчейне, и если цена станет слишком высокой для микротранзакций, то увеличение размера блока всего в два раза значительно снизит цену байта в блокчейне до удвоения мирового объёма биткойн транзакций.
Подобная схема также положительно сказывается над мотивацией пользователей экономить место в блокчейне. Неоправданные расходы места в блоке, такие как запись изображений или другой информации не связанной с платежом будет обходиться автору по справедливой рыночной цене.
Еще немаловажным фактором является возможный резкий взлёт цены биткойна. Так как в качестве расчётной единицы между пользователями используется в основном фиатные валюты (доллар, евро или юань), то фиксированная комиссия в биткойнах создаёт большие проблемы при большой волатильности курса. Рыночный механизм хорошо справится с подобной проблемой.
Подобный подход также решает проблему необоснованно высокой цены за транзакцию в кошельках подобных MultiBit (около 3 долларовых центов). Кошельки с фиксированной комиссией неоправданно дерут деньги с ничего не подозревающих пользователей и дискредитируют возможности биткойна в микротранзакциях, в то время как большинство транзакций могут свободно проходить со значительно меньшей комиссией. После недавних атак многие кошельки стали устанавливать комиссию 0.0003 биткойна, что равно около 10 долларовым центом, то есть для перевода в $1 нужно заплатить комиссию 10%! О каких дешёвых микротранзакциях может идти речь с такими комиссиями?
Рано или поздно размер блока придёться увеличить. Оптимальный размер блока подскажет сам рынок. Если переводы станут настолько дорогими, что будет заметна тенденция снижения транзакций низкого ценового диапазона, значит, пора договориться об увеличении размера блока. Считаю оптимальным размер блока подбирать исходя из пропускной способности Интернета и стоимости обычных жёстких дисков для персонального компьютера. По возможности обычный пользователь должен иметь возможность содержать полный узел.