enforce epoch alignment for --finalized-checkpoint-state/block (#3858)

* enforce epoch alignment for --finalized-checkpoint-state/block

* Update beacon_chain/nimbus_beacon_node.nim

Co-authored-by: Etan Kissling <etan@status.im>

Co-authored-by: Etan Kissling <etan@status.im>
This commit is contained in:
tersec 2022-07-12 15:09:56 +00:00 committed by GitHub
parent 20491560b6
commit 8a9e6ab8a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 0 deletions

View File

@ -471,6 +471,11 @@ proc init*(T: type BeaconNode,
fatal "Failed to read checkpoint state file", err = err.msg fatal "Failed to read checkpoint state file", err = err.msg
quit 1 quit 1
if not getStateField(checkpointState[], slot).is_epoch:
fatal "--finalized-checkpoint-state must point to a state for an epoch slot",
slot = getStateField(checkpointState[], slot)
quit 1
if config.finalizedCheckpointBlock.isNone: if config.finalizedCheckpointBlock.isNone:
if getStateField(checkpointState[], slot) > 0: if getStateField(checkpointState[], slot) > 0:
fatal "Specifying a non-genesis --finalized-checkpoint-state requires specifying --finalized-checkpoint-block as well" fatal "Specifying a non-genesis --finalized-checkpoint-state requires specifying --finalized-checkpoint-block as well"
@ -489,6 +494,12 @@ proc init*(T: type BeaconNode,
except IOError as err: except IOError as err:
fatal "Failed to load the checkpoint block", err = err.msg fatal "Failed to load the checkpoint block", err = err.msg
quit 1 quit 1
if not checkpointBlock.slot.is_epoch:
fatal "--finalized-checkpoint-block must point to a block for an epoch slot",
slot = checkpointBlock.slot
quit 1
elif config.finalizedCheckpointBlock.isSome: elif config.finalizedCheckpointBlock.isSome:
# TODO We can download the state from somewhere in the future relying # TODO We can download the state from somewhere in the future relying
# on the trusted `state_root` appearing in the checkpoint block. # on the trusted `state_root` appearing in the checkpoint block.