44 "encoding/json"
55 "fmt"
66 "net/http"
7+ "os"
78 "time"
89
910 "github.com/attestantio/go-eth2-client/spec/capella"
@@ -16,14 +17,26 @@ import (
1617type ProdBeaconInstance struct {
1718 log * logrus.Entry
1819 beaconURI string
20+
21+ // feature flags
22+ ffUseV2PublishBlockEndpoint bool
1923}
2024
2125func NewProdBeaconInstance (log * logrus.Entry , beaconURI string ) * ProdBeaconInstance {
2226 _log := log .WithFields (logrus.Fields {
2327 "component" : "beaconInstance" ,
2428 "beaconURI" : beaconURI ,
2529 })
26- return & ProdBeaconInstance {_log , beaconURI }
30+
31+ client := & ProdBeaconInstance {_log , beaconURI , false }
32+
33+ // feature flags
34+ if os .Getenv ("USE_V2_PUBLISH_BLOCK_ENDPOINT" ) != "" {
35+ _log .Warn ("env: USE_V2_PUBLISH_BLOCK_ENDPOINT: use the v2 publish block endpoint" )
36+ client .ffUseV2PublishBlockEndpoint = true
37+ }
38+
39+ return client
2740}
2841
2942// HeadEventData represents the data of a head event
@@ -257,9 +270,14 @@ func (c *ProdBeaconInstance) GetURI() string {
257270}
258271
259272func (c * ProdBeaconInstance ) PublishBlock (block * common.SignedBeaconBlock , broadcastMode BroadcastMode ) (code int , err error ) {
260- uri := fmt .Sprintf ("%s/eth/v2/beacon/blocks?broadcast_validation=%s" , c .beaconURI , broadcastMode .String ())
273+ var uri string
274+ if c .ffUseV2PublishBlockEndpoint {
275+ uri = fmt .Sprintf ("%s/eth/v2/beacon/blocks?broadcast_validation=%s" , c .beaconURI , broadcastMode .String ())
276+ } else {
277+ uri = fmt .Sprintf ("%s/eth/v1/beacon/blocks" , c .beaconURI )
278+ }
261279 headers := http.Header {}
262- headers .Add ("Eth-Consensus-Version" , common .ForkVersionStringCapella )
280+ headers .Add ("Eth-Consensus-Version" , common .ForkVersionStringCapella ) // optional in v1, required in v2
263281 return fetchBeacon (http .MethodPost , uri , block , nil , nil , headers )
264282}
265283
0 commit comments