github.com/ari-anchor/sei-tendermint@v0.0.0-20230519144642-dc826b7b56bb/types/protobuf.go (about) 1 package types 2 3 import ( 4 abci "github.com/ari-anchor/sei-tendermint/abci/types" 5 "github.com/ari-anchor/sei-tendermint/crypto/encoding" 6 ) 7 8 //------------------------------------------------------- 9 10 // TM2PB is used for converting Tendermint ABCI to protobuf ABCI. 11 // UNSTABLE 12 var TM2PB = tm2pb{} 13 14 type tm2pb struct{} 15 16 func (tm2pb) Validator(val *Validator) abci.Validator { 17 return abci.Validator{ 18 Address: val.PubKey.Address(), 19 Power: val.VotingPower, 20 } 21 } 22 23 // XXX: panics on unknown pubkey type 24 func (tm2pb) ValidatorUpdate(val *Validator) abci.ValidatorUpdate { 25 pk, err := encoding.PubKeyToProto(val.PubKey) 26 if err != nil { 27 panic(err) 28 } 29 return abci.ValidatorUpdate{ 30 PubKey: pk, 31 Power: val.VotingPower, 32 } 33 } 34 35 // XXX: panics on nil or unknown pubkey type 36 func (tm2pb) ValidatorUpdates(vals *ValidatorSet) []abci.ValidatorUpdate { 37 validators := make([]abci.ValidatorUpdate, vals.Size()) 38 for i, val := range vals.Validators { 39 validators[i] = TM2PB.ValidatorUpdate(val) 40 } 41 return validators 42 } 43 44 //---------------------------------------------------------------------------- 45 46 // PB2TM is used for converting protobuf ABCI to Tendermint ABCI. 47 // UNSTABLE 48 var PB2TM = pb2tm{} 49 50 type pb2tm struct{} 51 52 func (pb2tm) ValidatorUpdates(vals []abci.ValidatorUpdate) ([]*Validator, error) { 53 tmVals := make([]*Validator, len(vals)) 54 for i, v := range vals { 55 pub, err := encoding.PubKeyFromProto(v.PubKey) 56 if err != nil { 57 return nil, err 58 } 59 tmVals[i] = NewValidator(pub, v.Power) 60 } 61 return tmVals, nil 62 }