Merge PR #3159: Add address interface

* Add address interface
* Add test for addresses
* Address comments
This commit is contained in:
Jack Zampolin 2019-01-04 14:09:39 -08:00 committed by Christopher Goes
parent 966baa567d
commit 23819b1ce5
3 changed files with 48 additions and 3 deletions

View File

@ -61,6 +61,7 @@ IMPROVEMENTS
* Gaia CLI (`gaiacli`)
* Gaia
* [\#2186](https://github.com/cosmos/cosmos-sdk/issues/2186) Add Address Interface
* [\#3158](https://github.com/cosmos/cosmos-sdk/pull/3158) Validate slashing genesis
* [\#3172](https://github.com/cosmos/cosmos-sdk/pull/3172) Support minimum fees
in a local testnet.

View File

@ -31,6 +31,22 @@ const (
Bech32PrefixConsPub = "cosmosvalconspub"
)
// Address is a common interface for different types of addresses used by the SDK
type Address interface {
Equals(Address) bool
Empty() bool
Marshal() ([]byte, error)
MarshalJSON() ([]byte, error)
Bytes() []byte
String() string
Format(s fmt.State, verb rune)
}
// Ensure that different address types implement the interface
var _ Address = AccAddress{}
var _ Address = ValAddress{}
var _ Address = ConsAddress{}
// ----------------------------------------------------------------------------
// account
// ----------------------------------------------------------------------------
@ -65,7 +81,7 @@ func AccAddressFromBech32(address string) (addr AccAddress, err error) {
}
// Returns boolean for whether two AccAddresses are Equal
func (aa AccAddress) Equals(aa2 AccAddress) bool {
func (aa AccAddress) Equals(aa2 Address) bool {
if aa.Empty() && aa2.Empty() {
return true
}
@ -181,7 +197,7 @@ func ValAddressFromBech32(address string) (addr ValAddress, err error) {
}
// Returns boolean for whether two ValAddresses are Equal
func (va ValAddress) Equals(va2 ValAddress) bool {
func (va ValAddress) Equals(va2 Address) bool {
if va.Empty() && va2.Empty() {
return true
}
@ -303,7 +319,7 @@ func GetConsAddress(pubkey crypto.PubKey) ConsAddress {
}
// Returns boolean for whether two ConsAddress are Equal
func (ca ConsAddress) Equals(ca2 ConsAddress) bool {
func (ca ConsAddress) Equals(ca2 Address) bool {
if ca.Empty() && ca2.Empty() {
return true
}

View File

@ -221,3 +221,31 @@ func TestConfiguredPrefix(t *testing.T) {
}
}
func TestAddressInterface(t *testing.T) {
var pub ed25519.PubKeyEd25519
rand.Read(pub[:])
addrs := []types.Address{
types.ConsAddress(pub.Address()),
types.ValAddress(pub.Address()),
types.AccAddress(pub.Address()),
}
for _, addr := range addrs {
switch addr := addr.(type) {
case types.AccAddress:
_, err := types.AccAddressFromBech32(addr.String())
require.Nil(t, err)
case types.ValAddress:
_, err := types.ValAddressFromBech32(addr.String())
require.Nil(t, err)
case types.ConsAddress:
_, err := types.ConsAddressFromBech32(addr.String())
require.Nil(t, err)
default:
t.Fail()
}
}
}