• XSS.stack #1 – первый литературный журнал от юзеров форума

bitcoin core получить баланс адреса

keklick1337

RAID-массив
Пользователь
Регистрация
06.05.2019
Сообщения
80
Реакции
183
У меня локально установлен bitcoin-core собранный из исходников.
Скачан весь блокчеин.

Задача такова: мне необходимо узнавать локально баланс определённого кошелька без его импорта в валлет. Это может быть любой адрес. Как это возможно сделать?
Либо есть другие bitcoin локальные сервера, которые хранят весь блокчеин, и умеют это делать?
 
Если тебе нужно просто узнать баланс по адресу - чем тебя blockchain.com или blockchair не устроил? Нахрена танцы с бубном?
Допустим мне нужно узнать баланс 2 млн адресов.
Делать 2 млн GET запросов на чей-то API это:
1) Медленно
2) Словлю бан из за кол-ва запросов
 
Полазь на github - там что-то подобное на питоне было, для массовой проверки биткоин адресов. И, без импорта, это на твоем кошеле локально RPC просто запускается и туда запросы направлять и соответственно разбирать ответ.
 
Полазь на github - там что-то подобное на питоне было, для массовой проверки биткоин адресов. И, без импорта, это на твоем кошеле локально RPC просто запускается и туда запросы направлять и соответственно разбирать ответ.
Так дело в том, что стандартный RPC не умеет калькулировать баланс любых адресов, которые не импортированы ко мне в воллет и не про сканированы. По этому и ищу решение. На гитхабе уже смотрел, на bitcoin talk, и в конечном итоге пришёл сюда. На stackoverflow все говорят невозможно, но я думаю решение есть.

Точнее не так даже. Надо проверить, была ли хоть одна транзакция в сети с использованием этого адреса, или нет. То есть жив ли он?
 
Надо проверить, была ли хоть одна транзакция в сети с использованием этого адреса, или нет. То есть жив ли он?
1) парсишь блокчейн ( https://github.com/alecalve/python-bitcoin-blockchain-parser ), ищешь outputs
2) собираешь output адреса
3) прогоняешь все свои адреса, есть ли они среди output адресов.

На пункте 2) может кончиться память, в таком случае можно попробовать фильтр Блума, но после него надо проверять на ложноположительные.
 
На пункте 2) может кончиться память, в таком случае можно попробовать фильтр Блума, но после него надо проверять на ложноположительные.

Решал похожу задачку (поиск строки в почти миллиарде строк), если не нужен реалтайм, то

1) парсишь блокчейн,ищешь outputs
2) Сортируешь output адреса, я 400 гигов в архиве отсортировал путем утилиты sort. Разбить на мелкие части, отсортировать каждую часть. Все части слить вместе через sort (у него есть отдельный ключ для merge).
3) Сортируешь свои два миллиона адресов

А дальше просто читаешь по одной строчке из каждого файла, есть они равны - то значит совпадение, если какая-то строка меньше - то значит читаем еще одну строки из этого файла.

---

Если нужен реалтайм и быстро - то заливаем все в scylla, если нужен реалтайм и хватает медленного - то заливаем в кликхаус. В кликхаусе компессия просто отличная, на диске будет мало места занимать.
 
Запускаешь на сервере рядом electrumx, в его конфиге прописываешь данные RPC твоего bitcoincore. После того как electrumx просканирует весь блокчейн, ты сможешь пользоваться api electrumx, в том числе узнавать баланс любого адреса. Но там есть не большой нюанс, напрямую в апи указать адрес не получится, сначала из адреса надо будет получить scripthash не сложными манипуляциями, которые кстати описаны в доках api electrumx
 
Допустим мне нужно узнать баланс 2 млн адресов.
Пишешь генератор кошельков с мгновенным чеком на баланс? :)
Проходил когда-то эту идею. Генерить можно очень быстро, а вот чекать - нет. Для этого выкачивал базу кошельков с ненулевым балансом и в генераторе чекал наличие сгенеренного кошеля с базой. Базу держал в памяти. Занимала она не мало места. Но это был самый быстрый путь. И все-равно при генераторе с задействованным gpu ты упираешься в скорость сравнения сгенеренного с списком не пустых. Скорость падает и не але в общем.
 
Пишешь генератор кошельков с мгновенным чеком на баланс? :)
Проходил когда-то эту идею. Генерить можно очень быстро, а вот чекать - нет. Для этого выкачивал базу кошельков с ненулевым балансом и в генераторе чекал наличие сгенеренного кошеля с базой. Базу держал в памяти. Занимала она не мало места. Но это был самый быстрый путь. И все-равно при генераторе с задействованным gpu ты упираешься в скорость сравнения сгенеренного с списком не пустых. Скорость падает и не але в общем.
В верном направлении думаешь, но немного не кошельки генерирую. У приватных клюей столько комбинаций, что генерировать их очень глупо. Есть пути немного по проще, только как ты сказал вопрос проверки на баланс открыт, и это беда, ибо я упёрся в него.
 
В верном направлении думаешь, но немного не кошельки генерирую. У приватных клюей столько комбинаций, что генерировать их очень глупо. Есть пути немного по проще, только как ты сказал вопрос проверки на баланс открыт, и это беда, ибо я упёрся в него.
Как я выше и писал - берешь вот отсюда актуальный список кошельков с ненулевым балансом BASE
Укорачиваешь этот список до кошельков с хотя бы сотней баксов на счету. Загоняешь в массив в памяти компа. И дальше после того как генерируешь что-то там просто сравнивай результат с массивом в памяти.
Для ускорения процесса - разбивай массив на более мелкие. Например по первым двум символам в адресе. Или даже по первым трем.
У тебя получится много массивов по-меньше. И следовательно каждый процесс сравнения займет меньше времени.
Это самый быстрый способ узнать есть ли положительный баланс. И это только по одной крипте. Если у тебя их несколько - то процесс сильно усложняется.

А какая скорость была ? проверок в секунду?
Учитывая, что я это делал на питоне и левой ногой - что-то в районе 25 кошей в секунду. Все хотел дойти до исходников софта (название уже не помню) для генерации btc адресов через GPU. И в сорцах просто добавить необходимый блок функционала. Там скорость генерации на моей видеокарте была очень и очень не слабая. Но цифр не вспомню уже. Это лет 5 назад было.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх