Стойте, а почему не попытаться просто импортировать все кошельки в wallet.dat? По идее, после этого клиент должен показывать весь баланс всего пула кошельков (но возможно я ошибаюсь).
Для тысяч адресов - вполне рабочее решение. Для миллиона - нет, тут нужен другой подход: предварительно создать список всех адресов с ненулевыми балансами и проверять вхождение в этот список каждого из миллиона адресов.
А когда кошель с транзакциями, то тогда приложение начинает проверять все транзакции, бегая по блокам ищя входы и выходы.
Дык, Bitcoin Core не знает заранее были ли транзакции по конкретному импортируемому адресу. Поэтому по-умолчанию при импорте приватного ключа командой
importprivkey происходит сканирование всего блокчейна, и только после этого становится понятно: были транзакции или нет. Другое дело, что если написать
false в третьем параметре
importprivkey, то сканирования не будет, и если до этого момента были транзакции, то не будет видно ни их самих ни их влияния на баланс.