Post
Topic
Board Новички
Topic OP
Можно ли переполнить аппаратный кошелек?
by
A S M
on 09/11/2023, 10:14:10 UTC
Современные кошельки работают по технологии HD wallet и для всех биткоин подобных монет используют модель UTXO, которая позволяет создавать постоянно новые адреса для получения монет.
При подключении кошелька дается запрос на сервер, который проверяет остатки всех ваших использованных адресов и подсчитывает ваш баланс. Так же сервер обычно проверяет некоторое количество не использованных адресов находящихся впереди на наличие истории балансов, этот параметр настраивается на сервере и называется GAP Limit.
Как работает GAP Limit:
Блокчейн содержит записи публичных адресов и их балансов. Чтобы отобразить баланс вашего счета, сервер проверяет историю ваших транзакций в блокчейне. Поскольку учетные записи для биткойнов и монет на основе биткойнов используют несколько публичных адресов, серверу необходимо искать только те публичные адреса, которые используются.
Публичные адреса получаются из расширенного открытого ключа учетной записи (xpub) путем увеличения индекса адреса в пути получения. Обычно сервера следуют стандарту BIP44, который предписывает, чтобы кошельки просматривали 20 адресов вперед от последнего использованного адреса. Если вы получили транзакцию на первый адрес, сервер просканирует включительно до 21 адреса на наличие истории транзакций. Если ничего не найдено, поиск прекратится. Если на адрес 22 был получен платеж то сервер не увидит его, поскольку он остановился на адресе 21.
Теперь представим ситуацию что вы очень активный пользователь и получаете по несколько десятков платежей на новые адреса в день, но теоретически можете получать платежи и на старые адреса, вам это никто не запрещает. С годами серверу прийдется сканировать десятки тысяч адресов при каждом вашем обращении. Что произойдет в таком случае? Сервер будет выдавать ошибку или продолжать терпеть издевательства таких пользователей и рано или поздно «ляжет»? А ведь кто нибудь может создать пылевую атаку на получаемые адреса, в данном случае пыль будет достаточно отправлять на каждый 20й адрес, чтобы не превышать GAP Limit. Если использовать много таких кошельков, что произойдет с серверами? Ваше мнение по этому поводу.