Производительность Bitcoind для производственного использования

Допустим, у нас есть один экземпляр bitcoind, работающий на производственном сервере. И наше программное обеспечение/приложение обмена взаимодействует с ним, используя обратные вызовы RPC для:

  1. генерация адреса
  2. вывод
  3. уведомления

Теперь вопрос в том, какова емкость биткойна? Каково будет ограничение на количество транзакций в минуту? Что такое производительность биткойна? Какие-либо предложения?

Ответы (2)

генерация адреса

Убедитесь, что вы используете HD (кошелек, созданный с биткойн-ядром 0.13, будет HD).

Генерация адресов происходит довольно быстро, возможно, убедитесь, что вы используете большой пул ключей –keypool=5000в файле conf. Также вы можете предварительно сгенерировать адреса и сохранить их в кэш-базе данных. Но имейте в виду, если злоумышленнику удастся скомпрометировать эту кэш-базу данных, он, вероятно, сможет перенаправить средства.

Генерация адресов также может выполняться за пределами биткойн-ядра. Проверьте BIP32 (HD-кошельки) и, возможно, взгляните на вывод открытого ключа. Если вам нужна производительность, взгляните на libbtc (библиотека C с CLI может очень быстро получать адреса).

вывод

На данный момент вы, скорее всего, вступаете в область «горячих кошельков». Убедитесь, что вы создаете безопасную среду. Этот шаг включает в себя ECDSA (подписание входных данных), для которого требуются соответствующие закрытые ключи. Подписание не очень быстрое (зависит от вашего требования). Но вы можете точно измерить это с помощью настройки regtest (подписать 1000 транзакций и измерить производительность).

уведомления

Не используйте -walletnotify(это разветвляет процесс = очень медленно). Попробуйте использовать ZMQ(возможно, вам потребуется добавить дополнительный код для кошелька).

Лучшим способом было бы измерить и протестировать это в вашей среде, используя биткойн и тестовую сеть.

Имейте в виду, что если вы хотите повысить производительность, должна быть возможность запуска разных экземпляров bitcoind (просто измените номер порта для вызовов RPC), а затем разработайте схему (например, циклический перебор), в которой вы распределяете нагрузку между разными экземплярами. .