From a8490f85c4fd11d54d2fa2c402151ba8caba0900 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Sun, 7 Jan 2024 19:28:59 +0100 Subject: [PATCH] app/ship_processor.go: Implement support to send rollback messages on forks. --- app/ship_processor.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/ship_processor.go b/app/ship_processor.go index 3fe0901..2aae7b4 100644 --- a/app/ship_processor.go +++ b/app/ship_processor.go @@ -135,6 +135,19 @@ func (processor *ShipProcessor) GetCurrentBlock() uint32 { // Callback function called by shipclient.Stream when a new block arrives. func (processor *ShipProcessor) processBlock(block *ship.GetBlocksResultV0) { + // Check to see if we have a microfork and post a message to + // the rollback channel in that case. + if processor.state.CurrentBlock > 0 && block.ThisBlock.BlockNum < processor.state.CurrentBlock { + log.WithField("old_block", processor.state.CurrentBlock). + WithField("new_block", block.ThisBlock.BlockNum). + Warn("Fork detected, old_block is greater than new_block") + + processor.encodeQueue(api.RollbackChannel, message.RollbackMessage{ + OldBlockNum: processor.state.CurrentBlock, + NewBlockNum: block.ThisBlock.BlockNum, + }) + } + processor.state.CurrentBlock = block.ThisBlock.BlockNum if block.ThisBlock.BlockNum%100 == 0 {