Merge PR #3159: Add address interface
* Add address interface * Add test for addresses * Address comments
This commit is contained in:
parent
966baa567d
commit
23819b1ce5
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue