Как получить более 1000 подключений, таких как blockchain.info?

На данный момент blockchain.info имеет более 1900 узлов, подключенных к их биткойн-клиенту.

Я использую сервер m1.small ubuntu 12.04 и биткойн уже около 4 дней без перезагрузки. Мой биткойн-клиент по-прежнему показывает максимум ~60 подключений при выполнении команды «./bitcoind getinfo».

Как мне добиться более 1000 подключений к моему биткойн-клиенту? И стоит ли оно того, на ваш взгляд?

РЕДАКТИРОВАТЬ: я перезапустил свой биткойн-клиент с параметрами -maxconnections=1000 и -timeout=15000, но после примерно 12 часов работы биткойн количество подключений составляет всего ~40. И я, кажется, еще не максимально использую свой процессор, оперативную память или пропускную способность.

РЕДАКТИРОВАТЬ 2: я не видел «время подключения» более 8 часов в списке, предоставленном blockchain.info , так что это говорит мне, что они должны перезапускать свой сервер каждые 8 ​​часов или около того. Либо так, либо соединения обрываются и обновляются через 8 часов? Я начинаю думать, что blockchain.info отслеживает IP-адреса, на которых работает биткойн, в своего рода базе данных ... и заранее подключается к ним каждый раз, когда их биткойн перезагружается. Я прав?

Блокчейн запускает несколько узлов bitcoind, а сетевые компоненты также были изменены для использования сокетов boost::asio, а не posix. вы должны быть в состоянии получить по крайней мере 1024 соединения со стандартным биткойном.
Любая идея о том, что может удерживать меня от достижения 1024 подключений к моему биткойну? Кажется, я пока не максимально загружаю свой процессор, оперативную память или пропускную способность.
В Bitcoin Unlimited есть опция -maxoutconnections, позволяющая увеличить количество исходящих соединений с пирами. По умолчанию он равен, 8но вы можете установить его выше, не перекомпилируя узел из модифицированного исходного кода.
Когда я устанавливаю -maxconnectionsчто-то высокое, я получаю следующую ошибку: > Предупреждение: уменьшение -maxconnections с 4096 до 865 из-за ограничений системы. так вроде и с входящим соединением нельзя даже сверхвысоким ходить?
@greatwolf биткойн неограниченно работает для биткойнов или биткойн наличными?
@AMB Я полагаю, что BU предлагает две версии клиента: одна работает с устаревшей цепочкой, а другая работает с Bitcoin Cash.
Ссылки на список узлов битые, может кто починит? Кроме того, похоже, что blockchain.info теперь является blockchain.com?

Ответы (6)

Клиент bitcoind имеет опцию конфигурации maxconnections. Клиент, запущенный с параметром -maxconnections=N, позволит одновременно устанавливать до N входящих соединений.

Возможно, вам может потребоваться увеличить время ожидания соединения для такого количества попыток соединения с одного (возможно, недостаточно мощного) узла. Возможно, установите его на 15 секунд (15000 мс).

-timeout= Указать время ожидания соединения в миллисекундах (по умолчанию: 5000)

[Редактировать: ответ Питера Вуилле продвинет вас дальше. -addnode позволит вам форсировать новые исходящие соединения с узлами, когда у вас есть их IP-адреса.]

Я перезапущу свой биткойн-клиент сейчас, увеличив время ожидания до 15 секунд, как было предложено, а также -maxconnections=1000 и вернусь к вам.
Итак, после 7 часов работы bitcoind с 15-секундным тайм-аутом и 1000 максимальными подключениями. В какой-то момент у меня было 32 подключения, но сейчас их количество упало до 28, поэтому я сомневаюсь, что добавление maxconnections или переменной тайм-аута, к сожалению, мало что дало. На самом деле я думаю, что это, возможно, помешало количеству подключений, которые я обычно имел бы после 7 часов.
maxonnections в .conf переопределяет то, что в коде как max?

Биткойн по умолчанию не будет выполнять более 8 исходящих подключений и -maxconnectionsтолько контролирует количество входящих подключений, которые вы разрешаете. Не стесняйтесь устанавливать это выше, но это займет некоторое время, прежде чем другие подключатся к вам в большом количестве.

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

Если вы продавец или майнер, вы, возможно, захотите настроить несколько фиксированных подключений к доверенным другим (см. параметр -addnodeкомандной строки/конфигурации), но наличие большего количества подключений не означает более строгую проверку (эталонный клиент всегда проверяет все) или даже более быструю ретрансляцию (поскольку вы замедлите распространение новых блоков и транзакций среди всех своих одноранговых узлов). В основном это вопрос предоставления услуг в сети.

