github.com/palisadeinc/bor@v0.0.0-20230615125219-ab7196213d15/consensus/bor/heimdallgrpc/span.go (about) 1 package heimdallgrpc 2 3 import ( 4 "context" 5 6 "github.com/ethereum/go-ethereum/consensus/bor/heimdall/span" 7 "github.com/ethereum/go-ethereum/consensus/bor/valset" 8 "github.com/ethereum/go-ethereum/log" 9 10 proto "github.com/maticnetwork/polyproto/heimdall" 11 protoutils "github.com/maticnetwork/polyproto/utils" 12 ) 13 14 func (h *HeimdallGRPCClient) Span(ctx context.Context, spanID uint64) (*span.HeimdallSpan, error) { 15 req := &proto.SpanRequest{ 16 ID: spanID, 17 } 18 19 log.Info("Fetching span", "spanID", spanID) 20 21 res, err := h.client.Span(ctx, req) 22 if err != nil { 23 return nil, err 24 } 25 26 log.Info("Fetched span", "spanID", spanID) 27 28 return parseSpan(res.Result), nil 29 } 30 31 func parseSpan(protoSpan *proto.Span) *span.HeimdallSpan { 32 resp := &span.HeimdallSpan{ 33 Span: span.Span{ 34 ID: protoSpan.ID, 35 StartBlock: protoSpan.StartBlock, 36 EndBlock: protoSpan.EndBlock, 37 }, 38 ValidatorSet: valset.ValidatorSet{}, 39 SelectedProducers: []valset.Validator{}, 40 ChainID: protoSpan.ChainID, 41 } 42 43 for _, validator := range protoSpan.ValidatorSet.Validators { 44 resp.ValidatorSet.Validators = append(resp.ValidatorSet.Validators, parseValidator(validator)) 45 } 46 47 resp.ValidatorSet.Proposer = parseValidator(protoSpan.ValidatorSet.Proposer) 48 49 for _, validator := range protoSpan.SelectedProducers { 50 resp.SelectedProducers = append(resp.SelectedProducers, *parseValidator(validator)) 51 } 52 53 return resp 54 } 55 56 func parseValidator(validator *proto.Validator) *valset.Validator { 57 return &valset.Validator{ 58 ID: validator.ID, 59 Address: protoutils.ConvertH160toAddress(validator.Address), 60 VotingPower: validator.VotingPower, 61 ProposerPriority: validator.ProposerPriority, 62 } 63 }