|
|
- package types
-
- import (
- abci "github.com/tendermint/tendermint/abci/types"
- cryptoenc "github.com/tendermint/tendermint/crypto/encoding"
- )
-
- //-------------------------------------------------------
-
- // TM2PB is used for converting Tendermint ABCI to protobuf ABCI.
- // UNSTABLE
- var TM2PB = tm2pb{}
-
- type tm2pb struct{}
-
- func (tm2pb) Validator(val *Validator) abci.Validator {
- return abci.Validator{
- Address: val.PubKey.Address(),
- Power: val.VotingPower,
- }
- }
-
- // XXX: panics on unknown pubkey type
- func (tm2pb) ValidatorUpdate(val *Validator) abci.ValidatorUpdate {
- pk, err := cryptoenc.PubKeyToProto(val.PubKey)
- if err != nil {
- panic(err)
- }
- return abci.ValidatorUpdate{
- PubKey: pk,
- Power: val.VotingPower,
- }
- }
-
- // XXX: panics on nil or unknown pubkey type
- func (tm2pb) ValidatorUpdates(vals *ValidatorSet) []abci.ValidatorUpdate {
- validators := make([]abci.ValidatorUpdate, vals.Size())
- for i, val := range vals.Validators {
- validators[i] = TM2PB.ValidatorUpdate(val)
- }
- return validators
- }
-
- //----------------------------------------------------------------------------
-
- // PB2TM is used for converting protobuf ABCI to Tendermint ABCI.
- // UNSTABLE
- var PB2TM = pb2tm{}
-
- type pb2tm struct{}
-
- func (pb2tm) ValidatorUpdates(vals []abci.ValidatorUpdate) ([]*Validator, error) {
- tmVals := make([]*Validator, len(vals))
- for i, v := range vals {
- pub, err := cryptoenc.PubKeyFromProto(v.PubKey)
- if err != nil {
- return nil, err
- }
- tmVals[i] = NewValidator(pub, v.Power)
- }
- return tmVals, nil
- }
|