Надежный и эффективный способ разобрать блокчейн в базу данных SQL.

Мне нужно создать базу данных SQL (предпочтительно SQLite3) для каждой транзакции, которая произошла в блокчейне. Есть ли эффективный способ сделать это с помощью программного обеспечения с открытым исходным кодом? Я пытаюсь сделать это сам, используя сценарий Haskell, который выполняет системные вызовы bitcoind, но у меня возникают проблемы с достаточной скоростью.

Это должен быть SQL или вы можете использовать LevelDB?
Я знаю, что bitcoind (если вы изменили настройки, которые у меня есть) создает базу данных LevelDB для собственного использования. Однако документации по LevelDB в целом очень мало, и еще меньше по выбранному мной языку (Haskell). Мне нужно что-то, что я могу легко и правильно использовать в коде, который анализирует данные, и SQL кажется единственным вариантом для этого.

Ответы (4)

Я создал форк blockparser с помощью команды csvdump, которая будет генерировать дамп данных блокчейна в формате CSV. В этом репозитории также есть несколько сценариев поддержки для создания, заполнения и периодического обновления базы данных PostgreSQL.

Имейте в виду, что результирующая база данных довольно велика; вы можете рассмотреть PostgreSQL вместо SQLite для этого.

Я помню, как blockparser был медленным как грех для отдельных транзакций и данных учетной записи, когда я впервые попробовал его, но я сделаю дамп CSV и посмотрю, сколько времени это займет. Ты помнишь, сколько времени это заняло у тебя? Если да, то каковы были характеристики машины, на которой вы ее запускали?
blockparser относительно требователен к процессору и памяти. Я только что выполнил полный csvdump на своей машине, и это заняло 9 минут, при максимальном использовании памяти чуть менее 9 ГБ. Это определенно поможет, если у вас есть приличный процессор и твердотельные накопители для хранения.
В настоящее время я запускаю дамп SQL. Это намного быстрее, чем Bitcoin-Abe; похоже, это займет всего около пяти часов. Однако мне интересно, анализирует ли он данные транзакции или просто оставляет их в необработанном шестнадцатеричном формате.
Зависит от того, что вы подразумеваете под «данными». Информация предоставляется по отдельным входам и выходам транзакций, но работа по анализу подписей не проводится.
Это прекрасно работает, но у меня есть одно сомнение: почему у транзакций нет временных меток?
Отдельные транзакции не имеют временных меток в блокчейне. Подробнее см. en.bitcoin.it/wiki/Transaction .
Я не могу найти другого способа связаться с вами, но вам следует подумать об изменении файла sql.cpp в этом ответвлении, чтобы просто создавать временные дампы CSV, а затем анализировать их в базе данных с помощью команды MariaDB (или эквивалентной) LOAD DATA INFILE. На слабой машине это заняло бы менее часа, тогда как sql.cpp занимает несколько дней. Я бы помог, но я не знаю С++.
Я не особо просматривал существующий sql.cpp, потому что он не собирал всю необходимую мне информацию. Не стесняйтесь разветвить код znort и отправить ему запрос на включение.
Кроме того, вы заметили, что InputTxHash и InputTxIndex всегда нулевые в outputs.csv?
Да будут. Вам потребуется выполнить постобработку данных, чтобы связать входные данные с выходными данными. Где-то в файлах загрузки базы данных есть пример SQL для этого для PostgreSQL.
h2 подойдет? Меня интересует хранение только набора UTXO, проиндексированного по адресам.

Возможно, проверьте ABE - альтернативный анализатор блоков. Он использует Python и базу данных на основе SQL, но вы можете подключить другие базы данных на основе драйвера.

https://github.com/jtobey/биткойн-абэ

Это законный вариант. Однако по мере роста блокчейна он становится нереально медленным. Насколько я могу судить, с SQLite3 теперь требуется несколько дней.
Что ж, запустите его, а затем получите клиент, который будет поддерживать его в актуальном состоянии. Да, он будет расти, поскольку вы запрашиваете базу данных, которая будет охватывать блокчейн. Для этого нет немедленного решения, если только вам не нужна база данных со ссылкой на точки в цепочке. Вы хотели чего-то "быстрого"? Используйте LevelDB.
Или блокпарсер mcdee.

Вы всегда можете использовать BlockchainSQL Server для запросов SQL к цепочке биткойнов.

Веб-версия бесплатная, сервер платный.

Отказ от ответственности: я разработчик.

Сайт не работает

Для переноса в базу данных SQL Server вы можете попробовать BitcoinDatabaseGenerator.
Вы можете скачать его с https://github.com/ladimolnar/BitcoinDatabaseGenerator/releases
Исходники и вики: https://github.com/ladimolnar/BitcoinDatabaseGenerator

Трансфер очень быстрый. На момент написания этой статьи передача 266 файлов блокчейна общим объемом 33 ГБ заняла на моем компьютере для разработки менее одного часа и 30 минут. Конечно, время будет варьироваться в зависимости от оборудования и конфигурации.

под линуксом работает?
BitcoinDatabaseGenerator только для Windows.