Jump to content

почему в UTXO не указывают хеш блока ?


Recommended Posts

Posted

вот пришло мне допустим сообщение транзакции. я беру его двойной sha256 хеш, флипаю порядок байтов (зачем?) и ищу его ПО ВСЕМУ блокчейну. трачу на это кучу времени. затем, допустим я нашел эту транзакцию где-то в блоке номер 120 000. теперь я должен проверить еще пол ляма блоков, что-бы убедиться, не был ли потрачен этот UTXO.

 

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

Posted

@ASHPD ,  вопрос явно для раздела «Блокчейн и финтех», вы его намеренно во флейме создали? Или кто-то из модеров переместил?

Posted
7 минут назад, Helber сказал:

@ASHPD ,  вопрос явно для раздела «Блокчейн и финтех», вы его намеренно во флейме создали? Или кто-то из модеров переместил?

да я так, по-скромному сразу во флудилку. может кто отзовётся. на английском языке не нагуглил как это делается. такой молниеносный поиск: 300 гигабайт данных за долю секунды перелапачивает по 150 тыщ раз за долю секунды. чудеса какие-то. как такое возможно ???

Posted
35 минут назад, ASHPD сказал:

да я так, по-скромному сразу во флудилку. может кто отзовётся

Я сам такой бываю, но все-таки это не всегда правильно )

 

Сейчас перемещу. 

Posted
2 часа назад, ASHPD сказал:

вот пришло мне допустим сообщение транзакции

Это что? Сообщение о транзакции ? Просто транзакция?

2 часа назад, ASHPD сказал:

я беру его двойной sha256 хеш

Что берешь? Зачем берешь? Чем?

2 часа назад, ASHPD сказал:

флипаю порядок байтов (

Ты флипаешь до космопорта??? (с)

Никогда не флипаю до космопорта. Беру флаер - надежнее и проще. 

 

В общем два раза перечитал, в голове галиматья.

 

Posted
4 часа назад, ASHPD сказал:

каким образом фул ноды так быстро ищут транзакции и проверяют выходы на потраченность

 

Bitcoin Core ведёт свою внутреннюю базу UTXO. Каждый раз при поступлении нового блока эта база обновляется. Поэтому ноде не нужно перелопачивать весь блокчейн для определения баланса для конкретного адреса, достаточно сделать поиск по базе UTXO.

 

С недавних пор поис по базе UTXO доступен и простым смертным при помощи RPC scantxoutset, например так можно получить список UTXO и итоговый баланс для адреса 1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY:

scantxoutset start "[\"addr(1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY)\"]"

Работает не слишком быстро, но намного быстрее, чем сканирование всего блокчейна.

Posted

2rammendo:

транзакцией в сети биткоин называют сообщение, в котором указаны непотраченые выходы, которые будут использованы как входы текущей транзакции, адреса, на которые следует переместить определенное количество сатошей с этих непотраченых выходов, публичные ключи от используемых UTXO и ЭЦП этих данных. двойной и перевёрнутый sha256 хеш - это id транзакции, который указывает на непотраченый выход.

 

так вот, проблема в том, что для того что-бы проверить входящую транзакцию нужно выполнить 2 задачи:

1) проверить наличие id транзакции в блокчейне

2) проверить не был ли потрачен UTXO

 

тоесть в любом случае для провекри транзакции нужно прочитать ВЕСЬ блокчейн. скорость чтения среднестатисчических SSD накопителей 500МБ/с. делим 300ГБ (вес блокчейна) на эту скорость чтения и получаем, что для проверки одной транзакции нужно целых 10 минут непрерывно читать данные с диска. это я еще не считаю необходимость двойного хеширования ВСЕХ транзакций в блокчейне, чтоб сверить id транзакции. конечно вы скажите, а за чем по одной проверять, можно же взять весь мемпул и раз в 10 минтут проверять сразу по 5 тыщ транзакций массово. я тоже так изначально подумал, но узлы принимают или отвергают транзакции МГНОВЕННО, за долю секунды! еще я думал что может используют индекс, в котором в порядке возрастания расположены ВСЕ принятые ранее транзакции и после каждого нового найденного блока перестраивают весь индекс. и еще второй индекс, в котором так же в порядке возрастания расположены все потраченные UTXO. тогда конечно можно было бы ускорить процес проверки транзакций, хоть и заняло бы это дополнительно кучу места, даже если брать не по 32 байта от id транзакции, а хотя-бы 5. да и вычеслительной мощности на перегенерацию всего такого индекса каждые 10 минут нужно очень много. но таких индексов я не обнаружил в bitcoin core.

Posted
9 часов назад, Old Miner сказал:

 

Bitcoin Core ведёт свою внутреннюю базу UTXO. Каждый раз при поступлении нового блока эта база обновляется. Поэтому ноде не нужно перелопачивать весь блокчейн для определения баланса для конкретного адреса, достаточно сделать поиск по базе UTXO.

 

С недавних пор поис по базе UTXO доступен и простым смертным при помощи RPC scantxoutset, например так можно получить список UTXO и итоговый баланс для адреса 1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY:


scantxoutset start "[\"addr(1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY)\"]"

Работает не слишком быстро, но намного быстрее, чем сканирование всего блокчейна.

 

ага, я тоже так подумал, но перестроить индекс на пол миллиарда записей это не тривиальная задача. более того не каждый компьютер ВПРИНЦИПЕ сможет справится с такой задачай. не говоря уже о необходимости это делать каждые 10 минут. я для подобных операций арендую инстансы в gcp на сотни долларов и только под мощнейшими 100+ядерными системами удаётся совершать такие вычисления за несколько часов. а тут на офисном ноутбуке БАЦ и готово!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...