Например, если HD-кошелек генерирует 1000 учетных записей.
Как они будут отслеживать все остатки на счетах, если кто-то, например, заплатил на 455-й счет, они захотят обновить баланс кошелька.
Я предполагаю, что хранение всех учетных записей будет неэффективным, и запросы к блокчейну или API для всех 1000 также не будут эффективными.
Использование изолированного варианта использования:
Если кошелек API HD генерирует 1000 адресов, он не может запрашивать все 1000 каждый раз, когда пользователь запускает телефон, и он не может делать это периодически, потому что, когда все обращаются к одной и той же конечной точке, это будет узким местом.
Я помню, что blockchain.info позволял вам запрашивать ваш расширенный открытый ключ, я полагаю, что они перебирают учетные записи таким же образом, используя ограничение пробела.
Как правило, HD-кошельки используют следующую логику для определения того, сколько адресов запрашивать и когда остановиться:
gap limit
количество адресов (обычно 20)gap limit
больше из индекса последнего адреса с транзакциями на нем. Кроме того, также выполните этот процесс для учетной записи 1 (вы проверяете учетные записи n+1, только если учетная запись n имеет транзакцииОбщая идея состоит в том, что никакие учетные записи не будут существовать, если предыдущая учетная запись не используется, и что никакие адреса в учетной записи не будут использоваться после одного последовательного блока gap limit
количества неиспользуемых адресов.
Такие компании, как BitGo, которые предлагают услуги HD-кошелька для бирж и т. д., где вы можете легко иметь тысячи неиспользуемых адресов подряд, а затем адреса с транзакциями, обычно игнорируют лимит пропусков. Вместо этого они ведут список всех сгенерированных адресов и индексируют их как отдельные адреса, а не как HD-кошелек.
Что касается API, кошельки обычно стараются поддерживать работающий индекс. Они будут поддерживать кеш известных транзакций и продолжать добавлять к нему. Таким образом, когда вы запускаете его, он сканирует транзакции только в новых блоках с момента последнего сканирования. Это позволяет даже легким клиентам, таким как кошельки Electrum или Ledger/Trezor, обслуживать тысячи пользователей всего с несколькими узлами, поскольку каждый кошелек не будет запрашивать предыдущие транзакции, о которых он уже знает.
Естественно, если вы импортируете часто используемый HD-кошелек в новый кошелек или удаляете кеш, первоначальная синхронизация может занять очень много времени. Однако последующие синхронизации кошелька будут происходить намного быстрее.
В дополнение к этому, HD-кошельки часто полагаются на полный узел (например, Bitcoin Core) или систему, такую как ElectrumX или Insight. Все они способны поддерживать полный индекс. Bitcoin Core поддерживает только текущий индекс по известным адресам (поэтому вам нужно повторно сканировать, когда вы импортируете адрес). ElectrumX и Insight поддерживают расширенный индекс, который отслеживает все транзакции и может быстро возвращать данные для любого заданного адреса.
HD-кошельки продолжают проверять транзакции по всем используемым адресам. Они просто не сканируют всю цепочку каждый раз. Но для каждого нового блока каждая транзакция в этом блоке будет проверяться для каждого адреса в кошельке HD. Эту проверку можно быстро выполнить с помощью фильтров Блума или предварительно проиндексированных данных, таких как Electrum или Insight, не достигая узкого места.
темный рыцарь
Кайл Грэм