Skip to content

Commit 13160be

Browse files
authored
Add support for Electra (#613)
1 parent a1639c4 commit 13160be

File tree

17 files changed

+549
-434
lines changed

17 files changed

+549
-434
lines changed

.github/workflows/checks.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,13 @@ jobs:
4747
uses: actions/checkout@v3
4848

4949
- name: Install gofumpt
50-
run: go install mvdan.cc/gofumpt@v0.4.0
50+
run: go install mvdan.cc/gofumpt@v0.7.0
5151

5252
- name: Install staticcheck
53-
run: go install honnef.co/go/tools/cmd/staticcheck@v0.5.1
53+
run: go install honnef.co/go/tools/cmd/staticcheck@v0.6.0
5454

5555
- name: Install golangci-lint
56-
run: go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.60.1
56+
run: go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.64.5
5757

5858
- name: Lint
5959
run: make lint

.golangci.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ linters-settings:
6565
replace-allow-list:
6666
- github.com/attestantio/go-builder-client
6767
- github.com/attestantio/go-eth2-client
68+
- github.com/ethereum/go-ethereum
6869

6970
maintidx:
7071
under: 5

common/types.go

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/attestantio/go-eth2-client/spec/bellatrix"
1313
"github.com/attestantio/go-eth2-client/spec/capella"
1414
"github.com/attestantio/go-eth2-client/spec/deneb"
15+
"github.com/attestantio/go-eth2-client/spec/electra"
1516
"github.com/attestantio/go-eth2-client/spec/phase0"
1617
ssz "github.com/ferranbt/fastssz"
1718
boostSsz "github.com/flashbots/go-boost-utils/ssz"
@@ -52,9 +53,15 @@ var (
5253
DenebForkVersionGoerli = "0x04001020"
5354
DenebForkVersionMainnet = "0x04000000"
5455

56+
ElectraForkVersionHolesky = "0x06017000"
57+
ElectraForkVersionSepolia = "0x90000074"
58+
ElectraForkVersionGoerli = "0x05001020"
59+
ElectraForkVersionMainnet = "0x05000000"
60+
5561
ForkVersionStringBellatrix = "bellatrix"
5662
ForkVersionStringCapella = "capella"
5763
ForkVersionStringDeneb = "deneb"
64+
ForkVersionStringElectra = "electra"
5865
)
5966

6067
type EthNetworkDetails struct {
@@ -64,11 +71,13 @@ type EthNetworkDetails struct {
6471
BellatrixForkVersionHex string
6572
CapellaForkVersionHex string
6673
DenebForkVersionHex string
74+
ElectraForkVersionHex string
6775

6876
DomainBuilder phase0.Domain
6977
DomainBeaconProposerBellatrix phase0.Domain
7078
DomainBeaconProposerCapella phase0.Domain
7179
DomainBeaconProposerDeneb phase0.Domain
80+
DomainBeaconProposerElectra phase0.Domain
7281
}
7382

7483
func NewEthNetworkDetails(networkName string) (ret *EthNetworkDetails, err error) {
@@ -77,10 +86,12 @@ func NewEthNetworkDetails(networkName string) (ret *EthNetworkDetails, err error
7786
var bellatrixForkVersion string
7887
var capellaForkVersion string
7988
var denebForkVersion string
89+
var electraForkVersion string
8090
var domainBuilder phase0.Domain
8191
var domainBeaconProposerBellatrix phase0.Domain
8292
var domainBeaconProposerCapella phase0.Domain
8393
var domainBeaconProposerDeneb phase0.Domain
94+
var domainBeaconProposerElectra phase0.Domain
8495

8596
switch networkName {
8697
case EthNetworkHolesky:
@@ -89,30 +100,35 @@ func NewEthNetworkDetails(networkName string) (ret *EthNetworkDetails, err error
89100
bellatrixForkVersion = BellatrixForkVersionHolesky
90101
capellaForkVersion = CapellaForkVersionHolesky
91102
denebForkVersion = DenebForkVersionHolesky
103+
electraForkVersion = ElectraForkVersionHolesky
92104
case EthNetworkSepolia:
93105
genesisForkVersion = GenesisForkVersionSepolia
94106
genesisValidatorsRoot = GenesisValidatorsRootSepolia
95107
bellatrixForkVersion = BellatrixForkVersionSepolia
96108
capellaForkVersion = CapellaForkVersionSepolia
97109
denebForkVersion = DenebForkVersionSepolia
110+
electraForkVersion = ElectraForkVersionSepolia
98111
case EthNetworkGoerli:
99112
genesisForkVersion = GenesisForkVersionGoerli
100113
genesisValidatorsRoot = GenesisValidatorsRootGoerli
101114
bellatrixForkVersion = BellatrixForkVersionGoerli
102115
capellaForkVersion = CapellaForkVersionGoerli
103116
denebForkVersion = DenebForkVersionGoerli
117+
electraForkVersion = ElectraForkVersionGoerli
104118
case EthNetworkMainnet:
105119
genesisForkVersion = GenesisForkVersionMainnet
106120
genesisValidatorsRoot = GenesisValidatorsRootMainnet
107121
bellatrixForkVersion = BellatrixForkVersionMainnet
108122
capellaForkVersion = CapellaForkVersionMainnet
109123
denebForkVersion = DenebForkVersionMainnet
124+
electraForkVersion = ElectraForkVersionMainnet
110125
case EthNetworkCustom:
111126
genesisForkVersion = os.Getenv("GENESIS_FORK_VERSION")
112127
genesisValidatorsRoot = os.Getenv("GENESIS_VALIDATORS_ROOT")
113128
bellatrixForkVersion = os.Getenv("BELLATRIX_FORK_VERSION")
114129
capellaForkVersion = os.Getenv("CAPELLA_FORK_VERSION")
115130
denebForkVersion = os.Getenv("DENEB_FORK_VERSION")
131+
electraForkVersion = os.Getenv("ELECTRA_FORK_VERSION")
116132
default:
117133
return nil, fmt.Errorf("%w: %s", ErrUnknownNetwork, networkName)
118134
}
@@ -137,44 +153,55 @@ func NewEthNetworkDetails(networkName string) (ret *EthNetworkDetails, err error
137153
return nil, err
138154
}
139155

156+
domainBeaconProposerElectra, err = ComputeDomain(boostSsz.DomainTypeBeaconProposer, electraForkVersion, genesisValidatorsRoot)
157+
if err != nil {
158+
return nil, err
159+
}
160+
140161
return &EthNetworkDetails{
141162
Name: networkName,
142163
GenesisForkVersionHex: genesisForkVersion,
143164
GenesisValidatorsRootHex: genesisValidatorsRoot,
144165
BellatrixForkVersionHex: bellatrixForkVersion,
145166
CapellaForkVersionHex: capellaForkVersion,
146167
DenebForkVersionHex: denebForkVersion,
168+
ElectraForkVersionHex: electraForkVersion,
147169
DomainBuilder: domainBuilder,
148170
DomainBeaconProposerBellatrix: domainBeaconProposerBellatrix,
149171
DomainBeaconProposerCapella: domainBeaconProposerCapella,
150172
DomainBeaconProposerDeneb: domainBeaconProposerDeneb,
173+
DomainBeaconProposerElectra: domainBeaconProposerElectra,
151174
}, nil
152175
}
153176

154177
func (e *EthNetworkDetails) String() string {
155178
return fmt.Sprintf(
156179
`EthNetworkDetails{
157-
Name: %s,
158-
GenesisForkVersionHex: %s,
180+
Name: %s,
181+
GenesisForkVersionHex: %s,
159182
GenesisValidatorsRootHex: %s,
160-
BellatrixForkVersionHex: %s,
161-
CapellaForkVersionHex: %s,
183+
BellatrixForkVersionHex: %s,
184+
CapellaForkVersionHex: %s,
162185
DenebForkVersionHex: %s,
163-
DomainBuilder: %x,
164-
DomainBeaconProposerBellatrix: %x,
165-
DomainBeaconProposerCapella: %x,
186+
ElectraForkVersionHex: %s,
187+
DomainBuilder: %x,
188+
DomainBeaconProposerBellatrix: %x,
189+
DomainBeaconProposerCapella: %x,
166190
DomainBeaconProposerDeneb: %x
191+
DomainBeaconProposerElectra: %x
167192
}`,
168193
e.Name,
169194
e.GenesisForkVersionHex,
170195
e.GenesisValidatorsRootHex,
171196
e.BellatrixForkVersionHex,
172197
e.CapellaForkVersionHex,
173198
e.DenebForkVersionHex,
199+
e.ElectraForkVersionHex,
174200
e.DomainBuilder,
175201
e.DomainBeaconProposerBellatrix,
176202
e.DomainBeaconProposerCapella,
177-
e.DomainBeaconProposerDeneb)
203+
e.DomainBeaconProposerDeneb,
204+
e.DomainBeaconProposerElectra)
178205
}
179206

180207
type PubkeyHex string
@@ -414,6 +441,9 @@ type BlockSubmissionInfo struct {
414441
Blobs []deneb.Blob
415442
BlobGasUsed uint64
416443
ExcessBlobGas uint64
444+
DepositRequests []*electra.DepositRequest
445+
WithdrawalRequests []*electra.WithdrawalRequest
446+
ConsolidationRequests []*electra.ConsolidationRequest
417447
}
418448

419449
/*
@@ -425,6 +455,8 @@ which is sufficient data to set the bid of the builder. The `Transactions`
425455
and `Withdrawals` fields are required to construct the full SignedBeaconBlock
426456
and are parsed asynchronously.
427457
458+
TODO(JWT): Does this need to be updated? It hasn't been updated for Deneb.
459+
428460
Header only layout:
429461
[000-236) = Message (236 bytes)
430462
[236-240) = offset1 ( 4 bytes)

0 commit comments

Comments
 (0)