Merge PR #2601: Bech32 Empty Addresses
This commit is contained in:
committed by
Christopher Goes
parent
fd5e7b9b80
commit
da0426a2dd
@@ -6,6 +6,7 @@ import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
"github.com/tendermint/tendermint/crypto/encoding/amino"
|
||||
@@ -71,12 +72,21 @@ func AccAddressFromHex(address string) (addr AccAddress, err error) {
|
||||
|
||||
// AccAddressFromBech32 creates an AccAddress from a Bech32 string.
|
||||
func AccAddressFromBech32(address string) (addr AccAddress, err error) {
|
||||
if len(strings.TrimSpace(address)) == 0 {
|
||||
return AccAddress{}, nil
|
||||
}
|
||||
|
||||
bech32PrefixAccAddr := GetConfig().GetBech32AccountAddrPrefix()
|
||||
|
||||
bz, err := GetFromBech32(address, bech32PrefixAccAddr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(bz) != AddrLen {
|
||||
return nil, errors.New("Incorrect address length")
|
||||
}
|
||||
|
||||
return AccAddress(bz), nil
|
||||
}
|
||||
|
||||
@@ -141,7 +151,12 @@ func (aa AccAddress) Bytes() []byte {
|
||||
|
||||
// String implements the Stringer interface.
|
||||
func (aa AccAddress) String() string {
|
||||
if aa.Empty() {
|
||||
return ""
|
||||
}
|
||||
|
||||
bech32PrefixAccAddr := GetConfig().GetBech32AccountAddrPrefix()
|
||||
|
||||
bech32Addr, err := bech32.ConvertAndEncode(bech32PrefixAccAddr, aa.Bytes())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
@@ -187,12 +202,21 @@ func ValAddressFromHex(address string) (addr ValAddress, err error) {
|
||||
|
||||
// ValAddressFromBech32 creates a ValAddress from a Bech32 string.
|
||||
func ValAddressFromBech32(address string) (addr ValAddress, err error) {
|
||||
if len(strings.TrimSpace(address)) == 0 {
|
||||
return ValAddress{}, nil
|
||||
}
|
||||
|
||||
bech32PrefixValAddr := GetConfig().GetBech32ValidatorAddrPrefix()
|
||||
|
||||
bz, err := GetFromBech32(address, bech32PrefixValAddr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(bz) != AddrLen {
|
||||
return nil, errors.New("Incorrect address length")
|
||||
}
|
||||
|
||||
return ValAddress(bz), nil
|
||||
}
|
||||
|
||||
@@ -258,7 +282,12 @@ func (va ValAddress) Bytes() []byte {
|
||||
|
||||
// String implements the Stringer interface.
|
||||
func (va ValAddress) String() string {
|
||||
if va.Empty() {
|
||||
return ""
|
||||
}
|
||||
|
||||
bech32PrefixValAddr := GetConfig().GetBech32ValidatorAddrPrefix()
|
||||
|
||||
bech32Addr, err := bech32.ConvertAndEncode(bech32PrefixValAddr, va.Bytes())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
@@ -304,12 +333,21 @@ func ConsAddressFromHex(address string) (addr ConsAddress, err error) {
|
||||
|
||||
// ConsAddressFromBech32 creates a ConsAddress from a Bech32 string.
|
||||
func ConsAddressFromBech32(address string) (addr ConsAddress, err error) {
|
||||
if len(strings.TrimSpace(address)) == 0 {
|
||||
return ConsAddress{}, nil
|
||||
}
|
||||
|
||||
bech32PrefixConsAddr := GetConfig().GetBech32ConsensusAddrPrefix()
|
||||
|
||||
bz, err := GetFromBech32(address, bech32PrefixConsAddr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(bz) != AddrLen {
|
||||
return nil, errors.New("Incorrect address length")
|
||||
}
|
||||
|
||||
return ConsAddress(bz), nil
|
||||
}
|
||||
|
||||
@@ -380,7 +418,12 @@ func (ca ConsAddress) Bytes() []byte {
|
||||
|
||||
// String implements the Stringer interface.
|
||||
func (ca ConsAddress) String() string {
|
||||
if ca.Empty() {
|
||||
return ""
|
||||
}
|
||||
|
||||
bech32PrefixConsAddr := GetConfig().GetBech32ConsensusAddrPrefix()
|
||||
|
||||
bech32Addr, err := bech32.ConvertAndEncode(bech32PrefixConsAddr, ca.Bytes())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
||||
+19
-2
@@ -13,7 +13,6 @@ import (
|
||||
)
|
||||
|
||||
var invalidStrs = []string{
|
||||
"",
|
||||
"hello, world!",
|
||||
"0xAA",
|
||||
"AAA",
|
||||
@@ -33,6 +32,24 @@ func testMarshal(t *testing.T, original interface{}, res interface{}, marshal fu
|
||||
require.Equal(t, original, res)
|
||||
}
|
||||
|
||||
func TestEmptyAddresses(t *testing.T) {
|
||||
require.Equal(t, (types.AccAddress{}).String(), "")
|
||||
require.Equal(t, (types.ValAddress{}).String(), "")
|
||||
require.Equal(t, (types.ConsAddress{}).String(), "")
|
||||
|
||||
accAddr, err := types.AccAddressFromBech32("")
|
||||
require.True(t, accAddr.Empty())
|
||||
require.Nil(t, err)
|
||||
|
||||
valAddr, err := types.ValAddressFromBech32("")
|
||||
require.True(t, valAddr.Empty())
|
||||
require.Nil(t, err)
|
||||
|
||||
consAddr, err := types.ConsAddressFromBech32("")
|
||||
require.True(t, consAddr.Empty())
|
||||
require.Nil(t, err)
|
||||
}
|
||||
|
||||
func TestRandBech32PubkeyConsistency(t *testing.T) {
|
||||
var pub ed25519.PubKeyEd25519
|
||||
|
||||
@@ -200,7 +217,7 @@ func TestConfiguredPrefix(t *testing.T) {
|
||||
config := types.GetConfig()
|
||||
config.SetBech32PrefixForAccount(prefix+"acc", prefix+"pub")
|
||||
acc := types.AccAddress(pub.Address())
|
||||
require.True(t, strings.HasPrefix(acc.String(), prefix+"acc"))
|
||||
require.True(t, strings.HasPrefix(acc.String(), prefix+"acc"), acc.String())
|
||||
bech32Pub := types.MustBech32ifyAccPub(pub)
|
||||
require.True(t, strings.HasPrefix(bech32Pub, prefix+"pub"))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user