use correct minimum size when reading block / state headers (#6263)
`sizeof` also includes padding between fields, while SSZ defines `fixedPortionSize` (on type) or `sszSize` (on value) to denote required bytes to encode. Switch forked block/state readers to SSZ size. As blocks/states are much larger than the padding, this doesn't affect practical use cases but is slightly more correct this way.
This commit is contained in:
parent
de740199f5
commit
0efc81d96d
|
@ -1360,19 +1360,19 @@ func readSszForkedHashedBeaconState*(cfg: RuntimeConfig, data: openArray[byte]):
|
|||
ForkedHashedBeaconState {.raises: [SerializationError].} =
|
||||
## Read a state picking the right fork by first reading the slot from the byte
|
||||
## source
|
||||
if data.len() < sizeof(BeaconStateHeader):
|
||||
raise (ref MalformedSszError)(msg: "Not enough data for BeaconState header")
|
||||
const numHeaderBytes = fixedPortionSize(BeaconStateHeader)
|
||||
if data.len() < numHeaderBytes:
|
||||
raise (ref MalformedSszError)(msg: "Incomplete BeaconState header")
|
||||
let header = SSZ.decode(
|
||||
data.toOpenArray(0, sizeof(BeaconStateHeader) - 1),
|
||||
BeaconStateHeader)
|
||||
data.toOpenArray(0, numHeaderBytes - 1), BeaconStateHeader)
|
||||
|
||||
# TODO https://github.com/nim-lang/Nim/issues/19357
|
||||
result = readSszForkedHashedBeaconState(cfg, header.slot, data)
|
||||
|
||||
type
|
||||
ForkedBeaconBlockHeader = object
|
||||
message*: uint32 # message offset
|
||||
signature*: ValidatorSig
|
||||
message: uint32 # message offset
|
||||
signature: ValidatorSig
|
||||
slot: Slot # start of BeaconBlock
|
||||
|
||||
func readSszForkedSignedBeaconBlock*(
|
||||
|
@ -1380,11 +1380,11 @@ func readSszForkedSignedBeaconBlock*(
|
|||
ForkedSignedBeaconBlock {.raises: [SerializationError].} =
|
||||
## Helper to read a header from bytes when it's not certain what kind of block
|
||||
## it is
|
||||
if data.len() < sizeof(ForkedBeaconBlockHeader):
|
||||
raise (ref MalformedSszError)(msg: "Not enough data for SignedBeaconBlock header")
|
||||
const numHeaderBytes = fixedPortionSize(ForkedBeaconBlockHeader)
|
||||
if data.len() < numHeaderBytes:
|
||||
raise (ref MalformedSszError)(msg: "Incomplete SignedBeaconBlock header")
|
||||
let header = SSZ.decode(
|
||||
data.toOpenArray(0, sizeof(ForkedBeaconBlockHeader) - 1),
|
||||
ForkedBeaconBlockHeader)
|
||||
data.toOpenArray(0, numHeaderBytes - 1), ForkedBeaconBlockHeader)
|
||||
|
||||
# TODO https://github.com/nim-lang/Nim/issues/19357
|
||||
result = ForkedSignedBeaconBlock(
|
||||
|
|
Loading…
Reference in New Issue