Comments 34

Вы под GNU или под какой другой лицензией публикуете код? А то так не понятно насколько свободно его можно использовать.

UFO landed and left these words here
Вы код видели? Это какая-то поделка начинающего изучать python, внутри нет ничего полезного, ну кроме примеров, как не надо делать.
Я вот код не смотрел, честно скажу… Но если человек сам разобрал побайтно файл блокчейна — это реально круто. Ну просто потому, что он вообще-то во многом выглядит как шум.
Не вижу ничего крутого, формат известен, есть куча готовых библиотек, в том числе и на python. Еще один разобрал, ну Ok, зачем же такой кривой код показывать тут, на Хабре?
Не могли бы вы привести примеры существующих готовых библиотек?
как при помощи этих библиотек получить список хэшей всех транзакций?
Ваши умственные способности ясны, можете дальше не продолжать.
Не хотел никого обидеть. Дело в том, что при помощи существующих библиотек (в том числе и тех, что вы так любезно подсказали) невозможно получить такие очень полезные вещи как: список всех хэшей транзакций, список всех использованных адресов и так далее.
Не то, чтобы я пытаюсь спорить. Утверждаю, что эти библиотеки не обладают указанными функциями.
from bitcoin.core import b2lx, CBlock

cblock = CBlock.deserialize(bytes.fromhex(hex_rawblock))
for tx in cblock.vtx:
    print(b2lx(tx.GetTxid()))
В Issues данного проекта отмечено, что код не работает с SegWit, т.е. с транзакциями нового типа. Приведённый Вами код не имеет смысла при отсутствии совместимости с SegWit транзакциями. Как-то так.
UFO landed and left these words here
Для ленивых вставляю случайный кусок кода, он весь примерно такой — просто сплошняком идет вот такой вот столбец
                for j in range(1,c):
                    b = f.read(1)
                    b = b.hex().upper()
                    tmpHex = b + tmpHex
                scriptLength = int(tmpHex,16)
                tmpHex = tmpHex + tmpB
                RawTX = RawTX + reverse(tmpHex)
                tmpHex = ''
                for j in range(scriptLength):
                    b = f.read(1)
                    b = b.hex().upper()
                    tmpHex = tmpHex + b
                resList.append('Input script = ' + tmpHex)
                RawTX = RawTX + tmpHex
                tmpHex = ''
                for j in range(4):
                    b = f.read(1)
                    b = b.hex().upper()
                    tmpHex = tmpHex + b
                resList.append('sequenceNumber = ' + tmpHex)
                RawTX = RawTX + tmpHex

Может это ради скорости. Мне тоже приходилось разворачивать функции так как их вызов замедлял исполнение скрипта.

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

Чтобы из этого кода мне понять, как устроен блокчейн, какие в его формате элементы, как они между собой взаимосвязаны, мне надо потратить неделю по вечерам, причем большую работу проделаю я, читая спецификацию и понимая, как ваш код работает (утрирую).

Если интересны практические рекомендации: стоило бы код как то отрефачить чтобы убрать эти повторения, функции выделить, комментарии написать, выделить какие-то логические сущности. Имена тоже можно было бы дать человеческие переменным, это вообще фи, вы же с людьми кодом делитесь.

А так, код выглядит, как парсер, сегенеренный каким-нибудь ANTLR.
Вот, например, у вас кусок кода
        for j in range(4):
            b = f.read(1)
            b = b.hex().upper()
            tmpHex = b + tmpHex

с разными параметрами повторяется мильон раз. Я не совсем понимаю смысл этой части кода, и оставим в стороне то, что у вы переменную переприсваиваете, но почему бы не вынести это в функцию? Вы тогда могли бы уменшить код строчек на 20 и читать его было бы проще
Всё зависит от цели, которой придерживается юзер, используя мой парсер. В большинстве случаев, достаточно того, что есть. Или у вас есть идеи, как сделать код более «массовым»?
Да, вот только если парсер представляется на суд общественности, то ожидается, что разработчик позаботился о том, чтобы код был доступен для восприятия общественности. Я по крайней мере ожидал такого.
Или вы предлагаете обсудить реализованное решение на предмет его технической новизны и практической значимости в вопросах исследования базы данных блокчейн по существу? Не могли бы вы детализировать свой комментарий?
Мне кажется, зря вы в бочку лезете. Я вам написал очень детальный комментарий — как подрефачить ваш код, чтобы он выглядел по человечески. Вместо того, чтобы препираться, могли бы давно это сделать, выглядело бы круто. Больше отвечать вам не буду, не вижу смысла.
Все существующие парсеры не имеют поддержки транзакций с Witness флагом.
Only those users with full accounts are able to leave comments. Log in, please.