/** * @param PeerState $state * @param Peer $peer * @param Block $blockMsg */ public function onBlock(PeerState $state, Peer $peer, Block $blockMsg) { $best = $this->node->chain(); $headerIdx = $this->node->headers(); $blockIndex = $this->node->blocks(); $checkSignatures = (bool) $this->config->getItem('config', 'check_signatures', true); $checkSize = (bool) $this->config->getItem('config', 'check_block_size', true); $checkMerkleRoot = (bool) $this->config->getItem('config', 'check_merkle_root', true); try { $index = $blockIndex->accept($blockMsg->getBlock(), $best, $headerIdx, $checkSignatures, $checkSize, $checkMerkleRoot); $this->blockDownload->received($best, $peer, $index->getHash()); } catch (\Exception $e) { $header = $blockMsg->getBlock()->getHeader(); $this->node->emit('event', ['error.onBlock', ['ip' => $peer->getRemoteAddress()->getIp(), 'hash' => $header->getHash()->getHex(), 'error' => $e->getMessage() . PHP_EOL . $e->getTraceAsString()]]); } }
/** * @param Peer $peer * @param Block $blockMsg */ public function onBlock(Peer $peer, Block $blockMsg) { $best = $this->chain(); $block = $blockMsg->getBlock(); try { $this->blocks->accept($best, $block, $this->headers, $this->utxo); $this->chains->checkTips(); $this->blockDownload->received($best, $peer, $block->getHeader()->getHash()); } catch (\Exception $e) { $header = $block->getHeader(); echo 'Failed to accept block' . PHP_EOL; echo $e->getMessage() . PHP_EOL; if ($best->getChain()->containsHash(Buffer::hex($block->getHeader()->getPrevBlock()))) { if ($header->getPrevBlock() === $best->getLastBlock()->getHash()) { echo $block->getHeader()->getHash()->getHex() . PHP_EOL; echo $block->getHex() . PHP_EOL; echo 'We have prevblockIndex, so this is weird.'; echo $e->getTraceAsString() . PHP_EOL; echo $e->getMessage() . PHP_EOL; } else { echo 'Didn\'t elongate the chain, probably from the future..' . PHP_EOL; } } } }