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 CLI (`gaiacli`)
|
||||||
|
|
||||||
* Gaia
|
* 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
|
* [\#3158](https://github.com/cosmos/cosmos-sdk/pull/3158) Validate slashing genesis
|
||||||
* [\#3172](https://github.com/cosmos/cosmos-sdk/pull/3172) Support minimum fees
|
* [\#3172](https://github.com/cosmos/cosmos-sdk/pull/3172) Support minimum fees
|
||||||
in a local testnet.
|
in a local testnet.
|
||||||
|
|
|
@ -31,6 +31,22 @@ const (
|
||||||
Bech32PrefixConsPub = "cosmosvalconspub"
|
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
|
// account
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@ -65,7 +81,7 @@ func AccAddressFromBech32(address string) (addr AccAddress, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns boolean for whether two AccAddresses are Equal
|
// 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() {
|
if aa.Empty() && aa2.Empty() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
@ -181,7 +197,7 @@ func ValAddressFromBech32(address string) (addr ValAddress, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns boolean for whether two ValAddresses are Equal
|
// 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() {
|
if va.Empty() && va2.Empty() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
@ -303,7 +319,7 @@ func GetConsAddress(pubkey crypto.PubKey) ConsAddress {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns boolean for whether two ConsAddress are Equal
|
// 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() {
|
if ca.Empty() && ca2.Empty() {
|
||||||
return true
|
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