NBitCoin анализирует блокчейн

Может быть, этот вопрос совершенно глупый, но я просто не понимаю: я выполняю некоторую работу POC, чтобы немного лучше понять сеть BitCoin, и выбрал C # и библиотеку NBitCoin в качестве своей реализации для нее. Теперь я пытался прочитать цепочку блоков (с текущей версией BitCoinCore, установленной и работающей локально на моем компьютере), когда я столкнулся с неожиданным исключением: хэш транзакции, кажется, существует дважды в цепочке. Хэш выглядит следующим образом: d5d27987d2a3dfc724e359870c6644b40e497bdc0589a033220fe15429d88599 Я нашел его один раз в Блоке 14.11.2010 17:59:48 и затем еще раз в 14.11.2010 21:04:51 В обоих случаях новая транзакция - та же самая транзакция. Просматривая хэш на blockexplorer.com, я могу найти его на 14.11.2010 22:04:51 (там используется другой формат даты, я просто преобразовал его, чтобы он соответствовал другим в этом посте).

Что я здесь делаю неправильно? Я имею в виду... Я предполагаю, что повторяющиеся идентификаторы транзакций могут возникать по всей цепочке, в конце концов, это всего лишь хэши, но как я могу сопоставить ввод расходов с одним из них, если хэш, на который я ссылаюсь, не уникален?

Я действительно запутался здесь прямо сейчас и был бы признателен за хорошие идеи.

Ответы (1)

Вы не делаете ничего плохого. Вам просто нужно иметь возможность обрабатывать эти повторяющиеся идентификаторы транзакций. На самом деле это происходит несколько раз до того, как BIP 30 вступил в силу, что делает такие повторяющиеся txids недействительными.

Эти дубликаты возникают из-за того, что транзакция coinbase в двух разных блоках может быть совершенно одинаковой, поэтому они имеют одинаковый txid. Это связано с тем, что до BIP 34 не было ничего, что делало бы каждую транзакцию coinbase уникальной; у вас может быть транзакция, которая выплачивается точно по тому же адресу с точно такой же суммой (субсидия блока), и если вы не установите строку coinbase или не используете extranonce в coinbase, у вас будет две идентичные транзакции coinbase.

Чтобы справиться с двумя случаями, когда происходит дублирование транзакций, вы должны разрешить исключение из правила BIP 30 для этих блоков. Транзакция, на которую ссылаются эти дубликаты txids при трате, может быть только самой последней дублирующейся транзакцией. Любые предыдущие полностью бесполезны.

Итак, вы говорите, что первая транзакция практически потеряна, верно? Я понимаю, что это легко происходит в Coinbase, но каким был бы (новый/текущий) способ справиться с этим, если бы это было в стандартной транзакции и произошло случайно?
Да. В первый раз, когда вы видите повторяющуюся транзакцию, эта транзакция исчезла.