Merge PR #5682: Change pubkey to bytes

This commit is contained in:
Alexander Bezobchuk 2020-02-20 17:15:22 +01:00 committed by GitHub
parent ebbfaf2a47
commit 9b47079171
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 214 additions and 179 deletions

View File

@ -7,6 +7,7 @@ import (
"github.com/tendermint/tendermint/crypto"
yaml "gopkg.in/yaml.v2"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/auth/exported"
)
@ -16,17 +17,14 @@ var _ exported.GenesisAccount = (*BaseAccount)(nil)
// NewBaseAccount creates a new BaseAccount object
func NewBaseAccount(address sdk.AccAddress, pubKey crypto.PubKey, accountNumber, sequence uint64) *BaseAccount {
var pkStr string
if pubKey != nil {
pkStr = sdk.MustBech32ifyPubKey(sdk.Bech32PubKeyTypeAccPub, pubKey)
}
return &BaseAccount{
acc := &BaseAccount{
Address: address,
PubKey: pkStr,
AccountNumber: accountNumber,
Sequence: sequence,
}
acc.SetPubKey(pubKey)
return acc
}
// ProtoBaseAccount - a prototype function for BaseAccount
@ -57,22 +55,23 @@ func (acc *BaseAccount) SetAddress(addr sdk.AccAddress) error {
}
// GetPubKey - Implements sdk.Account.
func (acc BaseAccount) GetPubKey() crypto.PubKey {
if acc.PubKey == "" {
func (acc BaseAccount) GetPubKey() (pk crypto.PubKey) {
if len(acc.PubKey) == 0 {
return nil
}
return sdk.MustGetPubKeyFromBech32(sdk.Bech32PubKeyTypeAccPub, acc.PubKey)
codec.Cdc.MustUnmarshalBinaryBare(acc.PubKey, &pk)
return pk
}
// SetPubKey - Implements sdk.Account.
func (acc *BaseAccount) SetPubKey(pubKey crypto.PubKey) error {
pkStr, err := sdk.Bech32ifyPubKey(sdk.Bech32PubKeyTypeAccPub, pubKey)
if err != nil {
return err
if pubKey == nil {
acc.PubKey = nil
} else {
acc.PubKey = pubKey.Bytes()
}
acc.PubKey = pkStr
return nil
}
@ -100,15 +99,47 @@ func (acc *BaseAccount) SetSequence(seq uint64) error {
// Validate checks for errors on the account fields
func (acc BaseAccount) Validate() error {
if acc.PubKey != "" && acc.Address != nil &&
if len(acc.PubKey) != 0 && acc.Address != nil &&
!bytes.Equal(acc.GetPubKey().Address().Bytes(), acc.Address.Bytes()) {
return errors.New("pubkey and address pair is invalid")
return errors.New("account address and pubkey address do not match")
}
return nil
}
func (acc BaseAccount) String() string {
out, _ := yaml.Marshal(acc)
return string(out)
out, _ := acc.MarshalYAML()
return out.(string)
}
type baseAccountPretty struct {
Address sdk.AccAddress `json:"address" yaml:"address"`
PubKey string `json:"public_key" yaml:"public_key"`
AccountNumber uint64 `json:"account_number" yaml:"account_number"`
Sequence uint64 `json:"sequence" yaml:"sequence"`
}
// MarshalYAML returns the YAML representation of an account.
func (acc BaseAccount) MarshalYAML() (interface{}, error) {
alias := baseAccountPretty{
Address: acc.Address,
AccountNumber: acc.AccountNumber,
Sequence: acc.Sequence,
}
if acc.PubKey != nil {
pks, err := sdk.Bech32ifyPubKey(sdk.Bech32PubKeyTypeAccPub, acc.GetPubKey())
if err != nil {
return nil, err
}
alias.PubKey = pks
}
bz, err := yaml.Marshal(alias)
if err != nil {
return nil, err
}
return string(bz), err
}

View File

@ -1,7 +1,6 @@
package types_test
import (
"errors"
"testing"
"github.com/stretchr/testify/require"
@ -86,17 +85,17 @@ func TestGenesisAccountValidate(t *testing.T) {
tests := []struct {
name string
acc exported.GenesisAccount
expErr error
expErr bool
}{
{
"valid base account",
baseAcc,
nil,
false,
},
{
"invalid base valid account",
types.NewBaseAccount(addr, secp256k1.GenPrivKey().PubKey(), 0, 0),
errors.New("pubkey and address pair is invalid"),
true,
},
}
@ -104,8 +103,7 @@ func TestGenesisAccountValidate(t *testing.T) {
tt := tt
t.Run(tt.name, func(t *testing.T) {
err := tt.acc.Validate()
require.Equal(t, tt.expErr, err)
require.Equal(t, tt.expErr, tt.acc.Validate() != nil)
})
}
}

View File

@ -30,7 +30,7 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
// type for additional functionality (e.g. vesting).
type BaseAccount struct {
Address github_com_cosmos_cosmos_sdk_types.AccAddress `protobuf:"bytes,1,opt,name=address,proto3,casttype=github.com/cosmos/cosmos-sdk/types.AccAddress" json:"address,omitempty"`
PubKey string `protobuf:"bytes,2,opt,name=pub_key,json=pubKey,proto3" json:"pub_key,omitempty" yaml:"public_key"`
PubKey []byte `protobuf:"bytes,2,opt,name=pub_key,json=pubKey,proto3" json:"pub_key,omitempty" yaml:"public_key"`
AccountNumber uint64 `protobuf:"varint,3,opt,name=account_number,json=accountNumber,proto3" json:"account_number,omitempty" yaml:"account_number"`
Sequence uint64 `protobuf:"varint,4,opt,name=sequence,proto3" json:"sequence,omitempty"`
}
@ -207,46 +207,45 @@ func init() {
func init() { proto.RegisterFile("x/auth/types/types.proto", fileDescriptor_2d526fa662daab74) }
var fileDescriptor_2d526fa662daab74 = []byte{
// 610 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x3d, 0x6f, 0xd3, 0x4e,
0x18, 0x8f, 0xff, 0xc9, 0x3f, 0x2d, 0xd7, 0x82, 0x88, 0xfb, 0xe6, 0x46, 0xc8, 0x17, 0x79, 0x40,
0x61, 0xa8, 0x43, 0x8a, 0x8a, 0xd4, 0x0c, 0x88, 0x3a, 0xc0, 0x52, 0xa8, 0x2a, 0x47, 0x62, 0x40,
0x42, 0xd6, 0xf9, 0x7c, 0x38, 0x56, 0x7a, 0x39, 0xd7, 0x77, 0xae, 0xec, 0x7e, 0x02, 0x46, 0x46,
0xc6, 0xce, 0x7c, 0x92, 0x8e, 0x1d, 0x99, 0x5c, 0x94, 0x2e, 0xcc, 0x1e, 0x99, 0x90, 0x7d, 0x69,
0x49, 0x4b, 0x41, 0x2c, 0xc9, 0x3d, 0xcf, 0xef, 0xed, 0xee, 0xf1, 0x1d, 0xd0, 0x92, 0x0e, 0x8a,
0xc5, 0xb0, 0x23, 0xd2, 0x90, 0x70, 0xf9, 0x6b, 0x86, 0x11, 0x13, 0x4c, 0x5d, 0xc6, 0x8c, 0x53,
0xc6, 0x1d, 0xee, 0x8d, 0xcc, 0xc4, 0x2c, 0x48, 0xe6, 0x51, 0xb7, 0xf9, 0x50, 0x0c, 0x83, 0xc8,
0x73, 0x42, 0x14, 0x89, 0xb4, 0x53, 0x12, 0x3b, 0x3e, 0xf3, 0xd9, 0xaf, 0x95, 0x54, 0x37, 0x1b,
0xbf, 0x19, 0x1a, 0xb9, 0x02, 0x16, 0x2c, 0xc4, 0xc9, 0x0e, 0xc6, 0x2c, 0x1e, 0x0b, 0x75, 0x17,
0xcc, 0x21, 0xcf, 0x8b, 0x08, 0xe7, 0x9a, 0xd2, 0x52, 0xda, 0x8b, 0x56, 0xf7, 0x47, 0x06, 0x37,
0xfc, 0x40, 0x0c, 0x63, 0xd7, 0xc4, 0x8c, 0x76, 0xe4, 0x06, 0xa6, 0x7f, 0x1b, 0xdc, 0x1b, 0x4d,
0xed, 0x76, 0x30, 0xde, 0x91, 0x42, 0xfb, 0xd2, 0x41, 0x35, 0xc1, 0x5c, 0x18, 0xbb, 0xce, 0x88,
0xa4, 0xda, 0x7f, 0x2d, 0xa5, 0x7d, 0xc7, 0x5a, 0xc9, 0x33, 0xd8, 0x48, 0x11, 0x3d, 0xe8, 0x19,
0x61, 0xec, 0x1e, 0x04, 0xb8, 0xc0, 0x0c, 0xbb, 0x1e, 0xc6, 0xee, 0x2e, 0x49, 0xd5, 0xe7, 0xe0,
0x1e, 0x92, 0xfb, 0x70, 0xc6, 0x31, 0x75, 0x49, 0xa4, 0x55, 0x5b, 0x4a, 0xbb, 0x66, 0xad, 0xe7,
0x19, 0x5c, 0x91, 0xb2, 0xeb, 0xb8, 0x61, 0xdf, 0x9d, 0x36, 0xf6, 0xca, 0x5a, 0x6d, 0x82, 0x79,
0x4e, 0x0e, 0x63, 0x32, 0xc6, 0x44, 0xab, 0x15, 0x5a, 0xfb, 0xaa, 0xee, 0xcd, 0x7f, 0x3c, 0x81,
0x95, 0xcf, 0x27, 0xb0, 0x62, 0xa4, 0xa0, 0x3e, 0x10, 0xde, 0x2b, 0x42, 0xd4, 0xf7, 0xa0, 0x8e,
0x68, 0xa1, 0xd7, 0x94, 0x56, 0xb5, 0xbd, 0xb0, 0xb9, 0x64, 0xce, 0x0c, 0xf8, 0xa8, 0x6b, 0xf6,
0x59, 0x30, 0xb6, 0x1e, 0x9f, 0x66, 0xb0, 0xf2, 0xe5, 0x1c, 0xb6, 0xff, 0x61, 0x0c, 0x85, 0x80,
0xdb, 0x53, 0x53, 0xf5, 0x3e, 0xa8, 0xfa, 0x88, 0x97, 0x87, 0xaf, 0xd9, 0xc5, 0xd2, 0x38, 0xaf,
0x82, 0xfa, 0x3e, 0x8a, 0x10, 0xe5, 0xea, 0x1e, 0x58, 0xa2, 0x28, 0x71, 0x28, 0xa1, 0xcc, 0xc1,
0x43, 0x14, 0x21, 0x2c, 0x48, 0x24, 0xc7, 0x5e, 0xb3, 0xf4, 0x3c, 0x83, 0x4d, 0x79, 0xe4, 0x5b,
0x48, 0x86, 0xdd, 0xa0, 0x28, 0x79, 0x43, 0x28, 0xeb, 0x5f, 0xf5, 0xd4, 0x6d, 0xb0, 0x28, 0x12,
0x87, 0x07, 0xbe, 0x73, 0x10, 0xd0, 0x40, 0xc8, 0x54, 0x6b, 0x2d, 0xcf, 0xe0, 0x92, 0x34, 0x9a,
0x45, 0x0d, 0x1b, 0x88, 0x64, 0x10, 0xf8, 0xaf, 0x8b, 0x42, 0xb5, 0xc1, 0x4a, 0x09, 0x1e, 0x13,
0x07, 0x33, 0x2e, 0x9c, 0x90, 0x44, 0x8e, 0x9b, 0x0a, 0x32, 0x9d, 0x7f, 0x2b, 0xcf, 0xe0, 0x83,
0x19, 0x8f, 0x9b, 0x34, 0xc3, 0x6e, 0x14, 0x66, 0xc7, 0xa4, 0xcf, 0xb8, 0xd8, 0x27, 0x91, 0x95,
0x0a, 0xa2, 0x1e, 0x82, 0xb5, 0x22, 0xed, 0x88, 0x44, 0xc1, 0x87, 0x54, 0xf2, 0x89, 0xb7, 0xb9,
0xb5, 0xd5, 0xdd, 0x96, 0x5f, 0xc6, 0xea, 0x4d, 0x32, 0xb8, 0x3c, 0x08, 0xfc, 0xb7, 0x25, 0xa3,
0x90, 0xbe, 0x7c, 0x51, 0xe2, 0x79, 0x06, 0x75, 0x99, 0xf6, 0x07, 0x03, 0xc3, 0x5e, 0xe6, 0xd7,
0x74, 0xb2, 0xad, 0xa6, 0x60, 0xfd, 0xa6, 0x82, 0x13, 0x1c, 0x6e, 0x6e, 0x3d, 0x1d, 0x75, 0xb5,
0xff, 0xcb, 0xd0, 0x67, 0x93, 0x0c, 0xae, 0x5e, 0x0b, 0x1d, 0x5c, 0x32, 0xf2, 0x0c, 0xb6, 0x6e,
0x8f, 0xbd, 0x32, 0x31, 0xec, 0x55, 0x7e, 0xab, 0xb6, 0x37, 0x5f, 0x5c, 0xac, 0xef, 0x27, 0x50,
0xb1, 0xfa, 0xa7, 0x13, 0x5d, 0x39, 0x9b, 0xe8, 0xca, 0xb7, 0x89, 0xae, 0x7c, 0xba, 0xd0, 0x2b,
0x67, 0x17, 0x7a, 0xe5, 0xeb, 0x85, 0x5e, 0x79, 0xf7, 0xe8, 0xaf, 0xf7, 0x67, 0xf6, 0xcd, 0xbb,
0xf5, 0xf2, 0x75, 0x3e, 0xf9, 0x19, 0x00, 0x00, 0xff, 0xff, 0xd6, 0x52, 0x88, 0x39, 0x0a, 0x04,
0x00, 0x00,
// 606 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x3f, 0x6f, 0xd3, 0x40,
0x14, 0x8f, 0x49, 0x48, 0xab, 0x6b, 0x41, 0xc4, 0xfd, 0xe7, 0x46, 0xc8, 0x17, 0x79, 0x40, 0x61,
0xa8, 0x43, 0x8a, 0x8a, 0xd4, 0x0c, 0x88, 0x3a, 0xc0, 0x52, 0xa8, 0x2a, 0x47, 0x62, 0x40, 0x42,
0xd6, 0xf9, 0x7c, 0x38, 0x56, 0x7a, 0x39, 0xd7, 0x77, 0xae, 0xec, 0x7e, 0x02, 0x46, 0x46, 0xc6,
0xce, 0x7c, 0x92, 0x8e, 0x1d, 0x99, 0x5c, 0x94, 0x2e, 0xcc, 0x1e, 0x99, 0x90, 0x7d, 0x69, 0x49,
0x4b, 0x41, 0x2c, 0xc9, 0xbd, 0xf7, 0xfb, 0x77, 0xf7, 0x7c, 0x07, 0xb4, 0xa4, 0x83, 0x62, 0x31,
0xec, 0x88, 0x34, 0x24, 0x5c, 0xfe, 0x9a, 0x61, 0xc4, 0x04, 0x53, 0x97, 0x31, 0xe3, 0x94, 0x71,
0x87, 0x7b, 0x23, 0x33, 0x31, 0x0b, 0x92, 0x79, 0xd4, 0x6d, 0x3e, 0x12, 0xc3, 0x20, 0xf2, 0x9c,
0x10, 0x45, 0x22, 0xed, 0x94, 0xc4, 0x8e, 0xcf, 0x7c, 0xf6, 0x7b, 0x25, 0xd5, 0xcd, 0xc6, 0x1f,
0x86, 0x46, 0xae, 0x80, 0x05, 0x0b, 0x71, 0xb2, 0x83, 0x31, 0x8b, 0xc7, 0x42, 0xdd, 0x05, 0x73,
0xc8, 0xf3, 0x22, 0xc2, 0xb9, 0xa6, 0xb4, 0x94, 0xf6, 0xa2, 0xd5, 0xfd, 0x99, 0xc1, 0x0d, 0x3f,
0x10, 0xc3, 0xd8, 0x35, 0x31, 0xa3, 0x1d, 0xb9, 0x81, 0xe9, 0xdf, 0x06, 0xf7, 0x46, 0x53, 0xbb,
0x1d, 0x8c, 0x77, 0xa4, 0xd0, 0xbe, 0x74, 0x50, 0x4d, 0x30, 0x17, 0xc6, 0xae, 0x33, 0x22, 0xa9,
0x76, 0xa7, 0x34, 0x5b, 0xc9, 0x33, 0xd8, 0x48, 0x11, 0x3d, 0xe8, 0x19, 0x61, 0xec, 0x1e, 0x04,
0xb8, 0xc0, 0x0c, 0xbb, 0x1e, 0xc6, 0xee, 0x2e, 0x49, 0xd5, 0x17, 0xe0, 0x3e, 0x92, 0xfb, 0x70,
0xc6, 0x31, 0x75, 0x49, 0xa4, 0x55, 0x5b, 0x4a, 0xbb, 0x66, 0xad, 0xe7, 0x19, 0x5c, 0x91, 0xb2,
0xeb, 0xb8, 0x61, 0xdf, 0x9b, 0x36, 0xf6, 0xca, 0x5a, 0x6d, 0x82, 0x79, 0x4e, 0x0e, 0x63, 0x32,
0xc6, 0x44, 0xab, 0x15, 0x5a, 0xfb, 0xaa, 0xee, 0xcd, 0x7f, 0x3a, 0x81, 0x95, 0x2f, 0x27, 0xb0,
0x62, 0xa4, 0xa0, 0x3e, 0x10, 0xde, 0x6b, 0x42, 0xd4, 0x0f, 0xa0, 0x8e, 0x68, 0xa1, 0xd7, 0x94,
0x56, 0xb5, 0xbd, 0xb0, 0xb9, 0x64, 0xce, 0x0c, 0xf8, 0xa8, 0x6b, 0xf6, 0x59, 0x30, 0xb6, 0x9e,
0x9c, 0x66, 0xb0, 0xf2, 0xf5, 0x1c, 0xb6, 0xff, 0x63, 0x0c, 0x85, 0x80, 0xdb, 0x53, 0x53, 0xf5,
0x01, 0xa8, 0xfa, 0x88, 0x97, 0x87, 0xaf, 0xd9, 0xc5, 0xd2, 0x38, 0xaf, 0x82, 0xfa, 0x3e, 0x8a,
0x10, 0xe5, 0xea, 0x1e, 0x58, 0xa2, 0x28, 0x71, 0x28, 0xa1, 0xcc, 0xc1, 0x43, 0x14, 0x21, 0x2c,
0x48, 0x24, 0xc7, 0x5e, 0xb3, 0xf4, 0x3c, 0x83, 0x4d, 0x79, 0xe4, 0x5b, 0x48, 0x86, 0xdd, 0xa0,
0x28, 0x79, 0x4b, 0x28, 0xeb, 0x5f, 0xf5, 0xd4, 0x6d, 0xb0, 0x28, 0x12, 0x87, 0x07, 0xbe, 0x73,
0x10, 0xd0, 0x40, 0xc8, 0x54, 0x6b, 0x2d, 0xcf, 0xe0, 0x92, 0x34, 0x9a, 0x45, 0x0d, 0x1b, 0x88,
0x64, 0x10, 0xf8, 0x6f, 0x8a, 0x42, 0xb5, 0xc1, 0x4a, 0x09, 0x1e, 0x13, 0x07, 0x33, 0x2e, 0x9c,
0x90, 0x44, 0x8e, 0x9b, 0x0a, 0x32, 0x9d, 0x7f, 0x2b, 0xcf, 0xe0, 0xc3, 0x19, 0x8f, 0x9b, 0x34,
0xc3, 0x6e, 0x14, 0x66, 0xc7, 0xa4, 0xcf, 0xb8, 0xd8, 0x27, 0x91, 0x95, 0x0a, 0xa2, 0x1e, 0x82,
0xb5, 0x22, 0xed, 0x88, 0x44, 0xc1, 0xc7, 0x54, 0xf2, 0x89, 0xb7, 0xb9, 0xb5, 0xd5, 0xdd, 0x96,
0x5f, 0xc6, 0xea, 0x4d, 0x32, 0xb8, 0x3c, 0x08, 0xfc, 0x77, 0x25, 0xa3, 0x90, 0xbe, 0x7a, 0x59,
0xe2, 0x79, 0x06, 0x75, 0x99, 0xf6, 0x17, 0x03, 0xc3, 0x5e, 0xe6, 0xd7, 0x74, 0xb2, 0xad, 0xa6,
0x60, 0xfd, 0xa6, 0x82, 0x13, 0x1c, 0x6e, 0x6e, 0x3d, 0x1b, 0x75, 0xb5, 0xbb, 0x65, 0xe8, 0xf3,
0x49, 0x06, 0x57, 0xaf, 0x85, 0x0e, 0x2e, 0x19, 0x79, 0x06, 0x5b, 0xb7, 0xc7, 0x5e, 0x99, 0x18,
0xf6, 0x2a, 0xbf, 0x55, 0xdb, 0x9b, 0x2f, 0x2e, 0xd6, 0x8f, 0x13, 0xa8, 0x58, 0xfd, 0xd3, 0x89,
0xae, 0x9c, 0x4d, 0x74, 0xe5, 0xfb, 0x44, 0x57, 0x3e, 0x5f, 0xe8, 0x95, 0xb3, 0x0b, 0xbd, 0xf2,
0xed, 0x42, 0xaf, 0xbc, 0x7f, 0xfc, 0xcf, 0xfb, 0x33, 0xfb, 0xe6, 0xdd, 0x7a, 0xf9, 0x3a, 0x9f,
0xfe, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x84, 0x2e, 0x85, 0xe8, 0x0a, 0x04, 0x00, 0x00,
}
func (this *Params) Equal(that interface{}) bool {
@ -571,7 +570,7 @@ func (m *BaseAccount) Unmarshal(dAtA []byte) error {
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field PubKey", wireType)
}
var stringLen uint64
var byteLen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTypes
@ -581,23 +580,25 @@ func (m *BaseAccount) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
byteLen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
if byteLen < 0 {
return ErrInvalidLengthTypes
}
postIndex := iNdEx + intStringLen
postIndex := iNdEx + byteLen
if postIndex < 0 {
return ErrInvalidLengthTypes
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.PubKey = string(dAtA[iNdEx:postIndex])
m.PubKey = append(m.PubKey[:0], dAtA[iNdEx:postIndex]...)
if m.PubKey == nil {
m.PubKey = []byte{}
}
iNdEx = postIndex
case 3:
if wireType != 0 {

View File

@ -14,7 +14,7 @@ message BaseAccount {
option (gogoproto.goproto_stringer) = false;
bytes address = 1 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.AccAddress"];
string pub_key = 2 [(gogoproto.moretags) = "yaml:\"public_key\""];
bytes pub_key = 2 [(gogoproto.moretags) = "yaml:\"public_key\""];
uint64 account_number = 3 [(gogoproto.moretags) = "yaml:\"account_number\""];
uint64 sequence = 4;
}

View File

@ -1,10 +1,10 @@
package types
import (
"encoding/json"
"errors"
"time"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
authexported "github.com/cosmos/cosmos-sdk/x/auth/exported"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
@ -164,7 +164,7 @@ func (bva BaseVestingAccount) Validate() error {
return bva.BaseAccount.Validate()
}
type vestingAccountPretty struct {
type vestingAccountYAML struct {
Address sdk.AccAddress `json:"address" yaml:"address"`
PubKey string `json:"public_key" yaml:"public_key"`
AccountNumber uint64 `json:"account_number" yaml:"account_number"`
@ -179,6 +179,21 @@ type vestingAccountPretty struct {
VestingPeriods Periods `json:"vesting_periods,omitempty" yaml:"vesting_periods,omitempty"`
}
type vestingAccountJSON struct {
Address sdk.AccAddress `json:"address" yaml:"address"`
PubKey crypto.PubKey `json:"public_key" yaml:"public_key"`
AccountNumber uint64 `json:"account_number" yaml:"account_number"`
Sequence uint64 `json:"sequence" yaml:"sequence"`
OriginalVesting sdk.Coins `json:"original_vesting" yaml:"original_vesting"`
DelegatedFree sdk.Coins `json:"delegated_free" yaml:"delegated_free"`
DelegatedVesting sdk.Coins `json:"delegated_vesting" yaml:"delegated_vesting"`
EndTime int64 `json:"end_time" yaml:"end_time"`
// custom fields based on concrete vesting type which can be omitted
StartTime int64 `json:"start_time,omitempty" yaml:"start_time,omitempty"`
VestingPeriods Periods `json:"vesting_periods,omitempty" yaml:"vesting_periods,omitempty"`
}
func (bva BaseVestingAccount) String() string {
out, _ := bva.MarshalYAML()
return out.(string)
@ -186,9 +201,8 @@ func (bva BaseVestingAccount) String() string {
// MarshalYAML returns the YAML representation of a BaseVestingAccount.
func (bva BaseVestingAccount) MarshalYAML() (interface{}, error) {
alias := vestingAccountPretty{
alias := vestingAccountYAML{
Address: bva.Address,
PubKey: bva.PubKey,
AccountNumber: bva.AccountNumber,
Sequence: bva.Sequence,
OriginalVesting: bva.OriginalVesting,
@ -197,6 +211,16 @@ func (bva BaseVestingAccount) MarshalYAML() (interface{}, error) {
EndTime: bva.EndTime,
}
pk := bva.GetPubKey()
if pk != nil {
pks, err := sdk.Bech32ifyPubKey(sdk.Bech32PubKeyTypeAccPub, pk)
if err != nil {
return nil, err
}
alias.PubKey = pks
}
bz, err := yaml.Marshal(alias)
if err != nil {
return nil, err
@ -207,9 +231,9 @@ func (bva BaseVestingAccount) MarshalYAML() (interface{}, error) {
// MarshalJSON returns the JSON representation of a BaseVestingAccount.
func (bva BaseVestingAccount) MarshalJSON() ([]byte, error) {
alias := vestingAccountPretty{
alias := vestingAccountJSON{
Address: bva.Address,
PubKey: bva.PubKey,
PubKey: bva.GetPubKey(),
AccountNumber: bva.AccountNumber,
Sequence: bva.Sequence,
OriginalVesting: bva.OriginalVesting,
@ -218,29 +242,17 @@ func (bva BaseVestingAccount) MarshalJSON() ([]byte, error) {
EndTime: bva.EndTime,
}
return json.Marshal(alias)
return codec.Cdc.MarshalJSON(alias)
}
// UnmarshalJSON unmarshals raw JSON bytes into a BaseVestingAccount.
func (bva *BaseVestingAccount) UnmarshalJSON(bz []byte) error {
var alias vestingAccountPretty
if err := json.Unmarshal(bz, &alias); err != nil {
var alias vestingAccountJSON
if err := codec.Cdc.UnmarshalJSON(bz, &alias); err != nil {
return err
}
var (
pk crypto.PubKey
err error
)
if alias.PubKey != "" {
pk, err = sdk.GetPubKeyFromBech32(sdk.Bech32PubKeyTypeAccPub, alias.PubKey)
if err != nil {
return err
}
}
bva.BaseAccount = authtypes.NewBaseAccount(alias.Address, pk, alias.AccountNumber, alias.Sequence)
bva.BaseAccount = authtypes.NewBaseAccount(alias.Address, alias.PubKey, alias.AccountNumber, alias.Sequence)
bva.OriginalVesting = alias.OriginalVesting
bva.DelegatedFree = alias.DelegatedFree
bva.DelegatedVesting = alias.DelegatedVesting
@ -344,9 +356,8 @@ func (cva ContinuousVestingAccount) String() string {
// MarshalYAML returns the YAML representation of a ContinuousVestingAccount.
func (cva ContinuousVestingAccount) MarshalYAML() (interface{}, error) {
alias := vestingAccountPretty{
alias := vestingAccountYAML{
Address: cva.Address,
PubKey: cva.PubKey,
AccountNumber: cva.AccountNumber,
Sequence: cva.Sequence,
OriginalVesting: cva.OriginalVesting,
@ -356,6 +367,16 @@ func (cva ContinuousVestingAccount) MarshalYAML() (interface{}, error) {
StartTime: cva.StartTime,
}
pk := cva.GetPubKey()
if pk != nil {
pks, err := sdk.Bech32ifyPubKey(sdk.Bech32PubKeyTypeAccPub, pk)
if err != nil {
return nil, err
}
alias.PubKey = pks
}
bz, err := yaml.Marshal(alias)
if err != nil {
return nil, err
@ -366,9 +387,9 @@ func (cva ContinuousVestingAccount) MarshalYAML() (interface{}, error) {
// MarshalJSON returns the JSON representation of a ContinuousVestingAccount.
func (cva ContinuousVestingAccount) MarshalJSON() ([]byte, error) {
alias := vestingAccountPretty{
alias := vestingAccountJSON{
Address: cva.Address,
PubKey: cva.PubKey,
PubKey: cva.GetPubKey(),
AccountNumber: cva.AccountNumber,
Sequence: cva.Sequence,
OriginalVesting: cva.OriginalVesting,
@ -378,30 +399,18 @@ func (cva ContinuousVestingAccount) MarshalJSON() ([]byte, error) {
StartTime: cva.StartTime,
}
return json.Marshal(alias)
return codec.Cdc.MarshalJSON(alias)
}
// UnmarshalJSON unmarshals raw JSON bytes into a ContinuousVestingAccount.
func (cva *ContinuousVestingAccount) UnmarshalJSON(bz []byte) error {
var alias vestingAccountPretty
if err := json.Unmarshal(bz, &alias); err != nil {
var alias vestingAccountJSON
if err := codec.Cdc.UnmarshalJSON(bz, &alias); err != nil {
return err
}
var (
pk crypto.PubKey
err error
)
if alias.PubKey != "" {
pk, err = sdk.GetPubKeyFromBech32(sdk.Bech32PubKeyTypeAccPub, alias.PubKey)
if err != nil {
return err
}
}
cva.BaseVestingAccount = &BaseVestingAccount{
BaseAccount: authtypes.NewBaseAccount(alias.Address, pk, alias.AccountNumber, alias.Sequence),
BaseAccount: authtypes.NewBaseAccount(alias.Address, alias.PubKey, alias.AccountNumber, alias.Sequence),
OriginalVesting: alias.OriginalVesting,
DelegatedFree: alias.DelegatedFree,
DelegatedVesting: alias.DelegatedVesting,
@ -536,9 +545,8 @@ func (pva PeriodicVestingAccount) String() string {
// MarshalYAML returns the YAML representation of a PeriodicVestingAccount.
func (pva PeriodicVestingAccount) MarshalYAML() (interface{}, error) {
alias := vestingAccountPretty{
alias := vestingAccountYAML{
Address: pva.Address,
PubKey: pva.PubKey,
AccountNumber: pva.AccountNumber,
Sequence: pva.Sequence,
OriginalVesting: pva.OriginalVesting,
@ -549,6 +557,16 @@ func (pva PeriodicVestingAccount) MarshalYAML() (interface{}, error) {
VestingPeriods: pva.VestingPeriods,
}
pk := pva.GetPubKey()
if pk != nil {
pks, err := sdk.Bech32ifyPubKey(sdk.Bech32PubKeyTypeAccPub, pk)
if err != nil {
return nil, err
}
alias.PubKey = pks
}
bz, err := yaml.Marshal(alias)
if err != nil {
return nil, err
@ -559,9 +577,9 @@ func (pva PeriodicVestingAccount) MarshalYAML() (interface{}, error) {
// MarshalJSON returns the JSON representation of a PeriodicVestingAccount.
func (pva PeriodicVestingAccount) MarshalJSON() ([]byte, error) {
alias := vestingAccountPretty{
alias := vestingAccountJSON{
Address: pva.Address,
PubKey: pva.PubKey,
PubKey: pva.GetPubKey(),
AccountNumber: pva.AccountNumber,
Sequence: pva.Sequence,
OriginalVesting: pva.OriginalVesting,
@ -572,30 +590,18 @@ func (pva PeriodicVestingAccount) MarshalJSON() ([]byte, error) {
VestingPeriods: pva.VestingPeriods,
}
return json.Marshal(alias)
return codec.Cdc.MarshalJSON(alias)
}
// UnmarshalJSON unmarshals raw JSON bytes into a PeriodicVestingAccount.
func (pva *PeriodicVestingAccount) UnmarshalJSON(bz []byte) error {
var alias vestingAccountPretty
if err := json.Unmarshal(bz, &alias); err != nil {
var alias vestingAccountJSON
if err := codec.Cdc.UnmarshalJSON(bz, &alias); err != nil {
return err
}
var (
pk crypto.PubKey
err error
)
if alias.PubKey != "" {
pk, err = sdk.GetPubKeyFromBech32(sdk.Bech32PubKeyTypeAccPub, alias.PubKey)
if err != nil {
return err
}
}
pva.BaseVestingAccount = &BaseVestingAccount{
BaseAccount: authtypes.NewBaseAccount(alias.Address, pk, alias.AccountNumber, alias.Sequence),
BaseAccount: authtypes.NewBaseAccount(alias.Address, alias.PubKey, alias.AccountNumber, alias.Sequence),
OriginalVesting: alias.OriginalVesting,
DelegatedFree: alias.DelegatedFree,
DelegatedVesting: alias.DelegatedVesting,
@ -676,9 +682,9 @@ func (dva DelayedVestingAccount) String() string {
// MarshalJSON returns the JSON representation of a DelayedVestingAccount.
func (dva DelayedVestingAccount) MarshalJSON() ([]byte, error) {
alias := vestingAccountPretty{
alias := vestingAccountJSON{
Address: dva.Address,
PubKey: dva.PubKey,
PubKey: dva.GetPubKey(),
AccountNumber: dva.AccountNumber,
Sequence: dva.Sequence,
OriginalVesting: dva.OriginalVesting,
@ -687,30 +693,18 @@ func (dva DelayedVestingAccount) MarshalJSON() ([]byte, error) {
EndTime: dva.EndTime,
}
return json.Marshal(alias)
return codec.Cdc.MarshalJSON(alias)
}
// UnmarshalJSON unmarshals raw JSON bytes into a DelayedVestingAccount.
func (dva *DelayedVestingAccount) UnmarshalJSON(bz []byte) error {
var alias vestingAccountPretty
if err := json.Unmarshal(bz, &alias); err != nil {
var alias vestingAccountJSON
if err := codec.Cdc.UnmarshalJSON(bz, &alias); err != nil {
return err
}
var (
pk crypto.PubKey
err error
)
if alias.PubKey != "" {
pk, err = sdk.GetPubKeyFromBech32(sdk.Bech32PubKeyTypeAccPub, alias.PubKey)
if err != nil {
return err
}
}
dva.BaseVestingAccount = &BaseVestingAccount{
BaseAccount: authtypes.NewBaseAccount(alias.Address, pk, alias.AccountNumber, alias.Sequence),
BaseAccount: authtypes.NewBaseAccount(alias.Address, alias.PubKey, alias.AccountNumber, alias.Sequence),
OriginalVesting: alias.OriginalVesting,
DelegatedFree: alias.DelegatedFree,
DelegatedVesting: alias.DelegatedVesting,

View File

@ -2,7 +2,6 @@ package types_test
import (
"encoding/json"
"errors"
"testing"
"time"
@ -589,58 +588,59 @@ func TestGenesisAccountValidate(t *testing.T) {
tests := []struct {
name string
acc authexported.GenesisAccount
expErr error
expErr bool
}{
{
"valid base account",
baseAcc,
nil,
false,
},
{
"invalid base valid account",
authtypes.NewBaseAccount(addr, secp256k1.GenPrivKey().PubKey(), 0, 0),
errors.New("pubkey and address pair is invalid"),
true,
},
{
"valid base vesting account",
baseVestingWithCoins,
nil,
false,
},
{
"valid continuous vesting account",
types.NewContinuousVestingAccount(baseAcc, initialVesting, 100, 200),
nil,
false,
},
{
"invalid vesting times",
types.NewContinuousVestingAccount(baseAcc, initialVesting, 1654668078, 1554668078),
errors.New("vesting start-time cannot be before end-time"),
true,
},
{
"valid periodic vesting account",
types.NewPeriodicVestingAccount(baseAcc, initialVesting, 0, types.Periods{types.Period{Length: int64(100), Amount: sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 50)}}}),
nil,
false,
},
{
"invalid vesting period lengths",
types.NewPeriodicVestingAccountRaw(
baseVestingWithCoins,
0, types.Periods{types.Period{Length: int64(50), Amount: sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 50)}}}),
errors.New("vesting end time does not match length of all vesting periods"),
true,
},
{
"invalid vesting period amounts",
types.NewPeriodicVestingAccountRaw(
baseVestingWithCoins,
0, types.Periods{types.Period{Length: int64(100), Amount: sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 25)}}}),
errors.New("original vesting coins does not match the sum of all coins in vesting periods"),
true,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
err := tt.acc.Validate()
require.Equal(t, tt.expErr, err)
require.Equal(t, tt.expErr, tt.acc.Validate() != nil)
})
}
}

View File

@ -76,12 +76,17 @@ func (m *MsgUnjail) GetValidatorAddr() github_com_cosmos_cosmos_sdk_types.ValAdd
// ValidatorSigningInfo defines the signing info for a validator
type ValidatorSigningInfo struct {
Address github_com_cosmos_cosmos_sdk_types.ConsAddress `protobuf:"bytes,1,opt,name=address,proto3,casttype=github.com/cosmos/cosmos-sdk/types.ConsAddress" json:"address,omitempty"`
StartHeight int64 `protobuf:"varint,2,opt,name=start_height,json=startHeight,proto3" json:"start_height,omitempty" yaml:"start_height"`
IndexOffset int64 `protobuf:"varint,3,opt,name=index_offset,json=indexOffset,proto3" json:"index_offset,omitempty" yaml:"index_offset"`
JailedUntil time.Time `protobuf:"bytes,4,opt,name=jailed_until,json=jailedUntil,proto3,stdtime" json:"jailed_until" yaml:"jailed_until"`
Tombstoned bool `protobuf:"varint,5,opt,name=tombstoned,proto3" json:"tombstoned,omitempty"`
MissedBlocksCounter int64 `protobuf:"varint,6,opt,name=missed_blocks_counter,json=missedBlocksCounter,proto3" json:"missed_blocks_counter,omitempty" yaml:"missed_blocks_counter"`
Address github_com_cosmos_cosmos_sdk_types.ConsAddress `protobuf:"bytes,1,opt,name=address,proto3,casttype=github.com/cosmos/cosmos-sdk/types.ConsAddress" json:"address,omitempty"`
// height at which validator was first a candidate OR was unjailed
StartHeight int64 `protobuf:"varint,2,opt,name=start_height,json=startHeight,proto3" json:"start_height,omitempty" yaml:"start_height"`
// index offset into signed block bit array
IndexOffset int64 `protobuf:"varint,3,opt,name=index_offset,json=indexOffset,proto3" json:"index_offset,omitempty" yaml:"index_offset"`
// timestamp validator cannot be unjailed until
JailedUntil time.Time `protobuf:"bytes,4,opt,name=jailed_until,json=jailedUntil,proto3,stdtime" json:"jailed_until" yaml:"jailed_until"`
// whether or not a validator has been tombstoned (killed out of validator set)
Tombstoned bool `protobuf:"varint,5,opt,name=tombstoned,proto3" json:"tombstoned,omitempty"`
// missed blocks counter (to avoid scanning the array every time)
MissedBlocksCounter int64 `protobuf:"varint,6,opt,name=missed_blocks_counter,json=missedBlocksCounter,proto3" json:"missed_blocks_counter,omitempty" yaml:"missed_blocks_counter"`
}
func (m *ValidatorSigningInfo) Reset() { *m = ValidatorSigningInfo{} }

View File

@ -11,7 +11,7 @@ message MsgUnjail {
bytes validator_addr = 1 [
(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.ValAddress",
(gogoproto.moretags) = "yaml:\"address\"",
(gogoproto.jsontag) = "address"
(gogoproto.jsontag) = "address"
];
}
@ -21,15 +21,21 @@ message ValidatorSigningInfo {
option (gogoproto.goproto_stringer) = false;
bytes address = 1 [
(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.ConsAddress" // validator consensus address
(gogoproto.casttype) =
"github.com/cosmos/cosmos-sdk/types.ConsAddress" // validator consensus address
];
int64 start_height = 2 [(gogoproto.moretags) = "yaml:\"start_height\""]; // height at which validator was first a candidate OR was unjailed
int64 index_offset = 3 [(gogoproto.moretags) = "yaml:\"index_offset\""]; // index offset into signed block bit array
// height at which validator was first a candidate OR was unjailed
int64 start_height = 2 [(gogoproto.moretags) = "yaml:\"start_height\""];
// index offset into signed block bit array
int64 index_offset = 3 [(gogoproto.moretags) = "yaml:\"index_offset\""];
// timestamp validator cannot be unjailed until
google.protobuf.Timestamp jailed_until = 4 [
(gogoproto.moretags) = "yaml:\"jailed_until\"",
(gogoproto.moretags) = "yaml:\"jailed_until\"",
(gogoproto.stdtime) = true,
(gogoproto.nullable) = false
]; // timestamp validator cannot be unjailed until
bool tombstoned = 5; // whether or not a validator has been tombstoned (killed out of validator set)
int64 missed_blocks_counter = 6 [(gogoproto.moretags) = "yaml:\"missed_blocks_counter\""]; // missed blocks counter (to avoid scanning the array every time)
}
];
// whether or not a validator has been tombstoned (killed out of validator set)
bool tombstoned = 5;
// missed blocks counter (to avoid scanning the array every time)
int64 missed_blocks_counter = 6 [(gogoproto.moretags) = "yaml:\"missed_blocks_counter\""];
}