Author

Topic: Количество полных нод в сети Bitcoin (Read 273 times)

sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Фильтровать те ноды, к которым ты уже подключался
А за это как я знаю можно быть помеченным как спаммер в сети, и ноды перестанут тебе отвечать.

Как ты себе представляешь глобальный список спамеров в недоверенном окружении? Насколько мне известно никаких чёрных меток алгоритмы биткоина выдавать не умеют. Каждая нода сама решает кого банить.
legendary
Activity: 2408
Merit: 1834
Crypto for the Crypto Throne!
И еще, то что нода в сети и что-то там слушает и даже раздает адреса - вовсе не значит что у ноды весь блокчейн, а не обрезанный пруном. Так что самый надежный способ имхо - это низкоуровневые запросы первых блоков.

Понял, благодарю за текст выше. Но мерита уже нет  Grin

А так то разобрался со способом bitnodes, у них намного более простой способ (который правда не отличит pruned ноду от полной, хех): getaddr

Quote
The getaddr message sends a request to a node asking for information about known active peers to help with finding potential nodes in the network. The response to receiving this message is to transmit one or more addr messages with one or more peers from a database of known active peers. The typical presumption is that a node is likely to be active if it has been sending a message within the last three hours.

Тоесть отправляя запрос getaddr ноде, получаешь от нее список ее подключений. А потом фильтруешь на дубликаты. Но здесь, как указано много где, ответ будешь получать только от нод того же протокола. Старые ноды ответ давать не будут.

И да, я посмотрел их гитхаб и нашел краулера - https://github.com/ayeowch/bitnodes . Завтра ради интереса попробую.

Но вообще, твой способ довольно интересный, именно чтобы узнать количество ПОЛНЫХ нод. Но он будет и дольше, так как тебе придется:
1. Рекконектиться к другим нодам после получения информации
2. Фильтровать те ноды, к которым ты уже подключался
А за это как я знаю можно быть помеченным как спаммер в сети, и ноды перестанут тебе отвечать.
copper member
Activity: 1540
Merit: 487
Stop the war!

Самый простой способ для домохозяек, указать в конфе максконешенс=овердохуя. Не факт, что будет работать, но попробовать можно.
https://github.com/bitcoin/bitcoin/blob/master/doc/reduce-traffic.md

Не получится. Не уверен насчет точного числа, чуть позже перепроверю, но есть лимит как inbound connections, так и outbound. И вроде бы он около тысячи нод. Тоесть за раз подключится больше к чем тысяче не получится.


Карочи, смари суда:

nUserMaxConnections = args.GetArg("-maxconnections", DEFAULT_MAX_PEER_CONNECTIONS);

И пару строчек ниже

// Trim requested connection counts, to fit into system limitations

Перевожу на русский: число коннекшенов ограничено количеством дескрипторов которое задано в параметрах операционной системы для одного процесса. На линуксах это максимальное количество дескрипторов которое можно менять как угодно - за подробностями на форум красноглазых.
В винде максимальное количество дескрипторов вроде ограничено только размером оперативной памяти и поменять юзеру это вроде никак нельзя. Подробности тоже - на форум виндуз админов.

В любом случае, если превысишь, то должно выплюнуть или ошибку:

return InitError(_("Not enough file descriptors available."));

или предупреждение

InitWarning(strprintf(_("Reducing -maxconnections from %d to %d, because of system limitations."), nUserMaxConnections, nMaxConnections));


Главный затык в другом: в старых корах (не уверен как сейчас) коннекшены были реализованы через потоки, а значит один коннекшен = один поток. Тыща рабочих потоков в приложении гарантировано и намертво повесит среднестатистический домашний комп вне зависимости от ограничений операционки.

И еще, то что нода в сети и что-то там слушает и даже раздает адреса - вовсе не значит что у ноды весь блокчейн, а не обрезанный пруном. Так что самый надежный способ имхо - это низкоуровневые запросы первых блоков.
legendary
Activity: 2408
Merit: 1834
Crypto for the Crypto Throne!

Самый простой способ для домохозяек, указать в конфе максконешенс=овердохуя. Не факт, что будет работать, но попробовать можно.
https://github.com/bitcoin/bitcoin/blob/master/doc/reduce-traffic.md

