1
0
Fork 0
mirror of https://github.com/bitcoin-s/bitcoin-s.git synced 2025-03-26 21:42:48 +01:00

Rework handling of BlockMessage, fix bug where callbacks executed when they shouldn't have been ()

* Rework handling of BlockMessage, fix bug where callbacks executed when they shouldn't have been

* scalafmt
This commit is contained in:
Chris Stewart 2023-08-24 07:49:15 -05:00 committed by GitHub
parent e8ab293fa0
commit 26290bf4c0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -357,47 +357,40 @@ case class DataMessageHandler(
}
case msg: BlockMessage =>
val block = msg.block
logger.info(
s"Received block message with hash ${block.blockHeader.hash.flip.hex}")
val newMsgHandlerF = {
chainApi
val newMsgHandlerF = for {
isIBD <- isChainIBD
headerOpt <- chainApi
.getHeader(block.blockHeader.hashBE)
.flatMap { headerOpt =>
if (headerOpt.isEmpty) {
logger.debug("Processing block's header...")
val headersMessage =
HeadersMessage(CompactSizeUInt.one,
Vector(block.blockHeader))
for {
isIBD <- isChainIBD
newMsgHandler <- {
// if in IBD, do not process this header, just execute callbacks
if (!isIBD) {
handleDataPayload(payload = headersMessage,
peerData = peerData)
} else {
//else ignore it until we are done with ibd
logger.info(
s"Received block=${block.blockHeader.hashBE.hex} while in IBD, ignoring it until IBD complete state=${state}.")
Future.successful(this)
}
}
} yield {
newMsgHandler
}
} else Future.successful(this)
newMsgHandler <- {
if (isIBD && headerOpt.isEmpty) {
//ignore block, don't execute callbacks until IBD is done
logger.info(
s"Received block=${block.blockHeader.hashBE.hex} while in IBD, ignoring it until IBD complete state=${state}.")
Future.successful(this)
} else if (!isIBD && headerOpt.isEmpty) {
logger.info(
s"Received block=${block.blockHeader.hash.flip.hex}, processing block's header... state=$state")
val headersMessage =
HeadersMessage(CompactSizeUInt.one, Vector(block.blockHeader))
val newDmhF = handleDataPayload(payload = headersMessage,
peerData = peerData)
newDmhF.flatMap { dmh =>
appConfig.callBacks
.executeOnBlockReceivedCallbacks(block)
.map(_ => dmh)
}
} else {
logger.info(
s"Received block=${block.blockHeader.hash.flip.hex} state=$state")
appConfig.callBacks
.executeOnBlockReceivedCallbacks(block)
.map(_ => this)
}
}
}
} yield newMsgHandler
for {
handler <- newMsgHandlerF
_ <-
appConfig.callBacks
.executeOnBlockReceivedCallbacks(block)
} yield {
handler
}
newMsgHandlerF
case TransactionMessage(tx) =>
logger.trace(
s"Received txmsg=${tx.txIdBE}, processing given callbacks")