github.com/palisadeinc/bor@v0.0.0-20230615125219-ab7196213d15/consensus/bor/heimdallapp/span.go (about) 1 package heimdallapp 2 3 import ( 4 "context" 5 6 hmTypes "github.com/maticnetwork/heimdall/types" 7 8 "github.com/ethereum/go-ethereum/consensus/bor/heimdall/span" 9 "github.com/ethereum/go-ethereum/consensus/bor/valset" 10 "github.com/ethereum/go-ethereum/log" 11 ) 12 13 func (h *HeimdallAppClient) Span(ctx context.Context, spanID uint64) (*span.HeimdallSpan, error) { 14 log.Info("Fetching span", "spanID", spanID) 15 16 res, err := h.hApp.BorKeeper.GetSpan(h.NewContext(), spanID) 17 if err != nil { 18 return nil, err 19 } 20 21 log.Info("Fetched span", "spanID", spanID) 22 23 return toSpan(res), nil 24 } 25 26 func toSpan(hdSpan *hmTypes.Span) *span.HeimdallSpan { 27 return &span.HeimdallSpan{ 28 Span: span.Span{ 29 ID: hdSpan.ID, 30 StartBlock: hdSpan.StartBlock, 31 EndBlock: hdSpan.EndBlock, 32 }, 33 ValidatorSet: toValidatorSet(hdSpan.ValidatorSet), 34 SelectedProducers: toValidators(hdSpan.SelectedProducers), 35 ChainID: hdSpan.ChainID, 36 } 37 } 38 39 func toValidatorSet(vs hmTypes.ValidatorSet) valset.ValidatorSet { 40 return valset.ValidatorSet{ 41 Validators: toValidatorsRef(vs.Validators), 42 Proposer: toValidatorRef(vs.Proposer), 43 } 44 } 45 46 func toValidators(vs []hmTypes.Validator) []valset.Validator { 47 newVS := make([]valset.Validator, len(vs)) 48 49 for i, v := range vs { 50 newVS[i] = toValidator(v) 51 } 52 53 return newVS 54 } 55 56 func toValidatorsRef(vs []*hmTypes.Validator) []*valset.Validator { 57 newVS := make([]*valset.Validator, len(vs)) 58 59 for i, v := range vs { 60 if v == nil { 61 continue 62 } 63 64 newVS[i] = toValidatorRef(v) 65 } 66 67 return newVS 68 } 69 70 func toValidatorRef(v *hmTypes.Validator) *valset.Validator { 71 return &valset.Validator{ 72 ID: v.ID.Uint64(), 73 Address: v.Signer.EthAddress(), 74 VotingPower: v.VotingPower, 75 ProposerPriority: v.ProposerPriority, 76 } 77 } 78 79 func toValidator(v hmTypes.Validator) valset.Validator { 80 return valset.Validator{ 81 ID: v.ID.Uint64(), 82 Address: v.Signer.EthAddress(), 83 VotingPower: v.VotingPower, 84 ProposerPriority: v.ProposerPriority, 85 } 86 }