github.com/badrootd/celestia-core@v0.0.0-20240305091328-aa4207a4b25d/types/protobuf.go (about) 1 package types 2 3 import ( 4 abci "github.com/badrootd/celestia-core/abci/types" 5 "github.com/badrootd/celestia-core/crypto" 6 cryptoenc "github.com/badrootd/celestia-core/crypto/encoding" 7 cmtproto "github.com/badrootd/celestia-core/proto/tendermint/types" 8 ) 9 10 //------------------------------------------------------- 11 12 // TM2PB is used for converting CometBFT ABCI to protobuf ABCI. 13 // UNSTABLE 14 var TM2PB = tm2pb{} 15 16 type tm2pb struct{} 17 18 func (tm2pb) Header(header *Header) cmtproto.Header { 19 return cmtproto.Header{ 20 Version: header.Version, 21 ChainID: header.ChainID, 22 Height: header.Height, 23 Time: header.Time, 24 25 LastBlockId: header.LastBlockID.ToProto(), 26 27 LastCommitHash: header.LastCommitHash, 28 DataHash: header.DataHash, 29 30 ValidatorsHash: header.ValidatorsHash, 31 NextValidatorsHash: header.NextValidatorsHash, 32 ConsensusHash: header.ConsensusHash, 33 AppHash: header.AppHash, 34 LastResultsHash: header.LastResultsHash, 35 36 EvidenceHash: header.EvidenceHash, 37 ProposerAddress: header.ProposerAddress, 38 } 39 } 40 41 func (tm2pb) Validator(val *Validator) abci.Validator { 42 return abci.Validator{ 43 Address: val.PubKey.Address(), 44 Power: val.VotingPower, 45 } 46 } 47 48 func (tm2pb) BlockID(blockID BlockID) cmtproto.BlockID { 49 return cmtproto.BlockID{ 50 Hash: blockID.Hash, 51 PartSetHeader: TM2PB.PartSetHeader(blockID.PartSetHeader), 52 } 53 } 54 55 func (tm2pb) PartSetHeader(header PartSetHeader) cmtproto.PartSetHeader { 56 return cmtproto.PartSetHeader{ 57 Total: header.Total, 58 Hash: header.Hash, 59 } 60 } 61 62 // XXX: panics on unknown pubkey type 63 func (tm2pb) ValidatorUpdate(val *Validator) abci.ValidatorUpdate { 64 pk, err := cryptoenc.PubKeyToProto(val.PubKey) 65 if err != nil { 66 panic(err) 67 } 68 return abci.ValidatorUpdate{ 69 PubKey: pk, 70 Power: val.VotingPower, 71 } 72 } 73 74 // XXX: panics on nil or unknown pubkey type 75 func (tm2pb) ValidatorUpdates(vals *ValidatorSet) []abci.ValidatorUpdate { 76 validators := make([]abci.ValidatorUpdate, vals.Size()) 77 for i, val := range vals.Validators { 78 validators[i] = TM2PB.ValidatorUpdate(val) 79 } 80 return validators 81 } 82 83 // XXX: panics on nil or unknown pubkey type 84 func (tm2pb) NewValidatorUpdate(pubkey crypto.PubKey, power int64) abci.ValidatorUpdate { 85 pubkeyABCI, err := cryptoenc.PubKeyToProto(pubkey) 86 if err != nil { 87 panic(err) 88 } 89 return abci.ValidatorUpdate{ 90 PubKey: pubkeyABCI, 91 Power: power, 92 } 93 } 94 95 //---------------------------------------------------------------------------- 96 97 // PB2TM is used for converting protobuf ABCI to CometBFT ABCI. 98 // UNSTABLE 99 var PB2TM = pb2tm{} 100 101 type pb2tm struct{} 102 103 func (pb2tm) ValidatorUpdates(vals []abci.ValidatorUpdate) ([]*Validator, error) { 104 tmVals := make([]*Validator, len(vals)) 105 for i, v := range vals { 106 pub, err := cryptoenc.PubKeyFromProto(v.PubKey) 107 if err != nil { 108 return nil, err 109 } 110 tmVals[i] = NewValidator(pub, v.Power) 111 } 112 return tmVals, nil 113 }