mirror of
https://github.com/tendermint/tendermint.git
synced 2026-02-06 03:50:46 +00:00
Merge branch 'master' into marko/int64-
This commit is contained in:
@@ -5,6 +5,8 @@ import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto/ed25519"
|
||||
"github.com/tendermint/tendermint/crypto/secp256k1"
|
||||
"github.com/tendermint/tendermint/crypto/tmhash"
|
||||
tmstrings "github.com/tendermint/tendermint/libs/strings"
|
||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
||||
@@ -19,8 +21,16 @@ const (
|
||||
|
||||
// MaxBlockPartsCount is the maximum number of block parts.
|
||||
MaxBlockPartsCount = (MaxBlockSizeBytes / BlockPartSizeBytes) + 1
|
||||
|
||||
ABCIPubKeyTypeEd25519 = ed25519.KeyType
|
||||
ABCIPubKeyTypeSecp256k1 = secp256k1.KeyType
|
||||
)
|
||||
|
||||
var ABCIPubKeyTypesToNames = map[string]string{
|
||||
ABCIPubKeyTypeEd25519: ed25519.PubKeyName,
|
||||
ABCIPubKeyTypeSecp256k1: secp256k1.PubKeyName,
|
||||
}
|
||||
|
||||
// ConsensusParams contains consensus critical parameters that determine the
|
||||
// validity of blocks.
|
||||
type ConsensusParams struct {
|
||||
|
||||
@@ -2,28 +2,9 @@ package types
|
||||
|
||||
import (
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
"github.com/tendermint/tendermint/crypto/ed25519"
|
||||
cryptoenc "github.com/tendermint/tendermint/crypto/encoding"
|
||||
"github.com/tendermint/tendermint/crypto/secp256k1"
|
||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
||||
)
|
||||
|
||||
//-------------------------------------------------------
|
||||
// Use strings to distinguish types in ABCI messages
|
||||
|
||||
const (
|
||||
ABCIPubKeyTypeEd25519 = ed25519.KeyType
|
||||
ABCIPubKeyTypeSecp256k1 = secp256k1.KeyType
|
||||
)
|
||||
|
||||
// TODO: Make non-global by allowing for registration of more pubkey types
|
||||
|
||||
var ABCIPubKeyTypesToNames = map[string]string{
|
||||
ABCIPubKeyTypeEd25519: ed25519.PubKeyName,
|
||||
ABCIPubKeyTypeSecp256k1: secp256k1.PubKeyName,
|
||||
}
|
||||
|
||||
//-------------------------------------------------------
|
||||
|
||||
// TM2PB is used for converting Tendermint ABCI to protobuf ABCI.
|
||||
@@ -32,29 +13,6 @@ var TM2PB = tm2pb{}
|
||||
|
||||
type tm2pb struct{}
|
||||
|
||||
func (tm2pb) Header(header *Header) tmproto.Header {
|
||||
return tmproto.Header{
|
||||
Version: header.Version.ToProto(),
|
||||
ChainID: header.ChainID,
|
||||
Height: header.Height,
|
||||
Time: header.Time,
|
||||
|
||||
LastBlockId: header.LastBlockID.ToProto(),
|
||||
|
||||
LastCommitHash: header.LastCommitHash,
|
||||
DataHash: header.DataHash,
|
||||
|
||||
ValidatorsHash: header.ValidatorsHash,
|
||||
NextValidatorsHash: header.NextValidatorsHash,
|
||||
ConsensusHash: header.ConsensusHash,
|
||||
AppHash: header.AppHash,
|
||||
LastResultsHash: header.LastResultsHash,
|
||||
|
||||
EvidenceHash: header.EvidenceHash,
|
||||
ProposerAddress: header.ProposerAddress,
|
||||
}
|
||||
}
|
||||
|
||||
func (tm2pb) Validator(val *Validator) abci.Validator {
|
||||
return abci.Validator{
|
||||
Address: val.PubKey.Address(),
|
||||
@@ -62,20 +20,6 @@ func (tm2pb) Validator(val *Validator) abci.Validator {
|
||||
}
|
||||
}
|
||||
|
||||
func (tm2pb) BlockID(blockID BlockID) tmproto.BlockID {
|
||||
return tmproto.BlockID{
|
||||
Hash: blockID.Hash,
|
||||
PartSetHeader: TM2PB.PartSetHeader(blockID.PartSetHeader),
|
||||
}
|
||||
}
|
||||
|
||||
func (tm2pb) PartSetHeader(header PartSetHeader) tmproto.PartSetHeader {
|
||||
return tmproto.PartSetHeader{
|
||||
Total: header.Total,
|
||||
Hash: header.Hash,
|
||||
}
|
||||
}
|
||||
|
||||
// XXX: panics on unknown pubkey type
|
||||
func (tm2pb) ValidatorUpdate(val *Validator) abci.ValidatorUpdate {
|
||||
pk, err := cryptoenc.PubKeyToProto(val.PubKey)
|
||||
@@ -97,18 +41,6 @@ func (tm2pb) ValidatorUpdates(vals *ValidatorSet) []abci.ValidatorUpdate {
|
||||
return validators
|
||||
}
|
||||
|
||||
// XXX: panics on nil or unknown pubkey type
|
||||
func (tm2pb) NewValidatorUpdate(pubkey crypto.PubKey, power int64) abci.ValidatorUpdate {
|
||||
pubkeyABCI, err := cryptoenc.PubKeyToProto(pubkey)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return abci.ValidatorUpdate{
|
||||
PubKey: pubkeyABCI,
|
||||
Power: power,
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
// PB2TM is used for converting protobuf ABCI to Tendermint ABCI.
|
||||
|
||||
@@ -52,25 +52,6 @@ func TestABCIValidators(t *testing.T) {
|
||||
assert.Equal(t, tmValExpected, tmVals[0])
|
||||
}
|
||||
|
||||
type pubKeyEddie struct{}
|
||||
|
||||
func (pubKeyEddie) Address() Address { return []byte{} }
|
||||
func (pubKeyEddie) Bytes() []byte { return []byte{} }
|
||||
func (pubKeyEddie) VerifySignature(msg []byte, sig []byte) bool { return false }
|
||||
func (pubKeyEddie) Equals(crypto.PubKey) bool { return false }
|
||||
func (pubKeyEddie) String() string { return "" }
|
||||
func (pubKeyEddie) Type() string { return "pubKeyEddie" }
|
||||
|
||||
func TestABCIValidatorFromPubKeyAndPower(t *testing.T) {
|
||||
pubkey := ed25519.GenPrivKey().PubKey()
|
||||
|
||||
abciVal := TM2PB.NewValidatorUpdate(pubkey, 10)
|
||||
assert.Equal(t, int64(10), abciVal.Power)
|
||||
|
||||
assert.Panics(t, func() { TM2PB.NewValidatorUpdate(nil, 10) })
|
||||
assert.Panics(t, func() { TM2PB.NewValidatorUpdate(pubKeyEddie{}, 10) })
|
||||
}
|
||||
|
||||
func TestABCIValidatorWithoutPubKey(t *testing.T) {
|
||||
pkEd := ed25519.GenPrivKey().PubKey()
|
||||
|
||||
|
||||
@@ -991,16 +991,21 @@ func ValidatorSetFromProto(vp *tmproto.ValidatorSet) (*ValidatorSet, error) {
|
||||
return vals, vals.ValidateBasic()
|
||||
}
|
||||
|
||||
// ValidatorSetFromExistingValidators takes an existing array of validators and rebuilds
|
||||
// the exact same validator set that corresponds to it without changing the proposer priority or power
|
||||
// if any of the validators fail validate basic then an empty set is returned.
|
||||
// ValidatorSetFromExistingValidators takes an existing array of validators and
|
||||
// rebuilds the exact same validator set that corresponds to it without
|
||||
// changing the proposer priority or power if any of the validators fail
|
||||
// validate basic then an empty set is returned.
|
||||
func ValidatorSetFromExistingValidators(valz []*Validator) (*ValidatorSet, error) {
|
||||
if len(valz) == 0 {
|
||||
return nil, errors.New("validator set is empty")
|
||||
}
|
||||
for _, val := range valz {
|
||||
err := val.ValidateBasic()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("can't create validator set: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
vals := &ValidatorSet{
|
||||
Validators: valz,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user