Как происходит валидация майнинга bitcoin?
Представьте, что какой-то разработчик придумывает новый алгоритм по подбору sha или вообще вздумалось ему рандомизировать и тыкаться локально в проверку майнинг хэша Какие средства уже существующие может использовать этот разработчик, чтобы:
- Провалидировать локально свой новоиспеченный хэш
- Как он сможет отправить это в сеть биткоин, есть ли для этого протокол?
Что из себя представляет майнинг хэш?
а. Он всё ещё должен быть красивым с ведущими нулями? Где информация об этом может быть прочитана
б. На основе чего он делается? Предыдущей транзакции? Но их же куча...
Ответы (1 шт):
Что бы корректно провалидировать свой хеш локально вам нужно знать текущую сложность сети. По простому сложность это количество ведущих нулей. Но корреткней говорить, что сложность это 256-битное число, и хеш который вы ищите должен быть меньше этого числа. (32-байтный хеш также можно представить как 256-битное число). Сложность пересчитывается раз в 2016 блоков. Документация.
Если вы включаете в свой блок чужие транзакции (а вы имеете полное право этого не делать, и включать только транзакцию на генерацию новых монет), то вам нужно локально хранить весь блокчейн и валидировать каждую транзакцию. Включите невалидную транзакцию, ваш блок никто не примет, и ваша работа по поиску хеша пойдет насмарку.
Что бы отправить свой блок другим узлам сети существует низкоуровневый протокол поверх TCP. Документация.
Когда считается хеш блока, берется только заголовок блока длиной 80 байт. Среди этих 80 байт содержится:
- Хеш предыдущего блока. Таким образом блоки формируют неизменяюмую цепочку, отсюда и термин blockchain.
- Текущая сложность сети.
- Хеш от всех транзаций в текущем блоке (расчитан по алгоритму дерева Меркла).