Skip to content

Commit 83335a1

Browse files
committed
feat: validate el timestamp
1 parent b0c7e5c commit 83335a1

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

cl/blockbuilder/blockbuilder.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,13 @@ func (bb *BlockBuilder) loadExecutionHead(ctx context.Context) (*types.Execution
544544
return nil, fmt.Errorf("failed to get the latest block header: %w", err)
545545
}
546546

547+
if !IsTimestampInUnixMilli(header.Time) {
548+
return nil, fmt.Errorf(
549+
"invalid header.Time from EL: %d, must be in unix milliseconds",
550+
header.Time,
551+
)
552+
}
553+
547554
bb.executionHead = &types.ExecutionHead{
548555
BlockHeight: header.Number.Uint64(),
549556
BlockHash: header.Hash().Bytes(),
@@ -570,3 +577,10 @@ func (bb *BlockBuilder) GetMempoolStatus(ctx context.Context) (*MempoolStatus, e
570577
}
571578
return &result, nil
572579
}
580+
581+
func IsTimestampInUnixMilli(timestamp uint64) bool {
582+
const oneYear = time.Duration(365 * 24 * time.Hour)
583+
lowerBound := uint64(time.Now().Add(-10 * oneYear).UnixMilli())
584+
upperBound := uint64(time.Now().Add(10 * oneYear).UnixMilli())
585+
return timestamp > lowerBound && timestamp < upperBound
586+
}

cl/blockbuilder/blockbuilder_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,3 +652,22 @@ func matchPayloadAttributes(expectedHash common.Hash, executionHeadTime uint64)
652652
return true
653653
}
654654
}
655+
656+
func TestIsTimestampInUnixMilli(t *testing.T) {
657+
var nineYears = time.Duration(9 * 365 * 24 * time.Hour)
658+
assert.True(t, IsTimestampInUnixMilli(uint64(time.Now().UnixMilli())))
659+
assert.True(t, IsTimestampInUnixMilli(uint64(time.Now().Add(-nineYears).UnixMilli())))
660+
assert.True(t, IsTimestampInUnixMilli(uint64(time.Now().Add(nineYears).UnixMilli())))
661+
662+
assert.False(t, IsTimestampInUnixMilli(uint64(time.Now().Unix())))
663+
assert.False(t, IsTimestampInUnixMilli(uint64(time.Now().Add(-nineYears).Unix())))
664+
assert.False(t, IsTimestampInUnixMilli(uint64(time.Now().Add(nineYears).Unix())))
665+
666+
assert.False(t, IsTimestampInUnixMilli(uint64(time.Now().UnixMicro())))
667+
assert.False(t, IsTimestampInUnixMilli(uint64(time.Now().Add(nineYears).UnixMicro())))
668+
assert.False(t, IsTimestampInUnixMilli(uint64(time.Now().Add(-nineYears).UnixMicro())))
669+
670+
assert.False(t, IsTimestampInUnixMilli(uint64(time.Now().UnixNano())))
671+
assert.False(t, IsTimestampInUnixMilli(uint64(time.Now().Add(nineYears).UnixNano())))
672+
assert.False(t, IsTimestampInUnixMilli(uint64(time.Now().Add(-nineYears).UnixNano())))
673+
}

0 commit comments

Comments
 (0)