Skip to content

Commit

Permalink
fixup! fix(drand): add null HistoricalBeaconClient for old beacons
Browse files Browse the repository at this point in the history
  • Loading branch information
rvagg committed Jan 20, 2025
1 parent d5899e1 commit 5ed9f6c
Showing 1 changed file with 15 additions and 11 deletions.
26 changes: 15 additions & 11 deletions chain/beacon/drand/drand.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,9 +102,6 @@ func NewDrandBeacon(genesisTs, interval uint64, ps *pubsub.PubSub, config dtypes
hc.(DrandHTTPClient).SetUserAgent("drand-client-lotus/" + build.NodeBuildVersion)
clients = append(clients, hc)
}
if len(clients) == 0 {
clients = append(clients, HistoricalBeaconClient{})
}

opts := []dclient.Option{
dclient.WithChainInfo(drandChain),
Expand All @@ -116,6 +113,13 @@ func NewDrandBeacon(genesisTs, interval uint64, ps *pubsub.PubSub, config dtypes
opts = append(opts, gclient.WithPubsub(ps))
} else {
log.Info("drand beacon without pubsub")
if len(clients) == 0 {
historicalClient := &historicalBeaconClient{}
clients = append(clients, historicalClient)
opts = append(opts, dclient.WithWatcher(func(chainInfo *dchain.Info, cache dclient.Cache) (dclient.Watcher, error) {
return historicalClient, nil
}))
}
}

client, err := dclient.Wrap(clients, opts...)
Expand Down Expand Up @@ -254,30 +258,30 @@ func BeaconScheduleFromDrandSchedule(dcs dtypes.DrandSchedule, genesisTime uint6
return shd, nil
}

var _ dclient.Client = HistoricalBeaconClient{}
var _ dclient.Client = historicalBeaconClient{}

// HistoricalBeaconClient is a drand client that doesn't actually do anything. It's used when
// historicalBeaconClient is a drand client that doesn't actually do anything. It's used when
// we don't have a drand network to connect to but still need to provide a beacon client.
// We don't expect calls through to the client to be made since we should only be verifying old
// randomness, not fetching it.
type HistoricalBeaconClient struct{}
type historicalBeaconClient struct{}

func (h HistoricalBeaconClient) Get(ctx context.Context, round uint64) (dclient.Result, error) {
func (h historicalBeaconClient) Get(ctx context.Context, round uint64) (dclient.Result, error) {
return nil, xerrors.Errorf("no historical randomness available")
}

func (h HistoricalBeaconClient) Watch(ctx context.Context) <-chan dclient.Result {
func (h historicalBeaconClient) Watch(ctx context.Context) <-chan dclient.Result {
return nil
}

func (h HistoricalBeaconClient) Info(ctx context.Context) (*dchain.Info, error) {
func (h historicalBeaconClient) Info(ctx context.Context) (*dchain.Info, error) {
return nil, xerrors.Errorf("no historical randomness available")
}

func (h HistoricalBeaconClient) RoundAt(time.Time) uint64 {
func (h historicalBeaconClient) RoundAt(time.Time) uint64 {
return 0
}

func (h HistoricalBeaconClient) Close() error {
func (h historicalBeaconClient) Close() error {
return nil
}

0 comments on commit 5ed9f6c

Please sign in to comment.