package full import ( "context" "fmt" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/lotus/chain/beacon" "github.com/filecoin-project/lotus/chain/types" "go.uber.org/fx" ) type BeaconAPI struct { fx.In Beacon beacon.RandomBeacon } func (a *BeaconAPI) BeaconGetEntry(ctx context.Context, epoch abi.ChainEpoch) (*types.BeaconEntry, error) { rr := a.Beacon.MaxBeaconRoundForEpoch(epoch, types.BeaconEntry{}) e := a.Beacon.Entry(ctx, rr) select { case be, ok := <-e: if !ok { return nil, fmt.Errorf("beacon get returned no value") } if be.Err != nil { return nil, be.Err } return &be.Entry, nil case <-ctx.Done(): return nil, ctx.Err() } }