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  }