Согласно моему пониманию кодовой базы биткойнов, следующие события происходят после того, как мы решаем доказательство работы.
miner.cpp
, как только поток майнера решает новое доказательство работы (PoW), ProcessBlockFound
в основном уведомляет других через сигнал BlockFound
.BlockFound
сигнальные вызовы ResetRequestCount
, которые в основном сбрасывают вход mpRequestCount
через wallet.h
файл validationInterface.h
.NetMsgType::INV
выдается из main.cpp
в SendMessages
/ ProcessMessages
ко всем пирам.net.cpp
Мне не хватает основной части логики кода между шагами 2 и 4. Может ли какой-нибудь эксперт помочь мне понять, какая предыстория происходит после шага 2?
Если вы прочитаете несколько строк после сигнала BlockFound, то увидите:
CValidationState state;
if (!ProcessNewBlock(state, chainparams, NULL, pblock, true, NULL))
return error("BitcoinMiner: ProcessNewBlock, block not accepted");
https://github.com/bitcoin/bitcoin/blob/v0.12.0rc2/src/miner.cpp#L373-L375
Здесь собственно и начинается обработка. ProcessNewBlock
определяется в main.cpp
.
Прем Ананд
ProcessNewBlock
в основном работоспособность проверяет блок, сохраняет на диск и снова активирует лучшую цепочку. Мой вопрос: где логика, которая фактически отправляет хэш другим узлам? Логика майнинга находится вminer.cpp
логике отправкиmain.cpp
. Где-то я пропустил, где он выбирает информацию о новом добытом блоке и отправляет «Эй! У меня есть новое» или сообщение INV