github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/ethapi/abft_api.go (about) 1 package ethapi 2 3 import ( 4 "context" 5 6 "github.com/unicornultrafoundation/go-helios/native/idx" 7 8 "github.com/unicornultrafoundation/go-u2u/common/hexutil" 9 "github.com/unicornultrafoundation/go-u2u/rpc" 10 ) 11 12 // PublicAbftAPI provides an API to access consensus related information. 13 // It offers only methods that operate on public data that is freely available to anyone. 14 type PublicAbftAPI struct { 15 b Backend 16 } 17 18 // NewPublicAbftAPI creates a new SFC protocol API. 19 func NewPublicAbftAPI(b Backend) *PublicAbftAPI { 20 return &PublicAbftAPI{b} 21 } 22 23 func (s *PublicAbftAPI) GetValidators(ctx context.Context, epoch rpc.BlockNumber) (map[hexutil.Uint64]interface{}, error) { 24 bs, es, err := s.b.GetEpochBlockState(ctx, epoch) 25 if err != nil { 26 return nil, err 27 } 28 if es == nil { 29 return nil, nil 30 } 31 res := map[hexutil.Uint64]interface{}{} 32 for _, vid := range es.Validators.IDs() { 33 profiles := es.ValidatorProfiles 34 if epoch == rpc.PendingBlockNumber { 35 profiles = bs.NextValidatorProfiles 36 } 37 res[hexutil.Uint64(vid)] = map[string]interface{}{ 38 "weight": (*hexutil.Big)(profiles[vid].Weight), 39 "pubkey": profiles[vid].PubKey.String(), 40 } 41 } 42 return res, nil 43 } 44 45 // GetDowntime returns validator's downtime. 46 func (s *PublicAbftAPI) GetDowntime(ctx context.Context, validatorID hexutil.Uint) (map[string]interface{}, error) { 47 blocks, period, err := s.b.GetDowntime(ctx, idx.ValidatorID(validatorID)) 48 if err != nil { 49 return nil, err 50 } 51 return map[string]interface{}{ 52 "offlineBlocks": hexutil.Uint64(blocks), 53 "offlineTime": hexutil.Uint64(period), 54 }, nil 55 } 56 57 // GetEpochUptime returns validator's epoch uptime in nanoseconds. 58 func (s *PublicAbftAPI) GetEpochUptime(ctx context.Context, validatorID hexutil.Uint) (hexutil.Uint64, error) { 59 v, err := s.b.GetUptime(ctx, idx.ValidatorID(validatorID)) 60 if err != nil { 61 return 0, err 62 } 63 if v == nil { 64 return 0, nil 65 } 66 return hexutil.Uint64(v.Uint64()), nil 67 } 68 69 // GetOriginatedEpochFee returns validator's originated epoch fee. 70 func (s *PublicAbftAPI) GetOriginatedEpochFee(ctx context.Context, validatorID hexutil.Uint) (*hexutil.Big, error) { 71 v, err := s.b.GetOriginatedFee(ctx, idx.ValidatorID(validatorID)) 72 if err != nil { 73 return nil, err 74 } 75 return (*hexutil.Big)(v), nil 76 }