Глоссарий / Узлы и ПО
Сервер Electrum
Другие названия: Electrum server, Electrum Personal Server.
- Что такое сервер Electrum?
- Сервер Electrum индексирует блокчейн по скриптам и отвечает на запросы об адресах для легких кошельков, поэтому такие кошельки получают баланс сразу, не скачивая цепочку самостоятельно.
Кто-то должен выполнять поиск. Полный узел знает, какие монеты не израсходованы, но не хранит карту адресов и их истории, поэтому кошельки, которым нужна эта история за секунду, а не за час, обращаются к серверу, который такую карту построил. Обычная практика состоит в том, чтобы запускать свой сервер рядом со своим узлом, поскольку альтернатива передает постороннему полный список адресов, которыми вы владеете.
Как это работает
Сервер Electrum стоит между Bitcoin Core и кошельком, переводя данные между ними.
Он читает каждый блок из узла по мере поступления, извлекает каждый скрипт выхода и сохраняет соответствие между этим скриптом и транзакциями, которые его затрагивают. Затем кошельки подключаются по простому построчному протоколу JSON, открытым текстом через порт 50001 или через TLS через порт 50002, и либо задают вопрос, либо подписываются, чтобы получать уведомление об изменении ответа. Подписка и делает кошелек Electrum мгновенным: сервер отправляет уведомление в момент поступления платежа, а не кошелек опрашивает его снова и снова.
Адреса по этому соединению кошельки не передают. Они передают хеш скрипта, дайджест SHA-256 скрипта выхода с обратным порядком байтов, что является соглашением протокола, а не мерой приватности. Сервер по-прежнему точно знает, какие монеты вы отслеживаете, поскольку он возвращает историю для этого хеша и может за мгновение найти соответствующий адрес в собственном индексе. Принимать хеши скриптов за анонимность является самым распространенным заблуждением об этом программном обеспечении.
Что кошелек оставляет за собой, так это проверку. Он скачивает цепочку заголовков блоков и проверяет доказательство Меркла, которое сервер предоставляет для каждой транзакции, поэтому сервер не может выдумать платеж, которого не было, не создав также поддельную цепочку заголовков, подкрепленную реальным доказательством работы. Но он все еще может лгать умолчанием, скрывая от вас транзакцию или расход, и это меньший, но реальный риск.
Три реализации охватывают почти все развертывания: electrs на Rust, предпочитаемая за небольшой индекс; Fulcrum на C++, предпочитаемая за скорость запросов; и ElectrumX на Python, оригинальная. Electrum Personal Server действует иначе: он отслеживает только кошельки, которые вы перечисляете в файле конфигурации, вместо индексации всей цепочки, что почти не занимает места на диске, но ничего не отвечает об адресах других людей.
Где это встречается
Серверы Electrum являются невидимой половиной большинства настольных кошельков для биткоина.
Сам Electrum, впервые выпущенный Thomas Voegtlin в ноябре 2011 года, подключается к публичным серверам, которые поддерживают добровольцы, если вы не укажете иное. Sparrow, Specter и BlueWallet используют один и тот же протокол. Каждый популярный набор для узла, включая Umbrel, Start9, RaspiBlitz и myNode, включает electrs или Fulcrum именно для того, чтобы кошелек на вашем ноутбуке мог обращаться к вашей собственной машине, и никто другой не узнавал ваши адреса.
Причина, по которой это важно, не гипотетическая. С конца декабря 2018 года злоумышленники запускали вредоносные серверы в публичной сети Electrum и использовали уязвимость в версиях до 3.3.3, где сервер мог вернуть произвольный форматированный текст в качестве сообщения об ошибке. Пользователям, пытавшимся отправить платеж, показывали то, что выглядело как официальное предложение установить обновление, а загрузка была вредоносным программным обеспечением. Сообщенный ущерб исчислялся сотнями биткоинов. Клиент был изменен так, чтобы удалять форматирование из сообщений сервера, но урок остается: публичный сервер является недоверенной стороной, с которой ваш кошелек общается постоянно.
Сервер Electrum vs Neutrino
Сервер Electrum выполняет поиск за вас и узнает, что вы искали; Neutrino присылает вам исходный материал, поэтому почти ничего не узнает. Модель Electrum дешева, несколько килобайт на запрос и мгновенный ответ, поэтому она преобладает в настольных кошельках, которые работают вместе с аппаратным устройством. Модель Neutrino скачивает компактный фильтр для каждого блока и проверяет его локально, расходуя гораздо больше трафика, чтобы не раскрывать, какие скрипты совпали. Выбирайте модель сервера, когда сервер ваш, и модель фильтров, когда он не может быть вашим.