В далёком 2015 году, когда криптовалютам ещё не уделялось такое внимание широкой общественности как сейчас, мне пришла в голову мысль узнать в подробностях - что такое блокчейн, криптовалюты и Биткоин (Bitcoin), в частности.
Попытки провести детальный анализ исходного кода проекта Bitcoin Core не увенчались особым успехом, ввиду достаточно строгих начальных условий, которые были мною поставлены перед собой, для того, чтобы сказать "да, теперь я знаю что это и как оно работает" и огромного количества строк исходного кода, которые необходимо было осмыслить, чтобы считать результат достигнутым.
Пришлось искать другие пути. Тем более, к моменту принятия решения блокчейн уже полностью загрузился на мой локальный компьютер (на март 2023 это уже ~500 Гигабайт данных).
И так. Официальный клиент Bitcoin Core загрузил весь блокчейн в папку на локальной машине, это были какие-то файлы, которые, как говорилось в официальных документах, содержали всё то, что называется Bitcoin. Самым интересным для меня являлись файлы так называемой RAW Blockchain Data (blk00000.dat ... blk01234.dat и т.д. из папки Bitcoin/blocks), а именно файлы базы данных блокчейн как они есть, в исходном виде.
Остальное содержимое каталога - это индекс "сырой" базы данных, данные для корректного учёта непотраченных выходов, настройки и персональный кошелёк.
Дабы проникнуть в суть (а это именно моя специализация), очевидным показалось разобраться в том, что в себе хранит исходная база данных, на основании которой локальная система производит всё дальнейшее необходимое действо для обеспечения функционирования блокчейна данной криптовалюты. Часть технологии, касающаяся сетевых взаимодействий не рассматривалась в данной статье, хотя там есть очень интересные моменты. Намеренно я ограничился именно локальной частью, и именно файлами хранящими блоки.
Спецификация формата блоков и транзакций доступна в открытых источниках, в виде разрозненных описаний. Но ничего не удалось найти из того, что в полной мере могло бы дать представление о том, как интерпретировать данные, хранящиеся в файлах этой самой "сырой" базы данных блокчейн (RAW Blockchain Database).
Единственным, на мой взгляд, вариантом было разобрать линейную структуру файлов и представить её в виде некой читаемой структуры (текст или некий csv - не принципиально), которая и должна дать полное понимание что это за фрукт такой Биткоин.
Результатом является написанный на Python скрипт в ~300 строк, который преобразует локально хранящиеся "сырые" файлы данных blkXXXXX.dat в обычный текстовый формат с указанием того, что там содержится, и какой смысл имеет каждое поле данных. Полученные текстовые файлы подходят для дальнейшей их обработки и извлечения из них, к примеру, всех хэшей блоков (Block hash), хэшей транзакций (TX hash), адресов, сумм транзакций и т.п. с целью анализа, да и много ещё для каких целей...
Удобство и прозрачность использования парсера обеспечено, на мой взгляд, с максимальной наглядностью, за счёт реализации через последовательное побайтное чтение-преобразование данных. Примитивное с виду представление результатов в виде обычного текста сделано для наглядности и обеспечения "human-readable". Нет никакой проблемы сделать преобразование Blockchain-to-MySQL, Blockchain-to-PostgreSQL или тому подобное.
Существующие в природе парсеры блокчейна, имеют множество фич, но ни один не работает напрямую с файлами самой базы данных непосредственно, напрямую, без использования каких-либо сторонних библиотек. Именно поэтому я не стал заострять внимание на реализации каких-либо интересностей, таких как: индексация данных, предварительная обработка или получение списка адресов с баллансами, а ограничился максимально наглядной и простой реализацией непосредственного преобразования файлов из внутреннего формата в универсальный текстовый вид. Тем более, множество плюшек, таких как формирование crypto-proof UTXO Set (набор непотраченных выходов, который никак иначе не получить, используя официальные библиотеки) или формирование списка адресов с баллансами уже мною реализованы для ряда частных проектов.
Неотъемлемой частью данной работы является помощь заинтересованным лицам в изучении технологии блокчейн. С момента публикации скрипта в открытом доступе, мне пришло множество сообщений от студентов ВУЗов из разных стран, которым их преподаватели по Computer Science и Cyber Security рекомендуют изучение блокчейн с помощью моей простой программы. Blockchain parser подтверждённо используют в следующих университетах (чего же не похвастаться):
- Cornell University
- City University of Hong Kong
- Open University of Catalonia
- University of Piraeus
- Kennesaw State University
- Reykjavik University
- University College Dublin
- University of Milan
- Paris Sciences et Lettres University
- University of Turin
- Chuka University (Nairobi Kenya)
- Worcester Polytechnic Institute (Massachusetts, United States)
- University of Matanzas (Cuba)
- University of Havana (Cuba)
- Saint Petersburg State Electrotechnical University (Russia)
- Higher School of Economics (Russia)
- Hamburg University of Applied Sciences
- University of the Republic (Uruguay)
- Simon Fraser University (Canada)
- University of Waterloo (Canada)
- Aristotle University of Thessaloniki (Greece)
- Anhembi Morumbi University (Brazil)
- University of Nicosia (Cyprus)
- Gwangju Institute of Science and Technology (South Korea)
- Monash University (Australia)
- Queen's University at Kingston (Canada)
Да, как оказалось, скрипт подходит также и для большинства других криптовалют, таких как Dash, Dogecoin, Bitcoin Cash, Bitcoin Gold, Litecoin и прочих альткоинов (altcoins), правда для этого необходимо сделать пару хитростей в коде. В открытом доступе есть пара диссертаций, в которых мой парсер приспособили для нескольких отличных от Bitcoin криптовалют.
Некоторое время назад, мне посоветовали монетизировать данный проект в различных направлениях, таких как:
Blockchain deep search - поиск закодированных в блокчейне сообщений (да, можно записывать в блокчейн всё что угодно)
Blockchain advanced stats - предоставление расширенной статистики (объёмы движения монет по времени, анализ различных взаимосвязей между транзакциями и т.д.)
Blockchain security monitoring - поиск повторяющихся сигнатур и предсказуемых ключей
Подобные и иные направления являются весьма перспективными. К тому же, все наработки давно пылятся в черновиках.
Спойлер: предсказуемые ключи и повторяющиеся подписи постоянно и с переменным успехом ищут неутомимые блокчейн сталкеры (blockchain stalkers). Но, на данный момент (июль 2024) все известные вектора атак в блокчейне уже не актуальны, пожалуйста, не пишите мне с подобными вопросами.
Сам парсер блокчейна (blockchain parser) вы можете загрузить по этой ссылке.