Из чего на самом деле состоит блок Биткойна?
Последнее время, достаточно часто, во время общения на биткойн ресурсах, сталкиваюсь с мнением блок-диссидентов. Это люди, по разным причинам уверенные, что проблемы размера блока не существует.
Аргументов, которые приводят блок-диссиденты множество. Один из них заключается в том, что на самом деле, большинство транзакций в сети биткоин, это спам транзакции. Что, если бы не мусор в сети, созданный кранами, спамерами и прочими нехорошими пользователями, проблемы блока бы не существовало.
Вот один из примеров такого утверждения с сайта bitnovosti.com:
В данный момент эта тема особенно актуальна: количество транзакций в сети неуклонно растёт, мемпул рекордно забит, подтверждение транзакций занимает всё больше времени, блоки заполнены практически полностью, а сообщество разделено радикальными идеями хардфорков.
На волне актуальности этой темы я решил самостоятельно разобраться из каких транзакций на самом деле состоит блок биткоина и провести свой небольшой эксперимент.
Границы транзакций
Для начала необходимо условиться, что же считать микротранзакциями. В ходе своего эксперимента, я решил обозначить границы транзакций следующим образом:
- Спам транзакции - транзакции менее $1, что на момент написания статьи было около 0.001 btc;
- Малые транзакции - транзакции от $1 до $10, на момент написания статьи до 0.01 btc;
- Средние транзакции - транзакции от до $100, до 0.1 btc соответственно;
- Большие транзакции - все остальные транзакции, более $100;
Следующий вопрос, который возник у меня: что считать суммой транзакции? Количество выходов у транзакции, как правило больше 1. Что-то из этого транзакция, а что-то сдача.
Я решил брать за сумму транзакции её самый маленький выход, игнорируя другие выходы. То есть, если пользователь переводит $99 и в качестве сдачи получает $1, то такая транзакция считается малой. Такой подход не совсем верный, ведь он даёт преимущество спам транзакциям, но для моего эксперимента такой подход приемлем.
Собираем данные
У Биткойна есть отличная особенность: его данные открыты. Все транзакции, все адреса доступны каждому. Любой может получить к ним доступ.
Для получения этих данных я обратился к API сервиса btc.com. Документация достаточно проста, что позволяет достаточно быстро начать работать с ними.
Для своего эксперимента я решил взять информацию о последних 999 блоках. На момент написания статьи последний блок был 454037. Соответственно в эксперименте участвовали блоки с 453038 по 454037.
В качестве языка программирования я выбрал JavaScript. Для того, чтобы сохранить данные я использовал базу данных neDB.
За 15 минут я набросал небольшой скрипт и отправил его собирать данные.
В итоге я получил базу данных с информацией о последних 999 блоках, общее количество транзакций, а также количество транзакций по категориям.
Анализируем данные
Когда все данные были получены и отсортированы я начал анализировать полученную информацию.
Процент спам транзакций (транзакций которые имеют хотя бы один выход менее $1) оказался почти 19%. Число не малое, но всё таки не 80% о которых утверждают многие пользователи.
Более того, оказалось, что примерно такая же часть транзакций относится к категории больших, минимальный выход которых превышает $100.
Малые транзакции, от 1 до 10 долларов, занимают примерно треть блоков, отнести их к спам транзакциям я не решился, всё же сумма сопоставимая с ценой чашки кофе, поездки убер или даже полноценного обеда. В общем транзакции повседневных расходов.
Большинство же транзакций в сети, около 36%, это средние транзакции, с минимальным выходом от 10 до 100$.
Вот таким получился график распределения транзакций в блоках:
Выходит, что подавляющее число транзакций в сети Биткоин, в последних 999 блоках имеют минимальный выход от 1 до 100 долларов, их общий процент приближается к 65.
Если присмотреться, то в рамках заданных границ распределение транзакций стремится к нормальному распределению Гаусса:
На мой взгляд это нормальное состояние сети, именно к такому состоянию сеть будет стремиться всегда.
И что же в итоге?
В итоге моего небольшого эксперимента получается, что число транзакций, имеющих хотя бы один выход менее $1 достаточно велико, практически пятая часть, но их количество не определяющее, и сеть в целом стремится к нормальному распределению. Подавляющее большинство транзакций имеют минимальный выход более $1 и сказать, что сеть забита мусорными транзакциями совсем нельзя.
Более того, если взглянуть на медиану месячного блока, то мы увидим, что даже если бы мы убрали 20% транзакций из сети, это ничего бы не изменило и блок всё равно оставался заполненным:
Но здесь речь уже об объемах транзакций. Не исключено, что транзакции с малым выходом занимают больше места в блоке, но это уже тема для другого эксперимента.