Не получится. Не уверен насчет точного числа, чуть позже перепроверю, но есть лимит как inbound connections, так и outbound. И вроде бы он около тысячи нод. Тоесть за раз подключится больше к чем тысяче не получится.

Самый хардкор способ - это написать собственную приблуду, которая будет коллекционировать доступные для синхронизации ноды с помощью низкоуровневых команд протокола
https://en.bitcoin.it/wiki/Protocol_documentation#addr
https://en.bitcoin.it/wiki/Protocol_documentation#getblocks

Ну очень похоже не метод с помощью getaddr который используют bitnodes.


что за seed nodes ?

DNS seed - это специальные DNS-сервера, которыми владеют специальные люди.

Свежеустановленной ноде Bitcoin неизвестны IP-адреса других нод. Чтобы их узнать, нода отправляет запрос на один из этих серверов, и тот выдаёт известный ему список нод. Список DNS seed прописан прямо в исходниках Bitcoin Core.


Благодарю!
 
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Свежеустановленной ноде Bitcoin неизвестны IP-адреса других нод.

Не совсем верно. В исходниках прописан список ip-адресов других нод на случай недоступности серверов DNS seed.

Both Bitcoin Core and BitcoinJ also include a hardcoded list of IP addresses and port numbers to several dozen nodes which were active around the time that particular version of the software was first released. Bitcoin Core will start attempting to connect to these nodes if none of the DNS seed servers have responded to a query within 60 seconds, providing an automatic fallback option.
copper member
Activity: 1540
Merit: 487
Stop the war!
Есть ли еще какие нибудь мысли? Библиотеки, методология, благодарен буду за все что угодно.


Самый простой способ для домохозяек, указать в конфе максконешенс=овердохуя. Не факт, что будет работать, но попробовать можно.
https://github.com/bitcoin/bitcoin/blob/master/doc/reduce-traffic.md

Самый хардкор способ - это написать собственную приблуду, которая будет коллекционировать доступные для синхронизации ноды с помощью низкоуровневых команд протокола
https://en.bitcoin.it/wiki/Protocol_documentation#addr
https://en.bitcoin.it/wiki/Protocol_documentation#getblocks
legendary
Activity: 2310
Merit: 2295
что за seed nodes ?

DNS seed - это специальные DNS-сервера, которыми владеют специальные люди.

Свежеустановленной ноде Bitcoin неизвестны IP-адреса других нод. Чтобы их узнать, нода отправляет запрос на один из этих серверов, и тот выдаёт известный ему список нод. Список DNS seed прописан прямо в исходниках Bitcoin Core.
legendary
Activity: 2408
Merit: 1834
Crypto for the Crypto Throne!
Интересует вопрос: есть ли какие то проверенные методики узнать количество стандартных нод? (я не говорю о "слушающих" нодах или же тех, у которых нет inbound подключений вообще. Здесь ясное дело не узнать наверняка)

Возможно кому то вопрос странным покажется, но я набрел на вот сервис: http://bitcoinkpis.com
И насчет количества нод там вот такая вот интересная цитата:
Quote
The node count metric is provided by Luke Dashjr. From CoinDesk: "Tallying the number of Bitcoin nodes typically relies on estimates instead of concrete data, and opinions on the best methodology for deriving these estimates differ. Dashjr’s estimate relies on a tedious and undisclosed proprietary methodology that could compromise the reliability of the data if it was released, according to its creator. "


Мутная фигня немного. Здесь даже не касаясь самой персоналии Люка, которая довольно своеобразная. Как можно брать статистику у человека который не может тебе объяснить как он ее достал? (мб этим и объясняется такой скачек на их сайте по количеству нод)

Есть еще отличный сервис https://bitnodes.io/, у них вот что написано:
Quote
The current methodology involves sending getaddr messages recursively to find all the reachable nodes in the network, starting from a set of seed nodes. Bitnodes uses Bitcoin protocol version 70001 (i.e. >= /Satoshi:0.8.x/), so nodes running an older protocol version will be skipped.

Есть ли еще какие нибудь мысли? Библиотеки, методология, благодарен буду за все что угодно.

И да, что за seed nodes ? Кто определяет что они собственно "seed" ?  Smiley



P.S: Для кодеров не совсем соответствующая тема, но проблема в том, что только сюда и заглядывают люди которые могут дать ответ на такой вопрос.
Jump to: