Мы видим много статистических данных о том, что X% узлов Биткоина запускают клиент Y и это значит, что такой же их процент поддерживает Y. Обратите внимание на то, что об этом сообщают не майнеры в блоках, а скорее то, что программные узлы (ноды) сети Биткоина сообщают о том, что на них запущено. Действительно ли эти данные стоят внимания?
Как работает сеть Биткоина
Чтобы понять, каким образом обычно собирается эта статистика, вам нужно немного больше понять устройство сети Биткоина. Каждый узел сети связывается с другими узлами для создания действующей сети. Такую сеть мы можем назвать сетью сплетников. Это способ, которым информация распространяется децентрализованно. Информация в таком случае это новые транзакции в мемпуле, новые найденные блоки и расположение других узлов в сети.
Каждый узел, который соединяется с другим узлом, пересылает информацию о своей версии, как это определено BIP0014. Параметр user_agent информации версии определяет, какая именно версия программного обеспечения запущена. Если вы запускаете клиентскую программу, вы видите программное обеспечение узлов (нод), запустив bitcoin-cli getpeerinfo и получив данные от узлов. По умолчанию эти данные будут выглядеть как /Satoshi:0.13.2/. Вкладом Сатоши стало упрвляемое программное обеспечение, 0.13.2 и / и : используются разделители, как указано в BIP0014. Для Bitcoin Unlimited строкой, идентифицирующей программное обеспечение, будет BitcoinUnlimited, для btcd этой строкой будет btcwire и так далее.
Как рассчитывается количество узлов
Чтобы подсчитать, сколько узлов запускают данную версию программного обеспечения, мы получаем от них данные и смотрим на полученную информацию о версиях. При этом учитывается IP адрес каждого узла.
Затем подсчёт узлов опрашивает каждый узел и то, как они соединены между собой. Заодно выясняется, какое программное обеспечение запущено на каждом из узлов. Снова поступает информация о каждом из IP адресов узлов и версии программного обеспечения, если она ещё не была получена.
Такой опрос продолжается до тех пор, пока узлы не закончатся и вуаля, мы получаем количество узлов, на которых запущено данное программное обеспечение.
Спуфинг
Проблема состоит в том, что узлы сами сообщают о своём состоянии. А значит, узел может передать другой номер версии программного обеспечения, чем это есть на самом деле.