После 4 дней работы моего ящика с параметром -maxconnections=1000 у меня все еще было только около 50 подключений. Я не видел «времени подключения» более 8 часов в списке, предоставленном blockchain.info , так что это говорит мне, что они должны перезапускать свой сервер каждые 8 ​​часов или около того. Либо так, либо соединения обрываются и обновляются через 8 часов?
Я уверен, что у них есть специальная инфраструктура, которая создает тысячи исходящих соединений. Биткойн никогда не создает больше 8. Как я уже сказал, большего и не нужно.
Это также можно было бы считать с совокупных узлов по всей стране, а не только с одного клиента.

Данные ответы не отвечают на вопрос. Хотя достижение тысячи подключений может и не иметь смысла, вот как это сделать в Debian. Вы хотите внести небольшие изменения в код и перекомпилировать биткойн:

Получить необходимые пакеты для компиляции:

$ aptitude install git make build-essential libssl-dev libboost-all-dev libdb-dev libdb++-dev libminiupnpc-dev

Клонируйте репозиторий git (убедитесь, что версия является самой последней веткой ):

$ cd /usr/src
$ sudo git clone -b 0.8.4 https://github.com/bitcoin/bitcoin
$ cd bitcoin/src

Отредактируйте файл net.cpp:

@@ -27,7 +27,7 @@
 using namespace std;
 using namespace boost;

-static const int MAX_OUTBOUND_CONNECTIONS = 8;
+static const int MAX_OUTBOUND_CONNECTIONS = 1000;

 bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound = NULL, const char *strDest = NULL, bool fOneShot = false);

@@ -1533,7 +1533,7 @@
             OpenNetworkConnection(CAddress(vserv[i % vserv.size()]), &grant);
             MilliSleep(500);
         }
-        MilliSleep(120000); // Retry every 2 minutes
+        MilliSleep(5000); // Retry every 5 seconds
     }
 }

1.) Изменяя MAX_OUTBOUND_CONNECTIONS, клиент будет продолжать подключаться, пока не достигнет 1000 активных подключений.

2.) Изменяя тайм-аут сна, новые соединения пробуются чаще.

Скомпилируйте и установите биткойн:

$ sudo make -f makefile.unix
$ sudo mv bitcoind /usr/bin

Не забудьте установить maxconnections в bitcoin.conf:

maxconnections=1000

Запустите биткойн и все готово. Клиент будет делать много подключений очень быстро.

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

Я не хочу понижать голос, потому что вы действительно отвечаете на вопрос, но я очень сильно хочу подчеркнуть, что это ужасная идея и ненужная. Смотрите мой ответ, почему.
@Pieter Wuille: Как вы хотите помешать людям использовать сеть Биткойн? Просто сказать им: «Эй, плохие парни, не делайте того или этого»? Это не сработает...
Я не пытаюсь останавливать плохих парней - это правда жизни, и я уверен, что с некоторыми мы справимся. Чего я хочу избежать, так это того, что люди ошибочно полагают, что чем больше подключений, тем лучше для них и/или для сети.
Это настоящий ответ!

Поскольку никто, кажется, не упомянул об этом, я добавлю для дальнейшего использования. Если ваш биткойн-узел находится за маршрутизатором/NAT, вы можете подключаться только к другим, они не могут подключиться к вам. Предположим, что большинство людей находятся в такой ситуации, что делает большинство узлов неподключаемыми (по крайней мере, напрямую). Если вы откроете порт своего узла на маршрутизаторе, то каждый биткойн-узел сможет подключиться к вам, если захочет, а не ваш узел сможет подключаться только к тем, кто открыл свой порт. То же самое относится к Bittorrent и другим p2p-системам.

Зачем вам 1000+ подключений?

По умолчанию bitcoind не может иметь более 125 подключений. Вам нужно запустить bitcoind с параметром -maxconnections=<n>или установить maxconnections=<n>в bitcoin.conf, чтобы иметь возможность подключаться к большему количеству пиров.

Почему?! Почему бы и нет? Если хотите знать, я хочу иметь самый проверенный блокчейн в мире.
"Самый проверенный"? Это бессмысленно. Все узлы с одинаковой высотой блока и хешем блока равны. И у вас может быть форк блокчейна, который в конечном итоге станет сиротой.
Извините за опечатку, я пока не в курсе всего лексикона биткойнов. Если не самый проверенный, то я хочу быть самым быстрым в распознавании новых транзакций. Вот что я имел в виду.

Чтобы проверить, разрешаете ли вы входящие, используйте это: https://bitnodes.21.co . Существует кнопка для проверки вашего IP-адреса, и если она отображается зеленым цветом, у вас все в порядке с входящим соединением. Как только вы это сделаете, мне сказали, что у вас может быть больше исходящего соединения. Удачи.

Это не ответ на вопрос.