Почему алгоритм добычи блока не распараллеливается?
Я ни разу не встречал упоминание распараллеливания в алгоритмах добычи блока. Это означает, что он там не используется потому что что-то этому мешает или потому что это используется там, но это просто более глубокий материал, который не особо нужен человеку, который знакомится с технологией блокчейн (хотя не знаю, что в этом сложного просто упомянуть это в случае использования, так как больших знаний для понимания распараллеливания не требуется)?
Если не используется, то почему? Ведь это просто же навесить в алгоритм майнинга использование например 4 потоков и каждый поток будет проверять, подходит его nonce или нет, что ускорит майнинг в 4 раза. Первый проверяет nonce = 1, 5, 9, … и тд
Ведь это просто же навесить в алгоритм майнинга использование например 4 потоков и каждый поток будет проверять, подходит его nonce или нет, что ускорит майнинг в 4 раза. Первый проверяет nonce = 1, 5, 9, … и тд
На самом деле все майнеры так или иначе распараллеливают вычисления, ибо действительно параллелизм тут достигается очень тривиально, так как нет никакого общего состояния.
Почему это нигде не пишут:
1. Обывателю это не нужно, да и не интересно
2. Программисту это и так очевидно
3. В спецификации не описывают детали реализации - только математику.
А как именно майнеры распараллеливают?
Ну то есть, я сейчас создаю блокчейн, параллельно знакомлюсь с практической частью и как бы создаю класс блокчейна, где прописываю метод майнинга.
Как майнеры распараллеливают самостоятельно, если это прописано в блокчейне создателя этого проекта, создаются ли дополнительные потоки или же все вычисления на одном?
Начиная с просто параллельного вычисления хэша для разных данных на разных потоках процессора.
Заканчивая вычислениями на видеокартах и специализированных микросхемах.
Как майнеры распараллеливают самостоятельно, если это прописано в блокчейне создателя этого проекта, создаются ли дополнительные потоки или же все вычисления на одном?
Параллельность - это детали реализации конкретного майнера. В рамках спецификации блокчейна это роли не играет - важен только результат.
По поводу потоков - ну если сможешь параллельно выполнять работу на одном ядре процессора, то можно и на одном ;)
Я не об этом)
Ну то есть, блокчейн - это класс со своими свойствами и методами по типу там получить последний блок, закэшировать все свойства класса для получения хэша блока и тд и тп
А разве майнинг не является одним из методов класса блокчейн? То есть, алгоритм майнинга выбран заранее создателем блокчейна, и всякий раз, когда ты собираешься майнить, ты каким-то образом вызываешь этот метод класса, который отрабатывает и возвращает блок, который добавляется в цепи
Вы написали, про спецификации конкретного майнера. Это означает, что для одного блокчейна создаётся много методов майнинга? Если да, то как это внедряется в код с блокчейном, если это является сторонним кодом
Нет, я такого не писал.
Я писал про спецификацию блокчейна.
Кажется, у вас не до конца есть понимание, что вообще такое блокчейн.
Блокчейн - это не программа.
Блокчейн - это описание формата хранение данных и набор из протоколов(правил), по которым узлы(компьютеры) могут этими данными обмениваться, чтобы данные всегда были консистентны (в том числе сюда входит протокол консенсуса).
А также правила добавления новых данных в общую цепочку.
Это не программа и не какой-то один класс в этой программе.
Например может быть правило "хэш нового блока должен начинаться с N нулей. N вычисляется по такой-то формуле".
Как сформировать такой блок - это уже проблема того, кто хочет блок зафиксировать.
Да мне по учебе надо реализовать свой блокчейн самостоятельно, поэтому вот стараюсь создать что-то похожее на блокчейн на питоне, но не знаю насколько близко к настоящему блокчейну он должен быть, так как очень много нюансов
BoyFromDubai, кстати майнинг - это вообще не обязательная часть блокчейна.
В приватных блокчейнах майнинга вообще нет и владелец может совершенно свободно любые транзакции фиксировать.
Василий Банников, вот майнинг мне как раз и нужен, так как он там должен использоваться)
Но вопрос небольшой, если создаёшь тестовую криптовалюту в рамках обучения, правильно ли будет назвать блокчейном что-то распределённое в виде цепочки, в которой хранятся транзакции?
Ну то есть класс, свойства его и методы я определил сам, условно там ещё присоединил выгрузку блокчейна в файл тхт. То есть функция майнинга общая для всех узлов моей сети и всякие такие штуки, которых нет в блоучейнах Биткоина, Эфира и тд, но сеть распределённая и информация в виде цепочек представляется, это же тоже можно назвать блокчейном?
Василий Банников, у меня ещё один вопрос возник касаемо этой темы
Если дальше развивать аналогию, то у блокчейна есть метод "зафиксировать блок".
Но собрать валидный блок - это отдельная задача.
Как сформировать такой блок - это уже проблема того, кто хочет блок зафиксировать.
Я не до конца понял вот эти моменты. То есть, как понимать то, что это проблема того, кто хочет собрать блок
Я ознакомился с тем, что для запуска полной ноды можно скачать Bitcoin core, который предоставляет возможность майнинга. То есть, это определённый алгоритм майнинга, которому будут следовать люди, майнящие с помощью Bitcoin Core’а.
А если есть какой-то злоумышленник, который обладает достаточной вычислительной мощностью и он хочет контролировать то, какие транзакции он хочет включать в свои блоки, а какие - нет, то как они это делают? Есть алгоритм майнинга, который исполняется клиентом Bitcoin Core’а (наверняка это выбор из мемпула транзакций с наибольшей комиссией), то как он способен выбирать конкретные транзакции и добавлять их в свои блоки, если у него например 51% вычислительной мощности?
Вопрос жизни и смерти, подскажите пожалуйста по возможности)
Весь мир в один момент ищет один блок. И никто у другого не спрашивает как он ищет, что перебирает, что точно не подходит и т.п. Откуда вообще могла мысль возникнуть, что это все происходит не параллельно? Как это могло бы быть по-другому?
BoyFromDubai, Если оно даже само параллелится естественным путем, что мешает юзать многопоточность? Разбиваются задачи элементарно. Можно не только по nonce, но и время крутить. Плюс периодическое добавление транзакций меняет хэш. Так что тут проблем нет. Мощные майнеры так и крутят, т.к. nonce кончается очень быстро.