forked from berachain/beacon-kit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhelpers.go
74 lines (67 loc) · 2.23 KB
/
helpers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// SPDX-License-Identifier: BUSL-1.1
//
// Copyright (C) 2024, Berachain Foundation. All rights reserved.
// Use of this software is governed by the Business Source License included
// in the LICENSE file of this repository and at www.mariadb.com/bsl11.
//
// ANY USE OF THE LICENSED WORK IN VIOLATION OF THIS LICENSE WILL AUTOMATICALLY
// TERMINATE YOUR RIGHTS UNDER THIS LICENSE FOR THE CURRENT AND ALL OTHER
// VERSIONS OF THE LICENSED WORK.
//
// THIS LICENSE DOES NOT GRANT YOU ANY RIGHT IN ANY TRADEMARK OR LOGO OF
// LICENSOR OR ITS AFFILIATES (PROVIDED THAT YOU MAY USE A TRADEMARK OR LOGO OF
// LICENSOR AS EXPRESSLY REQUIRED BY THIS LICENSE).
//
// TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
// AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
// EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
// TITLE.
package chain
import (
"github.com/berachain/beacon-kit/primitives/version"
)
// ActiveForkVersionForSlot returns the active fork version for a given slot.
func (c chainSpec[
DomainTypeT, EpochT, SlotT, CometBFTConfigT,
]) ActiveForkVersionForSlot(
slot SlotT,
) uint32 {
return c.ActiveForkVersionForEpoch(c.SlotToEpoch(slot))
}
// ActiveForkVersionForEpoch returns the active fork version for a given epoch.
func (c chainSpec[
DomainTypeT, EpochT, SlotT, CometBFTConfigT,
]) ActiveForkVersionForEpoch(
epoch EpochT,
) uint32 {
if epoch >= c.Data.ElectraForkEpoch {
return version.Electra
} else if epoch >= c.Data.DenebPlusForkEpoch {
return version.DenebPlus
}
return version.Deneb
}
// SlotToEpoch converts a slot to an epoch.
func (c chainSpec[
DomainTypeT, EpochT, SlotT, CometBFTConfigT,
]) SlotToEpoch(slot SlotT) EpochT {
//#nosec:G701 // realistically fine in practice.
return EpochT(uint64(slot) / c.SlotsPerEpoch())
}
// WithinDAPeriod checks if the block epoch is within
// MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS
// of the given current epoch.
func (c chainSpec[
DomainTypeT, EpochT, SlotT, CometBFTConfigT,
]) WithinDAPeriod(
block, current SlotT,
) bool {
return c.SlotToEpoch(
block,
)+EpochT(
c.MinEpochsForBlobsSidecarsRequest(),
) >= c.SlotToEpoch(
current,
)
}